bare minimum working ui update
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
This commit is contained in:
parent
cec82a6c67
commit
7c8e536f80
@ -14,18 +14,15 @@ void main(){
|
|||||||
|
|
||||||
|
|
||||||
vec2 finalPos = vec2(
|
vec2 finalPos = vec2(
|
||||||
((aPos.x + 1)/2 * mDimension.x + mPosition.x) * 2 - 1,
|
((aPos.x + 1)/2 * mDimension.x + mPosition.x) * 2 - 1,
|
||||||
((((aPos.y + 1)/2) * mDimension.y + mPosition.y) * 2 - 1)
|
((aPos.y + 1)/2 * -mDimension.y + mPosition.y) * 2 - 1
|
||||||
// (aPos.y * mDimension.y + mPosition.y)
|
);
|
||||||
// -((((aPos.y + 1)/2) * mDimension.y + mPosition.y) * 2 - 1)
|
|
||||||
// aPos.y * mDimension.y + (mPosition.y) + (1 - mDimension.y)
|
|
||||||
);
|
|
||||||
gl_Position = vec4(finalPos.x, finalPos.y, 0.0, 1.0);
|
gl_Position = vec4(finalPos.x, finalPos.y, 0.0, 1.0);
|
||||||
|
|
||||||
|
|
||||||
vec2 finalTex = vec2(
|
vec2 finalTex = vec2(
|
||||||
aTexCoords.x * tDimension.x + tPosition.x,
|
aTexCoords.x * tDimension.x + tPosition.x,
|
||||||
(1-aTexCoords.y) * tDimension.y + tPosition.y
|
(1 - aTexCoords.y) * tDimension.y + tPosition.y
|
||||||
);
|
);
|
||||||
TexCoords = finalTex;
|
TexCoords = finalTex;
|
||||||
}
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
#version 330 core
|
#version 430 core
|
||||||
out vec4 FragColor;
|
out vec4 FragColor;
|
||||||
|
|
||||||
in vec2 TexCoords;
|
in vec2 TexCoords;
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
#version 330 core
|
#version 430 core
|
||||||
layout (location = 0) in vec3 aPos;
|
layout (location = 0) in vec3 aPos;
|
||||||
layout (location = 4) in vec2 aTexCoords;
|
layout (location = 4) in vec2 aTexCoords;
|
||||||
|
|
||||||
@ -10,17 +10,19 @@ uniform vec3 tPosition;
|
|||||||
uniform vec3 tDimension;
|
uniform vec3 tDimension;
|
||||||
|
|
||||||
void main(){
|
void main(){
|
||||||
|
|
||||||
vec2 finalPos = vec2(
|
vec2 finalPos = vec2(
|
||||||
((aPos.x + 1)/2 * mDimension.x + mPosition.x) * 2 - 1,
|
((aPos.x + 1)/2 * mDimension.x + mPosition.x) * 2 - 1,
|
||||||
((((aPos.y + 1)/2) * mDimension.y + (1 - mDimension.y) - mPosition.y) * 2 - 1)
|
((aPos.y + 1)/2 * mDimension.y + (1 - mDimension.y) - mPosition.y) * 2 - 1
|
||||||
// ((((aPos.y + 1)/2) * mDimension.y + mPosition.y) * 2 - 1)
|
|
||||||
// aPos.y * mDimension.y + (mPosition.y) + (1 - mDimension.y)
|
// ((((aPos.y + 1)/2) * mDimension.y + mPosition.y) * 2 - 1)
|
||||||
);
|
// aPos.y * mDimension.y + (mPosition.y) + (1 - mDimension.y)
|
||||||
|
);
|
||||||
gl_Position = vec4(finalPos.x, finalPos.y, 0.0, 1.0);
|
gl_Position = vec4(finalPos.x, finalPos.y, 0.0, 1.0);
|
||||||
|
|
||||||
vec2 finalTex = vec2(
|
vec2 finalTex = vec2(
|
||||||
aTexCoords.x * tDimension.x + tPosition.x,
|
aTexCoords.x * tDimension.x + tPosition.x,
|
||||||
1 - (aTexCoords.y * tDimension.y + tPosition.y)
|
aTexCoords.y * tDimension.y + tPosition.y
|
||||||
);
|
);
|
||||||
// vec2 finalTex = aTexCoords;
|
// vec2 finalTex = aTexCoords;
|
||||||
// vec2 finalTex = vec2(
|
// vec2 finalTex = vec2(
|
||||||
|
|||||||
BIN
assets/Textures/ui/uiFrame1.png
Normal file
BIN
assets/Textures/ui/uiFrame1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.7 KiB |
BIN
assets/Textures/ui/uiFrame2.png
Normal file
BIN
assets/Textures/ui/uiFrame2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.7 KiB |
@ -1,3 +1,3 @@
|
|||||||
#maven.buildNumber.plugin properties file
|
#maven.buildNumber.plugin properties file
|
||||||
#Sun Mar 24 15:51:37 EDT 2024
|
#Thu Apr 04 18:08:22 EDT 2024
|
||||||
buildNumber=83
|
buildNumber=94
|
||||||
|
|||||||
4
docs/src/highlevel-design/creatures/creatureideas.md
Normal file
4
docs/src/highlevel-design/creatures/creatureideas.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
@page creatureideas Creature Ideas
|
||||||
|
|
||||||
|
Leaf Sheep
|
||||||
|
Jellyfish
|
||||||
@ -1,4 +1,5 @@
|
|||||||
@page creaturesindex Creatures
|
@page creaturesindex Creatures
|
||||||
|
|
||||||
[TOC]
|
[TOC]
|
||||||
|
- @subpage creatureideas
|
||||||
- @subpage creaturemechanicsideas
|
- @subpage creaturemechanicsideas
|
||||||
@ -3,4 +3,6 @@
|
|||||||
If/when fluidsim is a part of the engine, have a creature that constantly keeps a bubble of water around itself (drawing from nearby sources as it approaches them). When it runs up to regular creatures to try to attack them, it will force them into swimming state or outright kill them.
|
If/when fluidsim is a part of the engine, have a creature that constantly keeps a bubble of water around itself (drawing from nearby sources as it approaches them). When it runs up to regular creatures to try to attack them, it will force them into swimming state or outright kill them.
|
||||||
Ocean-faring monsters that create voids that push away liquid (thus making them challenging to fight on a boat)
|
Ocean-faring monsters that create voids that push away liquid (thus making them challenging to fight on a boat)
|
||||||
|
|
||||||
Scary creatures that, when entering a chunk, gradually reduce environment volume to zero (ie crickets stop chirping because it's so scary) Like a demon scarecrow or devil
|
Scary creatures that, when entering a chunk, gradually reduce environment volume to zero (ie crickets stop chirping because it's so scary) Like a demon scarecrow or devil
|
||||||
|
|
||||||
|
Custom cursors per playable race (ie gauntlet for humans, claw for demons, etc)
|
||||||
@ -203,6 +203,12 @@ Level loading/saving + Basic Editor
|
|||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
|
|
||||||
|
UI Work
|
||||||
|
- Make ui feel more responsive, whatever that means (answer is make hover-over styling work lol)
|
||||||
|
- Frames for windows (WIP)
|
||||||
|
- Need to figure out style-wise what we want to do here (generally minimalist)
|
||||||
|
- Fix scrollable handling
|
||||||
|
|
||||||
Level loading/saving + Basic Editor
|
Level loading/saving + Basic Editor
|
||||||
- Basic editor functionality
|
- Basic editor functionality
|
||||||
- Menu of types of entities to spawn
|
- Menu of types of entities to spawn
|
||||||
|
|||||||
14
pom.xml
14
pom.xml
@ -256,6 +256,20 @@
|
|||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!--Yoga-->
|
||||||
|
<!--License: ???-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.lwjgl</groupId>
|
||||||
|
<artifactId>lwjgl-yoga</artifactId>
|
||||||
|
<version>${lwjgl.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.lwjgl</groupId>
|
||||||
|
<artifactId>lwjgl-yoga</artifactId>
|
||||||
|
<version>${lwjgl.version}</version>
|
||||||
|
<classifier>${lwjgl.natives}</classifier>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,6 @@ import org.joml.Vector3f;
|
|||||||
|
|
||||||
import electrosphere.client.targeting.crosshair.Crosshair;
|
import electrosphere.client.targeting.crosshair.Crosshair;
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.engine.Main;
|
|
||||||
import electrosphere.entity.EntityUtils;
|
import electrosphere.entity.EntityUtils;
|
||||||
import electrosphere.entity.types.camera.CameraEntityUtils;
|
import electrosphere.entity.types.camera.CameraEntityUtils;
|
||||||
import electrosphere.renderer.ui.events.MouseEvent;
|
import electrosphere.renderer.ui.events.MouseEvent;
|
||||||
|
|||||||
@ -1,13 +1,18 @@
|
|||||||
package electrosphere.controls;
|
package electrosphere.controls;
|
||||||
|
|
||||||
import electrosphere.renderer.ui.events.MouseEvent;
|
import electrosphere.renderer.ui.events.MouseEvent;
|
||||||
|
import electrosphere.renderer.ui.events.ScrollEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A low level control inside the engine
|
||||||
|
*/
|
||||||
public class Control {
|
public class Control {
|
||||||
|
|
||||||
public static enum ControlType {
|
public static enum ControlType {
|
||||||
KEY,
|
KEY,
|
||||||
MOUSE_BUTTON,
|
MOUSE_BUTTON,
|
||||||
MOUSE_MOVEMENT,
|
MOUSE_MOVEMENT,
|
||||||
|
MOUSE_SCROLL,
|
||||||
}
|
}
|
||||||
|
|
||||||
ControlType type;
|
ControlType type;
|
||||||
@ -18,6 +23,7 @@ public class Control {
|
|||||||
ControlMethod onRepeat;
|
ControlMethod onRepeat;
|
||||||
ControlMethod onClick;
|
ControlMethod onClick;
|
||||||
MouseCallback onMove;
|
MouseCallback onMove;
|
||||||
|
ScrollCallback onScroll;
|
||||||
|
|
||||||
float pressFrame = 0;
|
float pressFrame = 0;
|
||||||
float repeatTimeout = 0;
|
float repeatTimeout = 0;
|
||||||
@ -72,6 +78,10 @@ public class Control {
|
|||||||
onClick = method;
|
onClick = method;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setOnScroll(ScrollCallback callback){
|
||||||
|
onScroll = callback;
|
||||||
|
}
|
||||||
|
|
||||||
public void onPress(){
|
public void onPress(){
|
||||||
if(onPress != null){
|
if(onPress != null){
|
||||||
onPress.execute();
|
onPress.execute();
|
||||||
@ -102,6 +112,12 @@ public class Control {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void onScroll(ScrollEvent event){
|
||||||
|
if(onScroll != null){
|
||||||
|
onScroll.execute(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public float getPressFrame(){
|
public float getPressFrame(){
|
||||||
return this.pressFrame;
|
return this.pressFrame;
|
||||||
}
|
}
|
||||||
@ -126,5 +142,9 @@ public class Control {
|
|||||||
public interface MouseCallback {
|
public interface MouseCallback {
|
||||||
public void execute(MouseEvent event);
|
public void execute(MouseEvent event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface ScrollCallback {
|
||||||
|
public void execute(ScrollEvent event);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -58,8 +58,6 @@ import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_2;
|
|||||||
import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_LEFT;
|
import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_LEFT;
|
||||||
import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_RIGHT;
|
import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_RIGHT;
|
||||||
import static org.lwjgl.glfw.GLFW.glfwGetCursorPos;
|
import static org.lwjgl.glfw.GLFW.glfwGetCursorPos;
|
||||||
import static org.lwjgl.glfw.GLFW.glfwMakeContextCurrent;
|
|
||||||
import static org.lwjgl.glfw.GLFW.glfwMaximizeWindow;
|
|
||||||
import static org.lwjgl.glfw.GLFW.glfwSetInputMode;
|
import static org.lwjgl.glfw.GLFW.glfwSetInputMode;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -69,9 +67,7 @@ import java.util.List;
|
|||||||
import org.joml.Vector2f;
|
import org.joml.Vector2f;
|
||||||
import org.joml.Vector3d;
|
import org.joml.Vector3d;
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
import org.lwjgl.glfw.GLFW;
|
|
||||||
|
|
||||||
import electrosphere.audio.AudioUtils;
|
|
||||||
import electrosphere.audio.VirtualAudioSourceManager.VirtualAudioSourceType;
|
import electrosphere.audio.VirtualAudioSourceManager.VirtualAudioSourceType;
|
||||||
import electrosphere.client.targeting.crosshair.Crosshair;
|
import electrosphere.client.targeting.crosshair.Crosshair;
|
||||||
import electrosphere.client.terrain.editing.TerrainEditing;
|
import electrosphere.client.terrain.editing.TerrainEditing;
|
||||||
@ -96,7 +92,6 @@ import electrosphere.entity.state.movement.groundmove.GroundMovementTree.Movemen
|
|||||||
import electrosphere.entity.types.camera.CameraEntityUtils;
|
import electrosphere.entity.types.camera.CameraEntityUtils;
|
||||||
import electrosphere.entity.types.creature.CreatureUtils;
|
import electrosphere.entity.types.creature.CreatureUtils;
|
||||||
import electrosphere.logger.LoggerInterface;
|
import electrosphere.logger.LoggerInterface;
|
||||||
import electrosphere.menu.MenuGenerators;
|
|
||||||
import electrosphere.menu.WindowStrings;
|
import electrosphere.menu.WindowStrings;
|
||||||
import electrosphere.menu.WindowUtils;
|
import electrosphere.menu.WindowUtils;
|
||||||
import electrosphere.menu.ingame.MenuGeneratorsInGame;
|
import electrosphere.menu.ingame.MenuGeneratorsInGame;
|
||||||
@ -108,6 +103,7 @@ import electrosphere.renderer.ui.events.KeyboardEvent;
|
|||||||
import electrosphere.renderer.ui.events.MenuEvent;
|
import electrosphere.renderer.ui.events.MenuEvent;
|
||||||
import electrosphere.renderer.ui.events.MenuEvent.MenuEventType;
|
import electrosphere.renderer.ui.events.MenuEvent.MenuEventType;
|
||||||
import electrosphere.renderer.ui.events.MouseEvent;
|
import electrosphere.renderer.ui.events.MouseEvent;
|
||||||
|
import electrosphere.renderer.ui.events.ScrollEvent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -145,6 +141,7 @@ public class ControlHandler {
|
|||||||
public static final String INPUT_CODE_MENU_MOUSE_PRIMARY = "menuMousePrimary";
|
public static final String INPUT_CODE_MENU_MOUSE_PRIMARY = "menuMousePrimary";
|
||||||
public static final String DATA_STRING_INPUT_CODE_MENU_BACKOUT = "menuBackout";
|
public static final String DATA_STRING_INPUT_CODE_MENU_BACKOUT = "menuBackout";
|
||||||
public static final String MENU_MOUSE_MOVE = "menuMouseMove";
|
public static final String MENU_MOUSE_MOVE = "menuMouseMove";
|
||||||
|
public static final String MENU_SCROLL = "menuScroll";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -288,6 +285,7 @@ public class ControlHandler {
|
|||||||
handler.addControl(DATA_STRING_INPUT_CODE_MENU_BACKOUT, new Control(ControlType.KEY,GLFW_KEY_ESCAPE));
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_BACKOUT, new Control(ControlType.KEY,GLFW_KEY_ESCAPE));
|
||||||
handler.addControl(MENU_MOUSE_MOVE, new Control(ControlType.MOUSE_MOVEMENT,0));
|
handler.addControl(MENU_MOUSE_MOVE, new Control(ControlType.MOUSE_MOVEMENT,0));
|
||||||
handler.addControl(INPUT_CODE_MENU_MOUSE_PRIMARY, new Control(ControlType.MOUSE_BUTTON,GLFW_MOUSE_BUTTON_LEFT));
|
handler.addControl(INPUT_CODE_MENU_MOUSE_PRIMARY, new Control(ControlType.MOUSE_BUTTON,GLFW_MOUSE_BUTTON_LEFT));
|
||||||
|
handler.addControl(MENU_SCROLL, new Control(ControlType.MOUSE_SCROLL,0));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Map the typing controls
|
Map the typing controls
|
||||||
@ -437,6 +435,7 @@ public class ControlHandler {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Globals.scrollCallback.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1099,6 +1098,12 @@ public class ControlHandler {
|
|||||||
Globals.elementManager.updateHover(mouseEvent.getCurrentX(), mouseEvent.getCurrentY());
|
Globals.elementManager.updateHover(mouseEvent.getCurrentX(), mouseEvent.getCurrentY());
|
||||||
}});
|
}});
|
||||||
|
|
||||||
|
//scrolling the mouse
|
||||||
|
menuNavigationControlList.add(controls.get(MENU_SCROLL));
|
||||||
|
controls.get(MENU_SCROLL).setOnScroll(new Control.ScrollCallback() {public void execute(ScrollEvent scrollEvent){
|
||||||
|
Globals.elementManager.fireEvent(scrollEvent, GLFW_KEY_X, GLFW_KEY_Z);
|
||||||
|
}});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Decrementing a menu element
|
//Decrementing a menu element
|
||||||
@ -1125,8 +1130,8 @@ public class ControlHandler {
|
|||||||
menuNavigationControlList.add(controls.get(DATA_STRING_INPUT_CODE_MENU_SELECT));
|
menuNavigationControlList.add(controls.get(DATA_STRING_INPUT_CODE_MENU_SELECT));
|
||||||
controls.get(DATA_STRING_INPUT_CODE_MENU_SELECT).setOnPress(new ControlMethod(){public void execute(){
|
controls.get(DATA_STRING_INPUT_CODE_MENU_SELECT).setOnPress(new ControlMethod(){public void execute(){
|
||||||
Globals.elementManager.click(new ClickEvent(
|
Globals.elementManager.click(new ClickEvent(
|
||||||
Globals.elementManager.getFocusedElement().getPositionX(),
|
Globals.elementManager.getFocusedElement().getInternalX() + 1,
|
||||||
Globals.elementManager.getFocusedElement().getPositionY(),
|
Globals.elementManager.getFocusedElement().getInternalY() + 1,
|
||||||
true,
|
true,
|
||||||
Globals.mouseCallback.getButton(GLFW_MOUSE_BUTTON_2)
|
Globals.mouseCallback.getButton(GLFW_MOUSE_BUTTON_2)
|
||||||
));
|
));
|
||||||
@ -1249,8 +1254,8 @@ public class ControlHandler {
|
|||||||
controls.get(currentKey).setOnPress(new ControlMethod(){public void execute(){
|
controls.get(currentKey).setOnPress(new ControlMethod(){public void execute(){
|
||||||
Globals.elementManager.fireEvent(
|
Globals.elementManager.fireEvent(
|
||||||
new KeyboardEvent(convertKeycodeToName(controls.get(currentKey).keyValue)),
|
new KeyboardEvent(convertKeycodeToName(controls.get(currentKey).keyValue)),
|
||||||
Globals.elementManager.getFocusedElement().getPositionX(),
|
Globals.elementManager.getFocusedElement().getInternalX() + 1,
|
||||||
Globals.elementManager.getFocusedElement().getPositionY()
|
Globals.elementManager.getFocusedElement().getInternalY() + 1
|
||||||
);
|
);
|
||||||
// MenuCallbacks.menuHandleKeypress(Globals.currentMenu,currentKey);
|
// MenuCallbacks.menuHandleKeypress(Globals.currentMenu,currentKey);
|
||||||
}});
|
}});
|
||||||
@ -1329,60 +1334,67 @@ public class ControlHandler {
|
|||||||
|
|
||||||
for(Control control : controls){
|
for(Control control : controls){
|
||||||
switch(control.getType()){
|
switch(control.getType()){
|
||||||
case KEY:
|
case KEY: {
|
||||||
if(Globals.controlCallback.getKey(control.getKeyValue())){
|
if(Globals.controlCallback.getKey(control.getKeyValue())){
|
||||||
if(!control.isState()){
|
if(!control.isState()){
|
||||||
//on press
|
//on press
|
||||||
control.onPress();
|
control.onPress();
|
||||||
control.setPressFrame((float)Globals.timekeeper.getMostRecentRawFrametime());
|
control.setPressFrame((float)Globals.timekeeper.getMostRecentRawFrametime());
|
||||||
|
} else {
|
||||||
|
//on repeat
|
||||||
|
if((float)Globals.timekeeper.getMostRecentRawFrametime() - control.getPressFrame() > control.getRepeatTimeout()){
|
||||||
|
control.onRepeat();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
control.setState(true);
|
||||||
} else {
|
} else {
|
||||||
//on repeat
|
if(control.isState()){
|
||||||
if((float)Globals.timekeeper.getMostRecentRawFrametime() - control.getPressFrame() > control.getRepeatTimeout()){
|
//on release
|
||||||
|
control.onRelease();
|
||||||
|
//on click
|
||||||
|
if((float)Globals.timekeeper.getMostRecentRawFrametime() - control.getPressFrame() < control.getRepeatTimeout()){
|
||||||
|
control.onClick();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
control.setState(false);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case MOUSE_BUTTON: {
|
||||||
|
if(Globals.mouseCallback.getButton(control.getKeyValue())){
|
||||||
|
if(!control.isState()){
|
||||||
|
//on press
|
||||||
|
control.onPress();
|
||||||
|
control.setPressFrame((float)Globals.timekeeper.getMostRecentRawFrametime());
|
||||||
|
} else {
|
||||||
|
//on repeat
|
||||||
control.onRepeat();
|
control.onRepeat();
|
||||||
}
|
}
|
||||||
}
|
control.setState(true);
|
||||||
control.setState(true);
|
} else {
|
||||||
} else {
|
if(control.isState()){
|
||||||
if(control.isState()){
|
//on release
|
||||||
//on release
|
control.onRelease();
|
||||||
control.onRelease();
|
if((float)Globals.timekeeper.getMostRecentRawFrametime() - control.getPressFrame() < control.getRepeatTimeout()){
|
||||||
//on click
|
control.onClick();
|
||||||
if((float)Globals.timekeeper.getMostRecentRawFrametime() - control.getPressFrame() < control.getRepeatTimeout()){
|
}
|
||||||
control.onClick();
|
} else {
|
||||||
}
|
}
|
||||||
} else {
|
control.setState(false);
|
||||||
}
|
}
|
||||||
control.setState(false);
|
} break;
|
||||||
}
|
case MOUSE_MOVEMENT: {
|
||||||
break;
|
if(mouseMoveEvent){
|
||||||
case MOUSE_BUTTON:
|
control.onMove(currentMouseEvent);
|
||||||
if(Globals.mouseCallback.getButton(control.getKeyValue())){
|
|
||||||
if(!control.isState()){
|
|
||||||
//on press
|
|
||||||
control.onPress();
|
|
||||||
control.setPressFrame((float)Globals.timekeeper.getMostRecentRawFrametime());
|
|
||||||
} else {
|
|
||||||
//on repeat
|
|
||||||
control.onRepeat();
|
|
||||||
}
|
}
|
||||||
control.setState(true);
|
} break;
|
||||||
} else {
|
case MOUSE_SCROLL: {
|
||||||
if(control.isState()){
|
double yScroll = Globals.scrollCallback.getOffsetY();
|
||||||
//on release
|
if(yScroll != 0){
|
||||||
control.onRelease();
|
ScrollEvent event = new ScrollEvent(xpos,ypos,yScroll);
|
||||||
if((float)Globals.timekeeper.getMostRecentRawFrametime() - control.getPressFrame() < control.getRepeatTimeout()){
|
control.onScroll(event);
|
||||||
control.onClick();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
}
|
}
|
||||||
control.setState(false);
|
} break;
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MOUSE_MOVEMENT:
|
|
||||||
if(mouseMoveEvent){
|
|
||||||
control.onMove(currentMouseEvent);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,10 +5,15 @@ import org.lwjgl.glfw.GLFWMouseButtonCallback;
|
|||||||
|
|
||||||
import electrosphere.logger.LoggerInterface;
|
import electrosphere.logger.LoggerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A callback for mouse functions
|
||||||
|
*/
|
||||||
public class MouseCallback extends GLFWMouseButtonCallback {
|
public class MouseCallback extends GLFWMouseButtonCallback {
|
||||||
|
|
||||||
|
//the number of buttons available
|
||||||
static final short KEY_VALUE_ARRAY_SIZE = 512;
|
static final short KEY_VALUE_ARRAY_SIZE = 512;
|
||||||
|
|
||||||
|
//current value of all buttons pressed
|
||||||
boolean[] buttonValues = new boolean[KEY_VALUE_ARRAY_SIZE];
|
boolean[] buttonValues = new boolean[KEY_VALUE_ARRAY_SIZE];
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -23,9 +28,9 @@ public class MouseCallback extends GLFWMouseButtonCallback {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* !!!WARNING!!!, will silently fail if opengl elementsn ot defined or keycode is outside of key value array size or is not in main rendering thread
|
* !!!WARNING!!!, will silently fail if opengl elements not defined or keycode is outside of key value array size or is not in main rendering thread
|
||||||
* @param keycode
|
* @param keycode The keycode
|
||||||
* @return
|
* @return The button's pressed state
|
||||||
*/
|
*/
|
||||||
public boolean getButton(int keycode){
|
public boolean getButton(int keycode){
|
||||||
if(keycode >= 0 && keycode < KEY_VALUE_ARRAY_SIZE){
|
if(keycode >= 0 && keycode < KEY_VALUE_ARRAY_SIZE){
|
||||||
|
|||||||
44
src/main/java/electrosphere/controls/ScrollCallback.java
Normal file
44
src/main/java/electrosphere/controls/ScrollCallback.java
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package electrosphere.controls;
|
||||||
|
|
||||||
|
import org.lwjgl.glfw.GLFWScrollCallback;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A callback for scroll events from the mouse
|
||||||
|
*/
|
||||||
|
public class ScrollCallback extends GLFWScrollCallback {
|
||||||
|
|
||||||
|
//the offsets from the most recent scroll event
|
||||||
|
double offsetX = 0;
|
||||||
|
double offsetY = 0;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void invoke(long window, double xoffset, double yoffset) {
|
||||||
|
offsetX = xoffset;
|
||||||
|
offsetY = yoffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The x offset from the scroll, !!setting the stored value to 0 in the process!!
|
||||||
|
* @return The x scroll offset
|
||||||
|
*/
|
||||||
|
public double getOffsetX(){
|
||||||
|
return offsetX;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The y offset from the scroll, !!setting the stored value to 0 in the process!!
|
||||||
|
* @return The y scroll offset
|
||||||
|
*/
|
||||||
|
public double getOffsetY(){
|
||||||
|
return offsetY;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the data cached in the callback
|
||||||
|
*/
|
||||||
|
public void clear(){
|
||||||
|
offsetX = 0;
|
||||||
|
offsetY = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -27,6 +27,7 @@ import electrosphere.controls.CameraHandler;
|
|||||||
import electrosphere.controls.ControlCallback;
|
import electrosphere.controls.ControlCallback;
|
||||||
import electrosphere.controls.ControlHandler;
|
import electrosphere.controls.ControlHandler;
|
||||||
import electrosphere.controls.MouseCallback;
|
import electrosphere.controls.MouseCallback;
|
||||||
|
import electrosphere.controls.ScrollCallback;
|
||||||
import electrosphere.engine.assetmanager.AssetDataStrings;
|
import electrosphere.engine.assetmanager.AssetDataStrings;
|
||||||
import electrosphere.engine.assetmanager.AssetManager;
|
import electrosphere.engine.assetmanager.AssetManager;
|
||||||
import electrosphere.engine.loadingthreads.LoadingThread;
|
import electrosphere.engine.loadingthreads.LoadingThread;
|
||||||
@ -121,7 +122,9 @@ public class Globals {
|
|||||||
//
|
//
|
||||||
//Garbage Collection
|
//Garbage Collection
|
||||||
//
|
//
|
||||||
public static boolean EXPLICIT_GC = true;
|
//set to true to trigger full GC every frame
|
||||||
|
//a full GC includes collecting old generations as well -- likely very laggy!!
|
||||||
|
public static boolean EXPLICIT_GC = false;
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -151,6 +154,7 @@ public class Globals {
|
|||||||
public static boolean updateCamera = true;
|
public static boolean updateCamera = true;
|
||||||
public static ControlCallback controlCallback = new ControlCallback();
|
public static ControlCallback controlCallback = new ControlCallback();
|
||||||
public static MouseCallback mouseCallback = new MouseCallback();
|
public static MouseCallback mouseCallback = new MouseCallback();
|
||||||
|
public static ScrollCallback scrollCallback = new ScrollCallback();
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -513,10 +517,12 @@ public class Globals {
|
|||||||
solidPlaneModelID = assetManager.registerModel(RenderUtils.createInWindowPanel("Shaders/ui/plainBox/plainBox.vs", "Shaders/ui/plainBox/plainBox.fs"));
|
solidPlaneModelID = assetManager.registerModel(RenderUtils.createInWindowPanel("Shaders/ui/plainBox/plainBox.vs", "Shaders/ui/plainBox/plainBox.fs"));
|
||||||
|
|
||||||
//image panel
|
//image panel
|
||||||
ImagePanel.imagePanelModelPath = assetManager.registerModel(RenderUtils.createPlaneModel("Shaders/font/bitmapchar/bitmapchar.vs", "Shaders/font/bitmapchar/bitmapchar.fs"));
|
ImagePanel.imagePanelModelPath = assetManager.registerModel(RenderUtils.createPlaneModel("Shaders/plane/plane.vs", "Shaders/plane/plane.fs"));
|
||||||
|
|
||||||
//init ui images
|
//init ui images
|
||||||
assetManager.addTexturePathtoQueue("Textures/ui/WindowBorder.png");
|
assetManager.addTexturePathtoQueue("Textures/ui/WindowBorder.png");
|
||||||
|
assetManager.addTexturePathtoQueue("Textures/ui/uiFrame1.png");
|
||||||
|
assetManager.addTexturePathtoQueue("Textures/ui/uiFrame2.png");
|
||||||
|
|
||||||
testingTexture = "Textures/Testing1.png";
|
testingTexture = "Textures/Testing1.png";
|
||||||
Globals.assetManager.addTexturePathtoQueue(testingTexture);
|
Globals.assetManager.addTexturePathtoQueue(testingTexture);
|
||||||
|
|||||||
@ -19,6 +19,7 @@ public class LoggerInterface {
|
|||||||
public static Logger loggerAuth;
|
public static Logger loggerAuth;
|
||||||
public static Logger loggerDB;
|
public static Logger loggerDB;
|
||||||
public static Logger loggerAudio;
|
public static Logger loggerAudio;
|
||||||
|
public static Logger loggerUI;
|
||||||
|
|
||||||
public static void initLoggers(){
|
public static void initLoggers(){
|
||||||
loggerStartup = new Logger(LogLevel.WARNING);
|
loggerStartup = new Logger(LogLevel.WARNING);
|
||||||
@ -30,6 +31,7 @@ public class LoggerInterface {
|
|||||||
loggerAuth = new Logger(LogLevel.WARNING);
|
loggerAuth = new Logger(LogLevel.WARNING);
|
||||||
loggerDB = new Logger(LogLevel.WARNING);
|
loggerDB = new Logger(LogLevel.WARNING);
|
||||||
loggerAudio = new Logger(LogLevel.WARNING);
|
loggerAudio = new Logger(LogLevel.WARNING);
|
||||||
|
loggerUI = new Logger(LogLevel.INFO);
|
||||||
loggerStartup.INFO("Initialized loggers");
|
loggerStartup.INFO("Initialized loggers");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,6 +27,7 @@ import electrosphere.renderer.ui.Window;
|
|||||||
import electrosphere.renderer.ui.elements.ActorPanel;
|
import electrosphere.renderer.ui.elements.ActorPanel;
|
||||||
import electrosphere.renderer.ui.elements.Button;
|
import electrosphere.renderer.ui.elements.Button;
|
||||||
import electrosphere.renderer.ui.elements.Div;
|
import electrosphere.renderer.ui.elements.Div;
|
||||||
|
import electrosphere.renderer.ui.elements.FormElement;
|
||||||
import electrosphere.renderer.ui.elements.ImagePanel;
|
import electrosphere.renderer.ui.elements.ImagePanel;
|
||||||
import electrosphere.renderer.ui.elements.Label;
|
import electrosphere.renderer.ui.elements.Label;
|
||||||
import electrosphere.renderer.ui.elements.ScrollableContainer;
|
import electrosphere.renderer.ui.elements.ScrollableContainer;
|
||||||
@ -39,7 +40,6 @@ import electrosphere.renderer.ui.elementtypes.ValueElement.ValueChangeEventCallb
|
|||||||
import electrosphere.renderer.ui.events.ClickEvent;
|
import electrosphere.renderer.ui.events.ClickEvent;
|
||||||
import electrosphere.renderer.ui.events.NavigationEvent;
|
import electrosphere.renderer.ui.events.NavigationEvent;
|
||||||
import electrosphere.renderer.ui.events.ValueChangeEvent;
|
import electrosphere.renderer.ui.events.ValueChangeEvent;
|
||||||
import electrosphere.renderer.ui.form.FormElement;
|
|
||||||
import electrosphere.server.saves.SaveUtils;
|
import electrosphere.server.saves.SaveUtils;
|
||||||
import electrosphere.server.terrain.generation.OverworldChunkGenerator;
|
import electrosphere.server.terrain.generation.OverworldChunkGenerator;
|
||||||
import electrosphere.server.terrain.manager.ServerTerrainManager;
|
import electrosphere.server.terrain.manager.ServerTerrainManager;
|
||||||
@ -66,7 +66,7 @@ public class MenuGenerators {
|
|||||||
|
|
||||||
//button (select save)
|
//button (select save)
|
||||||
Button selectButton = new Button();
|
Button selectButton = new Button();
|
||||||
Label selectLabel = new Label(100,125 + verticalPosition,1.0f);
|
Label selectLabel = new Label(1.0f);
|
||||||
selectLabel.setText(saveName.toUpperCase());
|
selectLabel.setText(saveName.toUpperCase());
|
||||||
selectButton.addChild(selectLabel);
|
selectButton.addChild(selectLabel);
|
||||||
rVal.addChild(selectButton);
|
rVal.addChild(selectButton);
|
||||||
@ -97,7 +97,7 @@ public class MenuGenerators {
|
|||||||
|
|
||||||
//button (create)
|
//button (create)
|
||||||
Button createButton = new Button();
|
Button createButton = new Button();
|
||||||
Label createLabel = new Label(100,125 + verticalPosition + 200,1.0f);
|
Label createLabel = new Label(1.0f);
|
||||||
createLabel.setText("Create World");
|
createLabel.setText("Create World");
|
||||||
createButton.addChild(createLabel);
|
createButton.addChild(createLabel);
|
||||||
rVal.addChild(createButton);
|
rVal.addChild(createButton);
|
||||||
@ -123,7 +123,7 @@ public class MenuGenerators {
|
|||||||
|
|
||||||
//button (create)
|
//button (create)
|
||||||
Button createButton = new Button();
|
Button createButton = new Button();
|
||||||
Label createLabel = new Label(100,screenTop + verticalPosition,1.0f);
|
Label createLabel = new Label(1.0f);
|
||||||
createLabel.setText("Create");
|
createLabel.setText("Create");
|
||||||
createButton.addChild(createLabel);
|
createButton.addChild(createLabel);
|
||||||
rVal.addChild(createButton);
|
rVal.addChild(createButton);
|
||||||
@ -148,7 +148,7 @@ public class MenuGenerators {
|
|||||||
|
|
||||||
//button (save)
|
//button (save)
|
||||||
Button saveButton = new Button();
|
Button saveButton = new Button();
|
||||||
Label saveLabel = new Label(100,screenTop + 125,1.0f);
|
Label saveLabel = new Label(1.0f);
|
||||||
saveLabel.setText("Save");
|
saveLabel.setText("Save");
|
||||||
saveButton.addChild(saveLabel);
|
saveButton.addChild(saveLabel);
|
||||||
rVal.addChild(saveButton);
|
rVal.addChild(saveButton);
|
||||||
@ -160,7 +160,7 @@ public class MenuGenerators {
|
|||||||
|
|
||||||
//button (cancel)
|
//button (cancel)
|
||||||
Button cancelButton = new Button();
|
Button cancelButton = new Button();
|
||||||
Label cancelLabel = new Label(100,screenTop + 200,1.0f);
|
Label cancelLabel = new Label(1.0f);
|
||||||
cancelLabel.setText("Cancel");
|
cancelLabel.setText("Cancel");
|
||||||
cancelButton.addChild(cancelLabel);
|
cancelButton.addChild(cancelLabel);
|
||||||
rVal.addChild(cancelButton);
|
rVal.addChild(cancelButton);
|
||||||
@ -182,7 +182,7 @@ public class MenuGenerators {
|
|||||||
|
|
||||||
//button (create)
|
//button (create)
|
||||||
Button createButton = new Button();
|
Button createButton = new Button();
|
||||||
Label createLabel = new Label(100,screenTop + verticalPosition,1.0f);
|
Label createLabel = new Label(1.0f);
|
||||||
createLabel.setText("Create World");
|
createLabel.setText("Create World");
|
||||||
createButton.addChild(createLabel);
|
createButton.addChild(createLabel);
|
||||||
rVal.addChild(createButton);
|
rVal.addChild(createButton);
|
||||||
@ -201,7 +201,7 @@ public class MenuGenerators {
|
|||||||
|
|
||||||
//button (create)
|
//button (create)
|
||||||
Button createButton = new Button();
|
Button createButton = new Button();
|
||||||
Label createLabel = new Label(100,screenTop + verticalPosition,1.0f);
|
Label createLabel = new Label(1.0f);
|
||||||
createLabel.setText("Create World");
|
createLabel.setText("Create World");
|
||||||
createButton.addChild(createLabel);
|
createButton.addChild(createLabel);
|
||||||
rVal.addChild(createButton);
|
rVal.addChild(createButton);
|
||||||
@ -215,7 +215,7 @@ public class MenuGenerators {
|
|||||||
|
|
||||||
//button (host)
|
//button (host)
|
||||||
Button hostButton = new Button();
|
Button hostButton = new Button();
|
||||||
Label hostLabel = new Label(100,screenTop + 125,1.0f);
|
Label hostLabel = new Label(1.0f);
|
||||||
hostLabel.setText("Host");
|
hostLabel.setText("Host");
|
||||||
hostButton.addChild(hostLabel);
|
hostButton.addChild(hostLabel);
|
||||||
rVal.addChild(hostButton);
|
rVal.addChild(hostButton);
|
||||||
@ -233,7 +233,7 @@ public class MenuGenerators {
|
|||||||
|
|
||||||
//button (join)
|
//button (join)
|
||||||
Button joinButton = new Button();
|
Button joinButton = new Button();
|
||||||
Label joinLabel = new Label(100,screenTop + 200,1.0f);
|
Label joinLabel = new Label(1.0f);
|
||||||
joinLabel.setText("Join");
|
joinLabel.setText("Join");
|
||||||
joinButton.addChild(joinLabel);
|
joinButton.addChild(joinLabel);
|
||||||
rVal.addChild(joinButton);
|
rVal.addChild(joinButton);
|
||||||
@ -245,7 +245,7 @@ public class MenuGenerators {
|
|||||||
|
|
||||||
//button (back)
|
//button (back)
|
||||||
Button connectButton = new Button();
|
Button connectButton = new Button();
|
||||||
Label connectLabel = new Label(100,screenTop + 275,1.0f);
|
Label connectLabel = new Label(1.0f);
|
||||||
connectLabel.setText("Back");
|
connectLabel.setText("Back");
|
||||||
connectButton.addChild(connectLabel);
|
connectButton.addChild(connectLabel);
|
||||||
rVal.addChild(connectButton);
|
rVal.addChild(connectButton);
|
||||||
@ -262,7 +262,7 @@ public class MenuGenerators {
|
|||||||
int screenTop = 150;
|
int screenTop = 150;
|
||||||
|
|
||||||
//label (address)
|
//label (address)
|
||||||
Label addressLabel = new Label(100,screenTop + 50,1.0f);
|
Label addressLabel = new Label(1.0f);
|
||||||
addressLabel.setText("IP Address");
|
addressLabel.setText("IP Address");
|
||||||
rVal.addChild(addressLabel);
|
rVal.addChild(addressLabel);
|
||||||
|
|
||||||
@ -272,7 +272,7 @@ public class MenuGenerators {
|
|||||||
rVal.addChild(addressInput);
|
rVal.addChild(addressInput);
|
||||||
|
|
||||||
//label (port)
|
//label (port)
|
||||||
Label portLabel = new Label(100,screenTop + 200,1.0f);
|
Label portLabel = new Label(1.0f);
|
||||||
portLabel.setText("Port");
|
portLabel.setText("Port");
|
||||||
rVal.addChild(portLabel);
|
rVal.addChild(portLabel);
|
||||||
|
|
||||||
@ -282,7 +282,7 @@ public class MenuGenerators {
|
|||||||
rVal.addChild(portInput);
|
rVal.addChild(portInput);
|
||||||
|
|
||||||
//label (address)
|
//label (address)
|
||||||
Label usernameLabel = new Label(100,screenTop + 350,1.0f);
|
Label usernameLabel = new Label(1.0f);
|
||||||
usernameLabel.setText("Username");
|
usernameLabel.setText("Username");
|
||||||
rVal.addChild(usernameLabel);
|
rVal.addChild(usernameLabel);
|
||||||
|
|
||||||
@ -292,7 +292,7 @@ public class MenuGenerators {
|
|||||||
rVal.addChild(usernameInput);
|
rVal.addChild(usernameInput);
|
||||||
|
|
||||||
//label (port)
|
//label (port)
|
||||||
Label passwordLabel = new Label(100,screenTop + 500,1.0f);
|
Label passwordLabel = new Label(1.0f);
|
||||||
passwordLabel.setText("Password");
|
passwordLabel.setText("Password");
|
||||||
rVal.addChild(passwordLabel);
|
rVal.addChild(passwordLabel);
|
||||||
|
|
||||||
@ -303,7 +303,7 @@ public class MenuGenerators {
|
|||||||
|
|
||||||
//button (connect)
|
//button (connect)
|
||||||
Button connectButton = new Button();
|
Button connectButton = new Button();
|
||||||
Label connectLabel = new Label(100,screenTop + 650,1.0f);
|
Label connectLabel = new Label(1.0f);
|
||||||
connectLabel.setText("Connect");
|
connectLabel.setText("Connect");
|
||||||
connectButton.addChild(connectLabel);
|
connectButton.addChild(connectLabel);
|
||||||
rVal.addChild(connectButton);
|
rVal.addChild(connectButton);
|
||||||
@ -322,7 +322,7 @@ public class MenuGenerators {
|
|||||||
|
|
||||||
//button (back)
|
//button (back)
|
||||||
Button backButton = new Button();
|
Button backButton = new Button();
|
||||||
Label backLabel = new Label(100,screenTop + 725,1.0f);
|
Label backLabel = new Label(1.0f);
|
||||||
backLabel.setText("Back");
|
backLabel.setText("Back");
|
||||||
backButton.addChild(backLabel);
|
backButton.addChild(backLabel);
|
||||||
rVal.addChild(backButton);
|
rVal.addChild(backButton);
|
||||||
@ -336,16 +336,15 @@ public class MenuGenerators {
|
|||||||
|
|
||||||
public static Element createOptionsMainMenu(){
|
public static Element createOptionsMainMenu(){
|
||||||
FormElement rVal = new FormElement();
|
FormElement rVal = new FormElement();
|
||||||
int screenTop = 150;
|
|
||||||
|
|
||||||
//label (options)
|
//label (options)
|
||||||
Label optionsLabel = new Label(100,screenTop + 50,1.0f);
|
Label optionsLabel = new Label(1.0f);
|
||||||
optionsLabel.setText("Options");
|
optionsLabel.setText("Options");
|
||||||
rVal.addChild(optionsLabel);
|
rVal.addChild(optionsLabel);
|
||||||
|
|
||||||
//button (back)
|
//button (back)
|
||||||
Button backButton = new Button();
|
Button backButton = new Button();
|
||||||
Label backLabel = new Label(100,screenTop + 275,1.0f);
|
Label backLabel = new Label(1.0f);
|
||||||
backLabel.setText("Back");
|
backLabel.setText("Back");
|
||||||
backButton.addChild(backLabel);
|
backButton.addChild(backLabel);
|
||||||
rVal.addChild(backButton);
|
rVal.addChild(backButton);
|
||||||
@ -357,61 +356,6 @@ public class MenuGenerators {
|
|||||||
return rVal;
|
return rVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Element createUITestMenu(){
|
|
||||||
FormElement rVal = new FormElement();
|
|
||||||
int screenTop = 150;
|
|
||||||
|
|
||||||
//button (back)
|
|
||||||
Button backButton = new Button();
|
|
||||||
Label backLabel = new Label(100,screenTop + 275,1.0f);
|
|
||||||
backLabel.setText("Back");
|
|
||||||
backButton.addChild(backLabel);
|
|
||||||
rVal.addChild(backButton);
|
|
||||||
backButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
||||||
WindowUtils.replaceMainMenuContents(MenuGeneratorsTitleMenu.createTitleMenu());
|
|
||||||
return false;
|
|
||||||
}});
|
|
||||||
|
|
||||||
//slider test
|
|
||||||
Slider slider = new Slider(0, 0, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
||||||
rVal.addChild(slider);
|
|
||||||
|
|
||||||
ActorPanel actorPanel = new ActorPanel(500, 100, 500, 500, ActorUtils.createActorFromModelPath("Models/deer1.fbx"));
|
|
||||||
if(Globals.playerCamera == null){
|
|
||||||
Globals.playerCamera = CameraEntityUtils.spawnBasicCameraEntity(new Vector3f(0,0,0), new Vector3f(-1,0,0));
|
|
||||||
}
|
|
||||||
rVal.addChild(actorPanel);
|
|
||||||
|
|
||||||
// slider = new Slider(0, 100, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
||||||
// rVal.addChild(slider);
|
|
||||||
|
|
||||||
// slider = new Slider(0, 200, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
||||||
// rVal.addChild(slider);
|
|
||||||
|
|
||||||
// slider = new Slider(0, 300, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
||||||
// rVal.addChild(slider);
|
|
||||||
|
|
||||||
// slider = new Slider(0, 400, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
||||||
// rVal.addChild(slider);
|
|
||||||
|
|
||||||
// slider = new Slider(0, 500, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
||||||
// rVal.addChild(slider);
|
|
||||||
|
|
||||||
// slider = new Slider(0, 600, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
||||||
// rVal.addChild(slider);
|
|
||||||
|
|
||||||
// slider = new Slider(0, 700, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
||||||
// rVal.addChild(slider);
|
|
||||||
|
|
||||||
// slider = new Slider(0, 800, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
||||||
// rVal.addChild(slider);
|
|
||||||
|
|
||||||
// slider = new Slider(0, 900, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
|
||||||
// rVal.addChild(slider);
|
|
||||||
|
|
||||||
return rVal;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,8 +19,9 @@ public class WindowUtils {
|
|||||||
if(mainMenuEl != null && mainMenuEl instanceof Window){
|
if(mainMenuEl != null && mainMenuEl instanceof Window){
|
||||||
Window mainMenu = (Window) mainMenuEl;
|
Window mainMenu = (Window) mainMenuEl;
|
||||||
//todo: destroy elements as well
|
//todo: destroy elements as well
|
||||||
mainMenu.getChildren().clear();
|
mainMenu.clear();
|
||||||
mainMenu.addChild(newMenu);
|
mainMenu.addChild(newMenu);
|
||||||
|
mainMenu.applyYoga();
|
||||||
Globals.elementManager.focusFirstElement();
|
Globals.elementManager.focusFirstElement();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,16 +108,17 @@ public class WindowUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void initLoadingWindow(){
|
static void initLoadingWindow(){
|
||||||
Window loadingWindow = new Window(0, 0, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT);
|
Window loadingWindow = new Window(0, 0, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT,false);
|
||||||
Label loadingLabel = new Label(100,50,1.0f);
|
Label loadingLabel = new Label(1.0f);
|
||||||
loadingLabel.setText("LOADING");
|
loadingLabel.setText("LOADING");
|
||||||
loadingWindow.addChild(loadingLabel);
|
loadingWindow.addChild(loadingLabel);
|
||||||
|
loadingWindow.applyYoga();
|
||||||
Globals.elementManager.registerWindow(WindowStrings.WINDOW_LOADING, loadingWindow);
|
Globals.elementManager.registerWindow(WindowStrings.WINDOW_LOADING, loadingWindow);
|
||||||
WindowUtils.recursiveSetVisible(loadingWindow, true);
|
WindowUtils.recursiveSetVisible(loadingWindow, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void initMainMenuWindow(){
|
static void initMainMenuWindow(){
|
||||||
Window mainMenuWindow = new Window(0, 0, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT);
|
Window mainMenuWindow = new Window(0, 0, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT,false);
|
||||||
Globals.elementManager.registerWindow(WindowStrings.WINDOW_MENU_MAIN, mainMenuWindow);
|
Globals.elementManager.registerWindow(WindowStrings.WINDOW_MENU_MAIN, mainMenuWindow);
|
||||||
WindowUtils.replaceMainMenuContents(MenuGeneratorsTitleMenu.createTitleMenu());
|
WindowUtils.replaceMainMenuContents(MenuGeneratorsTitleMenu.createTitleMenu());
|
||||||
}
|
}
|
||||||
@ -126,7 +128,7 @@ public class WindowUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void initItemDragContainerWindow(){
|
static void initItemDragContainerWindow(){
|
||||||
Window itemDragContainerWindow = new Window(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT);
|
Window itemDragContainerWindow = new Window(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT,true);
|
||||||
Globals.elementManager.registerWindow(WindowStrings.WINDOW_ITEM_DRAG_CONTAINER, itemDragContainerWindow);
|
Globals.elementManager.registerWindow(WindowStrings.WINDOW_ITEM_DRAG_CONTAINER, itemDragContainerWindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package electrosphere.menu.ingame;
|
package electrosphere.menu.ingame;
|
||||||
|
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
|
import org.lwjgl.util.yoga.Yoga;
|
||||||
|
|
||||||
import electrosphere.controls.ControlHandler.ControlsState;
|
import electrosphere.controls.ControlHandler.ControlsState;
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
@ -25,6 +26,7 @@ import electrosphere.renderer.ui.elements.Label;
|
|||||||
import electrosphere.renderer.ui.elements.ScrollableContainer;
|
import electrosphere.renderer.ui.elements.ScrollableContainer;
|
||||||
import electrosphere.renderer.ui.elements.Slider;
|
import electrosphere.renderer.ui.elements.Slider;
|
||||||
import electrosphere.renderer.ui.elements.TextInput;
|
import electrosphere.renderer.ui.elements.TextInput;
|
||||||
|
import electrosphere.renderer.ui.elements.VirtualScrollable;
|
||||||
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.NavigableElement.NavigationEventCallback;
|
import electrosphere.renderer.ui.elementtypes.NavigableElement.NavigationEventCallback;
|
||||||
import electrosphere.renderer.ui.elementtypes.ValueElement.ValueChangeEventCallback;
|
import electrosphere.renderer.ui.elementtypes.ValueElement.ValueChangeEventCallback;
|
||||||
@ -42,7 +44,7 @@ public class MenuGeneratorsInGame {
|
|||||||
// int screenTop = Globals.WINDOW_HEIGHT - 150;
|
// int screenTop = Globals.WINDOW_HEIGHT - 150;
|
||||||
int width = 500;
|
int width = 500;
|
||||||
int height = 500;
|
int height = 500;
|
||||||
Window rVal = new Window(0,0,width,height);
|
Window rVal = new Window(0,0,width,height,true);
|
||||||
// int screenLeft = (Globals.WINDOW_WIDTH - width)/2;
|
// int screenLeft = (Globals.WINDOW_WIDTH - width)/2;
|
||||||
Div div = new Div();
|
Div div = new Div();
|
||||||
rVal.addChild(div);
|
rVal.addChild(div);
|
||||||
@ -59,15 +61,15 @@ public class MenuGeneratorsInGame {
|
|||||||
}});
|
}});
|
||||||
|
|
||||||
//black texture background
|
//black texture background
|
||||||
ImagePanel imagePanel = new ImagePanel(0,0,width,height,Globals.blackTexture);
|
// ImagePanel imagePanel = new ImagePanel(0,0,width,height,Globals.blackTexture);
|
||||||
// imagePanel.setWidth(width);
|
// imagePanel.setWidth(width);
|
||||||
// imagePanel.setHeight(height);
|
// imagePanel.setHeight(height);
|
||||||
// imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture));
|
// imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture));
|
||||||
div.addChild(imagePanel);
|
// div.addChild(imagePanel);
|
||||||
|
|
||||||
//label 1 (back)
|
//label 1 (back)
|
||||||
Button backButton = new Button();
|
Button backButton = new Button();
|
||||||
Label backLabel = new Label(100,50,1.0f);
|
Label backLabel = new Label(1.0f);
|
||||||
backLabel.setText("Back");
|
backLabel.setText("Back");
|
||||||
backButton.addChild(backLabel);
|
backButton.addChild(backLabel);
|
||||||
div.addChild(backButton);
|
div.addChild(backButton);
|
||||||
@ -86,7 +88,7 @@ public class MenuGeneratorsInGame {
|
|||||||
|
|
||||||
//label 2 (quit)
|
//label 2 (quit)
|
||||||
Button saveButton = new Button();
|
Button saveButton = new Button();
|
||||||
Label saveLabel = new Label(100,150,1.0f);
|
Label saveLabel = new Label(1.0f);
|
||||||
saveLabel.setText("Save");
|
saveLabel.setText("Save");
|
||||||
saveButton.addChild(saveLabel);
|
saveButton.addChild(saveLabel);
|
||||||
div.addChild(saveButton);
|
div.addChild(saveButton);
|
||||||
@ -99,7 +101,7 @@ public class MenuGeneratorsInGame {
|
|||||||
|
|
||||||
//label 3 (quit)
|
//label 3 (quit)
|
||||||
Button quitButton = new Button();
|
Button quitButton = new Button();
|
||||||
Label quitLabel = new Label(100,250,1.0f);
|
Label quitLabel = new Label(1.0f);
|
||||||
quitLabel.setText("Quit");
|
quitLabel.setText("Quit");
|
||||||
quitButton.addChild(quitLabel);
|
quitButton.addChild(quitLabel);
|
||||||
div.addChild(quitButton);
|
div.addChild(quitButton);
|
||||||
@ -112,7 +114,7 @@ public class MenuGeneratorsInGame {
|
|||||||
// if(Globals.server != null && Globals.macroData == null){
|
// if(Globals.server != null && Globals.macroData == null){
|
||||||
//label 4 (debug)
|
//label 4 (debug)
|
||||||
Button debugButton = new Button();
|
Button debugButton = new Button();
|
||||||
Label debugLabel = new Label(100,350,1.0f);
|
Label debugLabel = new Label(1.0f);
|
||||||
debugLabel.setText("Debug");
|
debugLabel.setText("Debug");
|
||||||
debugButton.addChild(debugLabel);
|
debugButton.addChild(debugLabel);
|
||||||
div.addChild(debugButton);
|
div.addChild(debugButton);
|
||||||
@ -122,6 +124,8 @@ public class MenuGeneratorsInGame {
|
|||||||
}});
|
}});
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
rVal.applyYoga();
|
||||||
|
|
||||||
return rVal;
|
return rVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,15 +140,15 @@ public class MenuGeneratorsInGame {
|
|||||||
// int screenTop = Globals.WINDOW_HEIGHT - 150;
|
// int screenTop = Globals.WINDOW_HEIGHT - 150;
|
||||||
int width = 500;
|
int width = 500;
|
||||||
int height = 500;
|
int height = 500;
|
||||||
float fontSize = 0.4f;
|
float fontSize = 1.0f;
|
||||||
Window rVal = new Window(0,0,width,height);
|
Window rVal = new Window(0,0,width,height,true);
|
||||||
// int screenLeft = (Globals.WINDOW_WIDTH - width)/2;
|
// int screenLeft = (Globals.WINDOW_WIDTH - width)/2;
|
||||||
// Div div = new Div();
|
// Div div = new Div();
|
||||||
// div.setPositionX(0);
|
// div.setPositionX(0);
|
||||||
// div.setPositionY(0);
|
// div.setPositionY(0);
|
||||||
// div.setWidth(500);
|
// div.setWidth(500);
|
||||||
// div.setHeight(500);
|
// div.setHeight(500);
|
||||||
ScrollableContainer scrollable = new ScrollableContainer(0, 0, width, height);
|
VirtualScrollable scrollable = new VirtualScrollable(width, height);
|
||||||
rVal.addChild(scrollable);
|
rVal.addChild(scrollable);
|
||||||
// scrollable.addChild(div);
|
// scrollable.addChild(div);
|
||||||
rVal.setOnNavigationCallback(new NavigationEventCallback() {public boolean execute(NavigationEvent event){
|
rVal.setOnNavigationCallback(new NavigationEventCallback() {public boolean execute(NavigationEvent event){
|
||||||
@ -153,15 +157,15 @@ public class MenuGeneratorsInGame {
|
|||||||
}});
|
}});
|
||||||
|
|
||||||
//black texture background
|
//black texture background
|
||||||
ImagePanel imagePanel = new ImagePanel(0,0,width,height + 1000,Globals.blackTexture);
|
// ImagePanel imagePanel = new ImagePanel(0,0,width,height + 1000,Globals.blackTexture);
|
||||||
// imagePanel.setWidth(width);
|
// imagePanel.setWidth(width);
|
||||||
// imagePanel.setHeight(height);
|
// imagePanel.setHeight(height);
|
||||||
// imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture));
|
// imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.blackTexture));
|
||||||
scrollable.addChild(imagePanel);
|
// scrollable.addChild(imagePanel);
|
||||||
|
|
||||||
//label 1 (back)
|
//label 1 (back)
|
||||||
Button backButton = new Button();
|
Button backButton = new Button();
|
||||||
Label backLabel = new Label(100,50,fontSize);
|
Label backLabel = new Label(fontSize);
|
||||||
backLabel.setText("Back");
|
backLabel.setText("Back");
|
||||||
backButton.addChild(backLabel);
|
backButton.addChild(backLabel);
|
||||||
scrollable.addChild(backButton);
|
scrollable.addChild(backButton);
|
||||||
@ -178,7 +182,7 @@ public class MenuGeneratorsInGame {
|
|||||||
|
|
||||||
//label 3 (load model and debug)
|
//label 3 (load model and debug)
|
||||||
Button debugModelButton = new Button();
|
Button debugModelButton = new Button();
|
||||||
Label debugModelLabel = new Label(100,250,fontSize);
|
Label debugModelLabel = new Label(fontSize);
|
||||||
debugModelLabel.setText("Print Model Debug Info");
|
debugModelLabel.setText("Print Model Debug Info");
|
||||||
debugModelButton.addChild(debugModelLabel);
|
debugModelButton.addChild(debugModelLabel);
|
||||||
scrollable.addChild(debugModelButton);
|
scrollable.addChild(debugModelButton);
|
||||||
@ -199,7 +203,7 @@ public class MenuGeneratorsInGame {
|
|||||||
|
|
||||||
//label 4 (reload all shaders)
|
//label 4 (reload all shaders)
|
||||||
Button reloadShaderButton = new Button();
|
Button reloadShaderButton = new Button();
|
||||||
Label reloadShaderLabel = new Label(100,350,fontSize);
|
Label reloadShaderLabel = new Label(fontSize);
|
||||||
reloadShaderLabel.setText("Reload all shaders");
|
reloadShaderLabel.setText("Reload all shaders");
|
||||||
reloadShaderButton.addChild(reloadShaderLabel);
|
reloadShaderButton.addChild(reloadShaderLabel);
|
||||||
scrollable.addChild(reloadShaderButton);
|
scrollable.addChild(reloadShaderButton);
|
||||||
@ -211,7 +215,7 @@ public class MenuGeneratorsInGame {
|
|||||||
|
|
||||||
//reload all models
|
//reload all models
|
||||||
Button reloadModelButton = new Button();
|
Button reloadModelButton = new Button();
|
||||||
Label reloadModelLabel = new Label(100,450,fontSize);
|
Label reloadModelLabel = new Label(fontSize);
|
||||||
reloadModelLabel.setText("Reload all models");
|
reloadModelLabel.setText("Reload all models");
|
||||||
reloadModelButton.addChild(reloadModelLabel);
|
reloadModelButton.addChild(reloadModelLabel);
|
||||||
scrollable.addChild(reloadModelButton);
|
scrollable.addChild(reloadModelButton);
|
||||||
@ -223,7 +227,7 @@ public class MenuGeneratorsInGame {
|
|||||||
|
|
||||||
//disable drawing player character
|
//disable drawing player character
|
||||||
Button toggleDrawPlayerButton = new Button();
|
Button toggleDrawPlayerButton = new Button();
|
||||||
Label toggleDrawPlayerLabel = new Label(100,550,fontSize);
|
Label toggleDrawPlayerLabel = new Label(fontSize);
|
||||||
toggleDrawPlayerLabel.setText("Toggle draw character");
|
toggleDrawPlayerLabel.setText("Toggle draw character");
|
||||||
toggleDrawPlayerButton.addChild(toggleDrawPlayerLabel);
|
toggleDrawPlayerButton.addChild(toggleDrawPlayerLabel);
|
||||||
scrollable.addChild(toggleDrawPlayerButton);
|
scrollable.addChild(toggleDrawPlayerButton);
|
||||||
@ -244,7 +248,7 @@ public class MenuGeneratorsInGame {
|
|||||||
|
|
||||||
//pull up character editor
|
//pull up character editor
|
||||||
Button characterSliderMenuButton = new Button();
|
Button characterSliderMenuButton = new Button();
|
||||||
Label characterSliderMenuLabel = new Label(100,650,fontSize);
|
Label characterSliderMenuLabel = new Label(fontSize);
|
||||||
characterSliderMenuLabel.setText("Character slider menu");
|
characterSliderMenuLabel.setText("Character slider menu");
|
||||||
characterSliderMenuButton.addChild(characterSliderMenuLabel);
|
characterSliderMenuButton.addChild(characterSliderMenuLabel);
|
||||||
scrollable.addChild(characterSliderMenuButton);
|
scrollable.addChild(characterSliderMenuButton);
|
||||||
@ -253,21 +257,9 @@ public class MenuGeneratorsInGame {
|
|||||||
return false;
|
return false;
|
||||||
}});
|
}});
|
||||||
|
|
||||||
for(int i = 0; i < 5; i++){
|
|
||||||
Button someButton = new Button();
|
|
||||||
Label someLabel = new Label(100,750 + i * 100,fontSize);
|
|
||||||
someLabel.setText("aaaaaa" + i);
|
|
||||||
someButton.addChild(someLabel);
|
|
||||||
scrollable.addChild(someButton);
|
|
||||||
someButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
|
||||||
// Main.running = false;
|
|
||||||
return false;
|
|
||||||
}});
|
|
||||||
}
|
|
||||||
|
|
||||||
//label (switch framebuffer)
|
//label (switch framebuffer)
|
||||||
Button switchFramebufferButton = new Button();
|
Button switchFramebufferButton = new Button();
|
||||||
Label switchFramebufferLabel = new Label(100,1250,fontSize);
|
Label switchFramebufferLabel = new Label(fontSize);
|
||||||
switchFramebufferLabel.setText("Switch Active Framebuffer");
|
switchFramebufferLabel.setText("Switch Active Framebuffer");
|
||||||
switchFramebufferButton.addChild(switchFramebufferLabel);
|
switchFramebufferButton.addChild(switchFramebufferLabel);
|
||||||
scrollable.addChild(switchFramebufferButton);
|
scrollable.addChild(switchFramebufferButton);
|
||||||
@ -279,7 +271,7 @@ public class MenuGeneratorsInGame {
|
|||||||
|
|
||||||
//label (toggle draw collision spheres)
|
//label (toggle draw collision spheres)
|
||||||
Button toggleCollisionSpheresButton = new Button();
|
Button toggleCollisionSpheresButton = new Button();
|
||||||
Label toggleCollisionSpheresLabel = new Label(100,1350,fontSize);
|
Label toggleCollisionSpheresLabel = new Label(fontSize);
|
||||||
toggleCollisionSpheresLabel.setText("Toggle draw collision spheres");
|
toggleCollisionSpheresLabel.setText("Toggle draw collision spheres");
|
||||||
toggleCollisionSpheresButton.addChild(toggleCollisionSpheresLabel);
|
toggleCollisionSpheresButton.addChild(toggleCollisionSpheresLabel);
|
||||||
scrollable.addChild(toggleCollisionSpheresButton);
|
scrollable.addChild(toggleCollisionSpheresButton);
|
||||||
@ -291,7 +283,7 @@ public class MenuGeneratorsInGame {
|
|||||||
|
|
||||||
//label (toggle draw physics objects)
|
//label (toggle draw physics objects)
|
||||||
Button togglePhysicsObjectsButton = new Button();
|
Button togglePhysicsObjectsButton = new Button();
|
||||||
Label togglePhysicsObjectsLabel = new Label(100,1450,fontSize);
|
Label togglePhysicsObjectsLabel = new Label(fontSize);
|
||||||
togglePhysicsObjectsLabel.setText("Toggle draw physics objects");
|
togglePhysicsObjectsLabel.setText("Toggle draw physics objects");
|
||||||
togglePhysicsObjectsButton.addChild(togglePhysicsObjectsLabel);
|
togglePhysicsObjectsButton.addChild(togglePhysicsObjectsLabel);
|
||||||
scrollable.addChild(togglePhysicsObjectsButton);
|
scrollable.addChild(togglePhysicsObjectsButton);
|
||||||
@ -303,7 +295,7 @@ public class MenuGeneratorsInGame {
|
|||||||
|
|
||||||
//label (toggle draw movement vectors)
|
//label (toggle draw movement vectors)
|
||||||
Button toggleMovementVectorsButton = new Button();
|
Button toggleMovementVectorsButton = new Button();
|
||||||
Label toggleMovementVectorsLabel = new Label(100,1550,fontSize);
|
Label toggleMovementVectorsLabel = new Label(fontSize);
|
||||||
toggleMovementVectorsLabel.setText("Toggle draw movement vectors");
|
toggleMovementVectorsLabel.setText("Toggle draw movement vectors");
|
||||||
toggleMovementVectorsButton.addChild(toggleMovementVectorsLabel);
|
toggleMovementVectorsButton.addChild(toggleMovementVectorsLabel);
|
||||||
scrollable.addChild(toggleMovementVectorsButton);
|
scrollable.addChild(toggleMovementVectorsButton);
|
||||||
@ -315,7 +307,7 @@ public class MenuGeneratorsInGame {
|
|||||||
|
|
||||||
//label (toggle draw navmesh)
|
//label (toggle draw navmesh)
|
||||||
Button toggleNavmeshButton = new Button();
|
Button toggleNavmeshButton = new Button();
|
||||||
Label toggleNavmeshLabel = new Label(100,1650,fontSize);
|
Label toggleNavmeshLabel = new Label(fontSize);
|
||||||
toggleNavmeshLabel.setText("Toggle draw navmesh");
|
toggleNavmeshLabel.setText("Toggle draw navmesh");
|
||||||
toggleNavmeshButton.addChild(toggleNavmeshLabel);
|
toggleNavmeshButton.addChild(toggleNavmeshLabel);
|
||||||
scrollable.addChild(toggleNavmeshButton);
|
scrollable.addChild(toggleNavmeshButton);
|
||||||
@ -325,6 +317,8 @@ public class MenuGeneratorsInGame {
|
|||||||
return false;
|
return false;
|
||||||
}});
|
}});
|
||||||
|
|
||||||
|
rVal.applyYoga();
|
||||||
|
|
||||||
return rVal;
|
return rVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -332,7 +326,7 @@ public class MenuGeneratorsInGame {
|
|||||||
int width = 500;
|
int width = 500;
|
||||||
int height = 500;
|
int height = 500;
|
||||||
float fontSize = 0.4f;
|
float fontSize = 0.4f;
|
||||||
Window rVal = new Window(0,0,width,height);
|
Window rVal = new Window(0,0,width,height,true);
|
||||||
// int screenLeft = (Globals.WINDOW_WIDTH - width)/2;
|
// int screenLeft = (Globals.WINDOW_WIDTH - width)/2;
|
||||||
// Div div = new Div();
|
// Div div = new Div();
|
||||||
// div.setPositionX(0);
|
// div.setPositionX(0);
|
||||||
@ -356,7 +350,7 @@ public class MenuGeneratorsInGame {
|
|||||||
|
|
||||||
//label 1 (back)
|
//label 1 (back)
|
||||||
Button backButton = new Button();
|
Button backButton = new Button();
|
||||||
Label backLabel = new Label(200,50,fontSize);
|
Label backLabel = new Label(fontSize);
|
||||||
backLabel.setText("Back");
|
backLabel.setText("Back");
|
||||||
backButton.addChild(backLabel);
|
backButton.addChild(backLabel);
|
||||||
scrollable.addChild(backButton);
|
scrollable.addChild(backButton);
|
||||||
@ -388,6 +382,8 @@ public class MenuGeneratorsInGame {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rVal.applyYoga();
|
||||||
|
|
||||||
return rVal;
|
return rVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -36,7 +36,7 @@ public class MenuGeneratorsInventory {
|
|||||||
int width = 500;
|
int width = 500;
|
||||||
int height = 500;
|
int height = 500;
|
||||||
|
|
||||||
Window rVal = new Window(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT);
|
Window rVal = new Window(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT,true);
|
||||||
|
|
||||||
Div div = new Div();
|
Div div = new Div();
|
||||||
rVal.addChild(div);
|
rVal.addChild(div);
|
||||||
@ -200,7 +200,7 @@ public class MenuGeneratorsInventory {
|
|||||||
int width = 500;
|
int width = 500;
|
||||||
int height = 500;
|
int height = 500;
|
||||||
// int screenLeft = (Globals.WINDOW_WIDTH - width)/2;
|
// int screenLeft = (Globals.WINDOW_WIDTH - width)/2;
|
||||||
Window rVal = new Window(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT);
|
Window rVal = new Window(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT,true);
|
||||||
|
|
||||||
Div div = new Div();
|
Div div = new Div();
|
||||||
div.setPositionX(1000);
|
div.setPositionX(1000);
|
||||||
@ -367,7 +367,7 @@ public class MenuGeneratorsInventory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Element worldItemDropCaptureWindow(){
|
public static Element worldItemDropCaptureWindow(){
|
||||||
Window rVal = new Window(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT);
|
Window rVal = new Window(0,0,Globals.WINDOW_WIDTH,Globals.WINDOW_HEIGHT,true);
|
||||||
Div div = new Div();
|
Div div = new Div();
|
||||||
div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){
|
div.setOnDragRelease(new DragEventCallback() {public boolean execute(DragEvent event){
|
||||||
if(Globals.draggedItem != null){
|
if(Globals.draggedItem != null){
|
||||||
|
|||||||
@ -3,14 +3,13 @@ package electrosphere.menu.mainmenu;
|
|||||||
import electrosphere.auth.AuthenticationManager;
|
import electrosphere.auth.AuthenticationManager;
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.engine.loadingthreads.LoadingThread;
|
import electrosphere.engine.loadingthreads.LoadingThread;
|
||||||
import electrosphere.net.NetUtils;
|
|
||||||
import electrosphere.renderer.ui.elements.Button;
|
import electrosphere.renderer.ui.elements.Button;
|
||||||
|
import electrosphere.renderer.ui.elements.FormElement;
|
||||||
import electrosphere.renderer.ui.elements.Label;
|
import electrosphere.renderer.ui.elements.Label;
|
||||||
import electrosphere.renderer.ui.elements.TextInput;
|
import electrosphere.renderer.ui.elements.TextInput;
|
||||||
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.Element;
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
import electrosphere.renderer.ui.events.ClickEvent;
|
import electrosphere.renderer.ui.events.ClickEvent;
|
||||||
import electrosphere.renderer.ui.form.FormElement;
|
|
||||||
|
|
||||||
public class MenuGeneratorsArena {
|
public class MenuGeneratorsArena {
|
||||||
|
|
||||||
@ -19,28 +18,32 @@ public class MenuGeneratorsArena {
|
|||||||
int screenTop = 150;
|
int screenTop = 150;
|
||||||
|
|
||||||
//label (address)
|
//label (address)
|
||||||
Label usernameLabel = new Label(100,screenTop + 50,1.0f);
|
Label usernameLabel = new Label(1.0f);
|
||||||
usernameLabel.setText("Username");
|
usernameLabel.setText("Username");
|
||||||
rVal.addChild(usernameLabel);
|
rVal.addChild(usernameLabel);
|
||||||
|
|
||||||
//text entry (address)
|
//text entry (address)
|
||||||
TextInput usernameInput = new TextInput(100,screenTop + 125,1.0f);
|
TextInput usernameInput = new TextInput(100,screenTop + 125,1.0f);
|
||||||
usernameInput.setText("");
|
usernameInput.setText("");
|
||||||
|
usernameInput.setMinWidth(200);
|
||||||
|
usernameInput.setMaxWidth(200);
|
||||||
rVal.addChild(usernameInput);
|
rVal.addChild(usernameInput);
|
||||||
|
|
||||||
//label (port)
|
//label (port)
|
||||||
Label passwordLabel = new Label(100,screenTop + 200,1.0f);
|
Label passwordLabel = new Label(1.0f);
|
||||||
passwordLabel.setText("Password");
|
passwordLabel.setText("Password");
|
||||||
rVal.addChild(passwordLabel);
|
rVal.addChild(passwordLabel);
|
||||||
|
|
||||||
//text entry (port)
|
//text entry (port)
|
||||||
TextInput passwordInput = new TextInput(100,screenTop + 275,1.0f);
|
TextInput passwordInput = new TextInput(100,screenTop + 275,1.0f);
|
||||||
passwordInput.setText("");
|
passwordInput.setText("");
|
||||||
|
passwordInput.setMinWidth(200);
|
||||||
|
passwordInput.setMaxWidth(200);
|
||||||
rVal.addChild(passwordInput);
|
rVal.addChild(passwordInput);
|
||||||
|
|
||||||
//button (connect)
|
//button (connect)
|
||||||
Button connectButton = new Button();
|
Button connectButton = new Button();
|
||||||
Label connectLabel = new Label(100,screenTop + 350,1.0f);
|
Label connectLabel = new Label(1.0f);
|
||||||
connectLabel.setText("Login");
|
connectLabel.setText("Login");
|
||||||
connectButton.addChild(connectLabel);
|
connectButton.addChild(connectLabel);
|
||||||
rVal.addChild(connectButton);
|
rVal.addChild(connectButton);
|
||||||
|
|||||||
@ -25,10 +25,10 @@ public class MenuGeneratorsDebug {
|
|||||||
static final int X_OFFSET = 1000;
|
static final int X_OFFSET = 1000;
|
||||||
|
|
||||||
public static Window createTopLevelDebugMenu(){
|
public static Window createTopLevelDebugMenu(){
|
||||||
Window rVal = new Window(X_OFFSET,100,800,800);
|
Window rVal = new Window(X_OFFSET,100,800,800,true);
|
||||||
|
|
||||||
//label (title)
|
//label (title)
|
||||||
Label titleLabel = new Label(100,50,1.0f);
|
Label titleLabel = new Label(1.0f);
|
||||||
titleLabel.setText("DEBUG");
|
titleLabel.setText("DEBUG");
|
||||||
rVal.addChild(titleLabel);
|
rVal.addChild(titleLabel);
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ public class MenuGeneratorsDebug {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int recursivelyAppendElementTree(List<Element> toAddList, int verticalOffset, int horizontalOffset, Element child){
|
static int recursivelyAppendElementTree(List<Element> toAddList, int verticalOffset, int horizontalOffset, Element child){
|
||||||
Label currentWindowLabel = new Label(100 + horizontalOffset * 25,100 + verticalOffset * 50,0.5f);
|
Label currentWindowLabel = new Label(0.5f);
|
||||||
currentWindowLabel.setText(child.toString());
|
currentWindowLabel.setText(child.toString());
|
||||||
toAddList.add(currentWindowLabel);
|
toAddList.add(currentWindowLabel);
|
||||||
if(child instanceof ContainerElement){
|
if(child instanceof ContainerElement){
|
||||||
|
|||||||
@ -2,17 +2,19 @@ package electrosphere.menu.mainmenu;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.lwjgl.util.yoga.Yoga;
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.engine.loadingthreads.LoadingThread;
|
import electrosphere.engine.loadingthreads.LoadingThread;
|
||||||
import electrosphere.menu.MenuGenerators;
|
|
||||||
import electrosphere.menu.WindowUtils;
|
import electrosphere.menu.WindowUtils;
|
||||||
import electrosphere.renderer.ui.elements.Button;
|
import electrosphere.renderer.ui.elements.Button;
|
||||||
|
import electrosphere.renderer.ui.elements.Div;
|
||||||
|
import electrosphere.renderer.ui.elements.FormElement;
|
||||||
import electrosphere.renderer.ui.elements.Label;
|
import electrosphere.renderer.ui.elements.Label;
|
||||||
import electrosphere.renderer.ui.elements.TextInput;
|
import electrosphere.renderer.ui.elements.TextInput;
|
||||||
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.Element;
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
import electrosphere.renderer.ui.events.ClickEvent;
|
import electrosphere.renderer.ui.events.ClickEvent;
|
||||||
import electrosphere.renderer.ui.form.FormElement;
|
|
||||||
import electrosphere.server.saves.SaveUtils;
|
import electrosphere.server.saves.SaveUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -26,17 +28,16 @@ public class MenuGeneratorsLevelEditor {
|
|||||||
*/
|
*/
|
||||||
public static Element createLevelEditorTopMenu(){
|
public static Element createLevelEditorTopMenu(){
|
||||||
FormElement rVal = new FormElement();
|
FormElement rVal = new FormElement();
|
||||||
int screenTop = 150;
|
|
||||||
|
|
||||||
//label (address)
|
//label (address)
|
||||||
Label usernameLabel = new Label(100,screenTop + 50,1.0f);
|
Label usernameLabel = new Label(1.0f);
|
||||||
usernameLabel.setText("Select Level");
|
usernameLabel.setText("Select Level");
|
||||||
rVal.addChild(usernameLabel);
|
rVal.addChild(usernameLabel);
|
||||||
|
|
||||||
//button (back)
|
//button (back)
|
||||||
{
|
{
|
||||||
Button backButton = new Button();
|
Button backButton = new Button();
|
||||||
Label backLabel = new Label(100,screenTop + 150,1.0f);
|
Label backLabel = new Label(1.0f);
|
||||||
backLabel.setText("Back");
|
backLabel.setText("Back");
|
||||||
backButton.addChild(backLabel);
|
backButton.addChild(backLabel);
|
||||||
rVal.addChild(backButton);
|
rVal.addChild(backButton);
|
||||||
@ -49,7 +50,7 @@ public class MenuGeneratorsLevelEditor {
|
|||||||
//button (create level)
|
//button (create level)
|
||||||
{
|
{
|
||||||
Button createLevelButton = new Button();
|
Button createLevelButton = new Button();
|
||||||
Label createLevelLabel = new Label(100,screenTop + 225,1.0f);
|
Label createLevelLabel = new Label(1.0f);
|
||||||
createLevelLabel.setText("Create Level");
|
createLevelLabel.setText("Create Level");
|
||||||
createLevelButton.addChild(createLevelLabel);
|
createLevelButton.addChild(createLevelLabel);
|
||||||
rVal.addChild(createLevelButton);
|
rVal.addChild(createLevelButton);
|
||||||
@ -62,29 +63,31 @@ public class MenuGeneratorsLevelEditor {
|
|||||||
|
|
||||||
//the buttons to load existing levels
|
//the buttons to load existing levels
|
||||||
List<String> saveNames = SaveUtils.getSaves();
|
List<String> saveNames = SaveUtils.getSaves();
|
||||||
int i = 0;
|
|
||||||
for(String saveName : saveNames){
|
for(String saveName : saveNames){
|
||||||
i++;
|
//containing div
|
||||||
|
Div div = new Div();
|
||||||
|
div.setFlexDirection(Yoga.YGFlexDirectionRow);
|
||||||
|
div.setMaxHeight(30);
|
||||||
|
|
||||||
//delete level button
|
//delete level button
|
||||||
Button deleteButton = new Button();
|
Button deleteButton = new Button();
|
||||||
Label deleteLabel = new Label(100,screenTop + 225 + 75 * i,1.0f);
|
Label deleteLabel = new Label(1.0f);
|
||||||
deleteLabel.setText("[X]");
|
deleteLabel.setText(" X ");
|
||||||
deleteButton.addChild(deleteLabel);
|
deleteButton.addChild(deleteLabel);
|
||||||
rVal.addChild(deleteButton);
|
deleteButton.setMarginRight(10);
|
||||||
deleteButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
deleteButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
||||||
SaveUtils.deleteSave(saveName);
|
SaveUtils.deleteSave(saveName);
|
||||||
WindowUtils.replaceMainMenuContents(MenuGeneratorsLevelEditor.createLevelEditorTopMenu());
|
WindowUtils.replaceMainMenuContents(MenuGeneratorsLevelEditor.createLevelEditorTopMenu());
|
||||||
return false;
|
return false;
|
||||||
}});
|
}});
|
||||||
|
div.addChild(deleteButton);
|
||||||
|
|
||||||
|
|
||||||
//button (launch level)
|
//button (launch level)
|
||||||
Button launchButton = new Button();
|
Button launchButton = new Button();
|
||||||
Label launchLabel = new Label(200,screenTop + 225 + 75 * i,1.0f);
|
Label launchLabel = new Label(1.0f);
|
||||||
launchLabel.setText(saveName);
|
launchLabel.setText(saveName);
|
||||||
launchButton.addChild(launchLabel);
|
launchButton.addChild(launchLabel);
|
||||||
rVal.addChild(launchButton);
|
|
||||||
launchButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
launchButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
||||||
//launch level
|
//launch level
|
||||||
Globals.currentSaveName = saveName;
|
Globals.currentSaveName = saveName;
|
||||||
@ -95,6 +98,9 @@ public class MenuGeneratorsLevelEditor {
|
|||||||
loadingThread.start();
|
loadingThread.start();
|
||||||
return false;
|
return false;
|
||||||
}});
|
}});
|
||||||
|
div.addChild(launchButton);
|
||||||
|
|
||||||
|
rVal.addChild(div);
|
||||||
}
|
}
|
||||||
|
|
||||||
return rVal;
|
return rVal;
|
||||||
@ -110,14 +116,14 @@ public class MenuGeneratorsLevelEditor {
|
|||||||
int screenTop = 150;
|
int screenTop = 150;
|
||||||
|
|
||||||
//label (address)
|
//label (address)
|
||||||
Label usernameLabel = new Label(100,screenTop + 50,1.0f);
|
Label usernameLabel = new Label(1.0f);
|
||||||
usernameLabel.setText("Create Level");
|
usernameLabel.setText("Create Level");
|
||||||
rVal.addChild(usernameLabel);
|
rVal.addChild(usernameLabel);
|
||||||
|
|
||||||
//button (back)
|
//button (back)
|
||||||
{
|
{
|
||||||
Button backButton = new Button();
|
Button backButton = new Button();
|
||||||
Label backLabel = new Label(100,screenTop + 150,1.0f);
|
Label backLabel = new Label(1.0f);
|
||||||
backLabel.setText("Back");
|
backLabel.setText("Back");
|
||||||
backButton.addChild(backLabel);
|
backButton.addChild(backLabel);
|
||||||
rVal.addChild(backButton);
|
rVal.addChild(backButton);
|
||||||
@ -129,7 +135,7 @@ public class MenuGeneratorsLevelEditor {
|
|||||||
|
|
||||||
//label for text input for level name
|
//label for text input for level name
|
||||||
{
|
{
|
||||||
Label levelNameLabel = new Label(100,screenTop + 225,1.0f);
|
Label levelNameLabel = new Label(1.0f);
|
||||||
levelNameLabel.setText("Level Name:");
|
levelNameLabel.setText("Level Name:");
|
||||||
rVal.addChild(levelNameLabel);
|
rVal.addChild(levelNameLabel);
|
||||||
}
|
}
|
||||||
@ -140,6 +146,7 @@ public class MenuGeneratorsLevelEditor {
|
|||||||
String defaultSaveName = "defaultLevel_" + i;
|
String defaultSaveName = "defaultLevel_" + i;
|
||||||
while(saveNames.contains(defaultSaveName)){
|
while(saveNames.contains(defaultSaveName)){
|
||||||
i++;
|
i++;
|
||||||
|
defaultSaveName = "defaultLevel_" + i;
|
||||||
}
|
}
|
||||||
|
|
||||||
//get level name
|
//get level name
|
||||||
@ -150,7 +157,7 @@ public class MenuGeneratorsLevelEditor {
|
|||||||
//button (create level)
|
//button (create level)
|
||||||
{
|
{
|
||||||
Button createLevelButton = new Button();
|
Button createLevelButton = new Button();
|
||||||
Label createLevelLabel = new Label(100,screenTop + 375,1.0f);
|
Label createLevelLabel = new Label(1.0f);
|
||||||
createLevelLabel.setText("Create Level");
|
createLevelLabel.setText("Create Level");
|
||||||
createLevelButton.addChild(createLevelLabel);
|
createLevelButton.addChild(createLevelLabel);
|
||||||
rVal.addChild(createLevelButton);
|
rVal.addChild(createLevelButton);
|
||||||
|
|||||||
@ -3,8 +3,8 @@ package electrosphere.menu.mainmenu;
|
|||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.joml.Quaternionf;
|
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
|
import org.lwjgl.util.yoga.Yoga;
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.entity.types.camera.CameraEntityUtils;
|
import electrosphere.entity.types.camera.CameraEntityUtils;
|
||||||
@ -15,16 +15,14 @@ import electrosphere.game.data.creature.type.visualattribute.VisualAttribute;
|
|||||||
import electrosphere.menu.MenuGenerators;
|
import electrosphere.menu.MenuGenerators;
|
||||||
import electrosphere.menu.WindowUtils;
|
import electrosphere.menu.WindowUtils;
|
||||||
import electrosphere.net.parser.net.message.CharacterMessage;
|
import electrosphere.net.parser.net.message.CharacterMessage;
|
||||||
import electrosphere.renderer.RenderingEngine;
|
|
||||||
import electrosphere.renderer.actor.Actor;
|
import electrosphere.renderer.actor.Actor;
|
||||||
import electrosphere.renderer.actor.ActorStaticMorph;
|
import electrosphere.renderer.actor.ActorStaticMorph;
|
||||||
import electrosphere.renderer.actor.ActorUtils;
|
import electrosphere.renderer.actor.ActorUtils;
|
||||||
import electrosphere.renderer.actor.ActorStaticMorph.StaticMorphTransforms;
|
|
||||||
import electrosphere.renderer.anim.Animation;
|
import electrosphere.renderer.anim.Animation;
|
||||||
import electrosphere.renderer.model.Model;
|
|
||||||
import electrosphere.renderer.ui.elements.ActorPanel;
|
import electrosphere.renderer.ui.elements.ActorPanel;
|
||||||
import electrosphere.renderer.ui.elements.Button;
|
import electrosphere.renderer.ui.elements.Button;
|
||||||
import electrosphere.renderer.ui.elements.ImagePanel;
|
import electrosphere.renderer.ui.elements.Div;
|
||||||
|
import electrosphere.renderer.ui.elements.FormElement;
|
||||||
import electrosphere.renderer.ui.elements.Label;
|
import electrosphere.renderer.ui.elements.Label;
|
||||||
import electrosphere.renderer.ui.elements.ScrollableContainer;
|
import electrosphere.renderer.ui.elements.ScrollableContainer;
|
||||||
import electrosphere.renderer.ui.elements.Slider;
|
import electrosphere.renderer.ui.elements.Slider;
|
||||||
@ -34,19 +32,16 @@ import electrosphere.renderer.ui.elementtypes.Element;
|
|||||||
import electrosphere.renderer.ui.elementtypes.ValueElement.ValueChangeEventCallback;
|
import electrosphere.renderer.ui.elementtypes.ValueElement.ValueChangeEventCallback;
|
||||||
import electrosphere.renderer.ui.events.ClickEvent;
|
import electrosphere.renderer.ui.events.ClickEvent;
|
||||||
import electrosphere.renderer.ui.events.ValueChangeEvent;
|
import electrosphere.renderer.ui.events.ValueChangeEvent;
|
||||||
import electrosphere.renderer.ui.form.FormElement;
|
|
||||||
import electrosphere.util.Utilities;
|
import electrosphere.util.Utilities;
|
||||||
|
|
||||||
public class MenuGeneratorsMultiplayer {
|
public class MenuGeneratorsMultiplayer {
|
||||||
|
|
||||||
public static Element createMultiplayerCharacterSelectionWindow(){
|
public static Element createMultiplayerCharacterSelectionWindow(){
|
||||||
FormElement rVal = new FormElement();
|
FormElement rVal = new FormElement();
|
||||||
// int screenTop = Globals.WINDOW_HEIGHT - 150;
|
|
||||||
int verticalPosition = 125;
|
|
||||||
|
|
||||||
//button (create)
|
//button (create)
|
||||||
Button createButton = new Button();
|
Button createButton = new Button();
|
||||||
Label createLabel = new Label(100,125 + verticalPosition + 200,1.0f);
|
Label createLabel = new Label(1.0f);
|
||||||
createLabel.setText("Create Character");
|
createLabel.setText("Create Character");
|
||||||
createButton.addChild(createLabel);
|
createButton.addChild(createLabel);
|
||||||
rVal.addChild(createButton);
|
rVal.addChild(createButton);
|
||||||
@ -61,8 +56,6 @@ public class MenuGeneratorsMultiplayer {
|
|||||||
static String selectedRace = "";
|
static String selectedRace = "";
|
||||||
public static Element createMultiplayerCharacterCreationWindow(){
|
public static Element createMultiplayerCharacterCreationWindow(){
|
||||||
FormElement rVal = new FormElement();
|
FormElement rVal = new FormElement();
|
||||||
// int screenTop = Globals.WINDOW_HEIGHT - 150;
|
|
||||||
int verticalPosition = 125;
|
|
||||||
|
|
||||||
//select race
|
//select race
|
||||||
StringCarousel raceCarousel = new StringCarousel(100, 125, 1.0f);
|
StringCarousel raceCarousel = new StringCarousel(100, 125, 1.0f);
|
||||||
@ -76,7 +69,7 @@ public class MenuGeneratorsMultiplayer {
|
|||||||
|
|
||||||
//button (create)
|
//button (create)
|
||||||
Button createButton = new Button();
|
Button createButton = new Button();
|
||||||
Label createLabel = new Label(100,275,1.0f);
|
Label createLabel = new Label(1.0f);
|
||||||
createLabel.setText("Select Race");
|
createLabel.setText("Select Race");
|
||||||
createButton.addChild(createLabel);
|
createButton.addChild(createLabel);
|
||||||
rVal.addChild(createButton);
|
rVal.addChild(createButton);
|
||||||
@ -121,7 +114,7 @@ public class MenuGeneratorsMultiplayer {
|
|||||||
for(VisualAttribute attribute : selectedRaceType.getVisualAttributes()){
|
for(VisualAttribute attribute : selectedRaceType.getVisualAttributes()){
|
||||||
if(attribute.getType().equals(VisualAttribute.TYPE_BONE)){
|
if(attribute.getType().equals(VisualAttribute.TYPE_BONE)){
|
||||||
//add label for slider
|
//add label for slider
|
||||||
Label sliderName = new Label(20, verticalPosition, 0.6f);
|
Label sliderName = new Label(0.6f);
|
||||||
sliderName.setText(attribute.getAttributeId());
|
sliderName.setText(attribute.getAttributeId());
|
||||||
controlsToAdd.add(sliderName);
|
controlsToAdd.add(sliderName);
|
||||||
//add a slider
|
//add a slider
|
||||||
@ -155,7 +148,7 @@ public class MenuGeneratorsMultiplayer {
|
|||||||
}});
|
}});
|
||||||
} else if(attribute.getType().equals(VisualAttribute.TYPE_REMESH)){
|
} else if(attribute.getType().equals(VisualAttribute.TYPE_REMESH)){
|
||||||
//add label for carousel
|
//add label for carousel
|
||||||
Label sliderName = new Label(20, verticalPosition, 0.6f);
|
Label sliderName = new Label(0.6f);
|
||||||
sliderName.setText(attribute.getAttributeId());
|
sliderName.setText(attribute.getAttributeId());
|
||||||
controlsToAdd.add(sliderName);
|
controlsToAdd.add(sliderName);
|
||||||
//for adding the value to the creature template
|
//for adding the value to the creature template
|
||||||
@ -198,7 +191,7 @@ public class MenuGeneratorsMultiplayer {
|
|||||||
|
|
||||||
//add button to actually create the character
|
//add button to actually create the character
|
||||||
Button createCharacterButton = new Button();
|
Button createCharacterButton = new Button();
|
||||||
Label createCharacterLabel = new Label(horizontalPosition,verticalPosition,1.0f);
|
Label createCharacterLabel = new Label(1.0f);
|
||||||
createCharacterLabel.setText("Create");
|
createCharacterLabel.setText("Create");
|
||||||
createCharacterButton.addChild(createCharacterLabel);
|
createCharacterButton.addChild(createCharacterLabel);
|
||||||
controlsToAdd.add(createCharacterButton);
|
controlsToAdd.add(createCharacterButton);
|
||||||
@ -210,13 +203,18 @@ public class MenuGeneratorsMultiplayer {
|
|||||||
int width = 1800;
|
int width = 1800;
|
||||||
int height = verticalPosition + 300;
|
int height = verticalPosition + 300;
|
||||||
|
|
||||||
|
Div rVal = new Div();
|
||||||
|
rVal.setFlexDirection(Yoga.YGFlexDirectionRow);
|
||||||
|
|
||||||
ScrollableContainer scrollable = new ScrollableContainer(0, 0, width, height);
|
ScrollableContainer scrollable = new ScrollableContainer(0, 0, width, height);
|
||||||
for(Element newControl : controlsToAdd){
|
for(Element newControl : controlsToAdd){
|
||||||
scrollable.addChild(newControl);
|
scrollable.addChild(newControl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
scrollable.addChild(actorPanel);
|
|
||||||
|
rVal.addChild(scrollable);
|
||||||
|
rVal.addChild(actorPanel);
|
||||||
// rVal.addChild(scrollable);
|
// rVal.addChild(scrollable);
|
||||||
|
|
||||||
// Label testLabel = new Label(100,215,1.0f);
|
// Label testLabel = new Label(100,215,1.0f);
|
||||||
@ -227,7 +225,7 @@ public class MenuGeneratorsMultiplayer {
|
|||||||
// ImagePanel imagePanel = new ImagePanel(0,0,width,height + 1000,Globals.blackTexture);
|
// ImagePanel imagePanel = new ImagePanel(0,0,width,height + 1000,Globals.blackTexture);
|
||||||
// scrollable.addChild(imagePanel);
|
// scrollable.addChild(imagePanel);
|
||||||
|
|
||||||
return scrollable;
|
return rVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,28 +1,35 @@
|
|||||||
package electrosphere.menu.mainmenu;
|
package electrosphere.menu.mainmenu;
|
||||||
|
|
||||||
|
import org.lwjgl.util.yoga.Yoga;
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.engine.loadingthreads.LoadingThread;
|
import electrosphere.engine.loadingthreads.LoadingThread;
|
||||||
import electrosphere.menu.MenuGenerators;
|
import electrosphere.menu.MenuGenerators;
|
||||||
import electrosphere.menu.WindowUtils;
|
import electrosphere.menu.WindowUtils;
|
||||||
import electrosphere.renderer.ui.elements.Button;
|
import electrosphere.renderer.ui.elements.Button;
|
||||||
|
import electrosphere.renderer.ui.elements.FormElement;
|
||||||
import electrosphere.renderer.ui.elements.Label;
|
import electrosphere.renderer.ui.elements.Label;
|
||||||
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.Element;
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
import electrosphere.renderer.ui.events.ClickEvent;
|
import electrosphere.renderer.ui.events.ClickEvent;
|
||||||
import electrosphere.renderer.ui.form.FormElement;
|
|
||||||
|
|
||||||
public class MenuGeneratorsTitleMenu {
|
public class MenuGeneratorsTitleMenu {
|
||||||
public static Element createTitleMenu(){
|
public static Element createTitleMenu(){
|
||||||
FormElement rVal = new FormElement();
|
FormElement rVal = new FormElement();
|
||||||
|
//top-bottom
|
||||||
|
rVal.setJustifyContent(Yoga.YGJustifyCenter);
|
||||||
|
//left-right
|
||||||
|
rVal.setAlignItems(Yoga.YGAlignCenter);
|
||||||
|
rVal.setAlignContent(Yoga.YGAlignFlexStart);
|
||||||
|
|
||||||
//label (title)
|
//label (title)
|
||||||
Label titleLabel = new Label(100,150,1.0f);
|
Label titleLabel = new Label(1.0f);
|
||||||
titleLabel.setText("ORPG");
|
titleLabel.setText("ORPG");
|
||||||
rVal.addChild(titleLabel);
|
rVal.addChild(titleLabel);
|
||||||
|
|
||||||
//button (multiplayer)
|
//button (multiplayer)
|
||||||
Button singleplayerButton = new Button();
|
Button singleplayerButton = new Button();
|
||||||
Label singleplayerLabel = new Label(100,275,1.0f);
|
Label singleplayerLabel = new Label(1.0f);
|
||||||
singleplayerLabel.setText("Singleplayer");
|
singleplayerLabel.setText("Singleplayer");
|
||||||
singleplayerButton.addChild(singleplayerLabel);
|
singleplayerButton.addChild(singleplayerLabel);
|
||||||
rVal.addChild(singleplayerButton);
|
rVal.addChild(singleplayerButton);
|
||||||
@ -38,7 +45,7 @@ public class MenuGeneratorsTitleMenu {
|
|||||||
|
|
||||||
//button (multiplayer)
|
//button (multiplayer)
|
||||||
Button multiplayerButton = new Button();
|
Button multiplayerButton = new Button();
|
||||||
Label multiplayerLabel = new Label(100,350,1.0f);
|
Label multiplayerLabel = new Label(1.0f);
|
||||||
multiplayerLabel.setText("Multiplayer");
|
multiplayerLabel.setText("Multiplayer");
|
||||||
multiplayerButton.addChild(multiplayerLabel);
|
multiplayerButton.addChild(multiplayerLabel);
|
||||||
rVal.addChild(multiplayerButton);
|
rVal.addChild(multiplayerButton);
|
||||||
@ -49,7 +56,7 @@ public class MenuGeneratorsTitleMenu {
|
|||||||
|
|
||||||
//button (arena)
|
//button (arena)
|
||||||
Button arenaButton = new Button();
|
Button arenaButton = new Button();
|
||||||
Label arenaLabel = new Label(100,425,1.0f);
|
Label arenaLabel = new Label(1.0f);
|
||||||
arenaLabel.setText("Arena");
|
arenaLabel.setText("Arena");
|
||||||
arenaButton.addChild(arenaLabel);
|
arenaButton.addChild(arenaLabel);
|
||||||
rVal.addChild(arenaButton);
|
rVal.addChild(arenaButton);
|
||||||
@ -65,7 +72,7 @@ public class MenuGeneratorsTitleMenu {
|
|||||||
|
|
||||||
//button (static level)
|
//button (static level)
|
||||||
Button staticLevelButton = new Button();
|
Button staticLevelButton = new Button();
|
||||||
Label staticLevelLabel = new Label(100,500,1.0f);
|
Label staticLevelLabel = new Label(1.0f);
|
||||||
staticLevelLabel.setText("Level Editor");
|
staticLevelLabel.setText("Level Editor");
|
||||||
staticLevelButton.addChild(staticLevelLabel);
|
staticLevelButton.addChild(staticLevelLabel);
|
||||||
rVal.addChild(staticLevelButton);
|
rVal.addChild(staticLevelButton);
|
||||||
@ -76,7 +83,7 @@ public class MenuGeneratorsTitleMenu {
|
|||||||
|
|
||||||
//button (options)
|
//button (options)
|
||||||
Button optionsButton = new Button();
|
Button optionsButton = new Button();
|
||||||
Label optionsLabel = new Label(100,575,1.0f);
|
Label optionsLabel = new Label(1.0f);
|
||||||
optionsLabel.setText("Options");
|
optionsLabel.setText("Options");
|
||||||
optionsButton.addChild(optionsLabel);
|
optionsButton.addChild(optionsLabel);
|
||||||
rVal.addChild(optionsButton);
|
rVal.addChild(optionsButton);
|
||||||
@ -87,7 +94,7 @@ public class MenuGeneratorsTitleMenu {
|
|||||||
|
|
||||||
//button (sp debug)
|
//button (sp debug)
|
||||||
Button uiDebugSPQuickstartButton = new Button();
|
Button uiDebugSPQuickstartButton = new Button();
|
||||||
Label uiDebugSPQuickstartLabel = new Label(100,650,1.0f);
|
Label uiDebugSPQuickstartLabel = new Label(1.0f);
|
||||||
uiDebugSPQuickstartLabel.setText("Debug SP Quickstart");
|
uiDebugSPQuickstartLabel.setText("Debug SP Quickstart");
|
||||||
uiDebugSPQuickstartButton.addChild(uiDebugSPQuickstartLabel);
|
uiDebugSPQuickstartButton.addChild(uiDebugSPQuickstartLabel);
|
||||||
rVal.addChild(uiDebugSPQuickstartButton);
|
rVal.addChild(uiDebugSPQuickstartButton);
|
||||||
@ -102,12 +109,12 @@ public class MenuGeneratorsTitleMenu {
|
|||||||
|
|
||||||
//button (ui testing)
|
//button (ui testing)
|
||||||
Button uiTestingButton = new Button();
|
Button uiTestingButton = new Button();
|
||||||
Label uiTestingLabel = new Label(100,725,1.0f);
|
Label uiTestingLabel = new Label(1.0f);
|
||||||
uiTestingLabel.setText("UI Testing");
|
uiTestingLabel.setText("UI Testing");
|
||||||
uiTestingButton.addChild(uiTestingLabel);
|
uiTestingButton.addChild(uiTestingLabel);
|
||||||
rVal.addChild(uiTestingButton);
|
rVal.addChild(uiTestingButton);
|
||||||
uiTestingButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
uiTestingButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
||||||
WindowUtils.replaceMainMenuContents(MenuGenerators.createUITestMenu());
|
WindowUtils.replaceMainMenuContents(MenuGeneratorsUITesting.createUITestMenu());
|
||||||
return false;
|
return false;
|
||||||
}});
|
}});
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,68 @@
|
|||||||
|
package electrosphere.menu.mainmenu;
|
||||||
|
|
||||||
|
import org.joml.Vector3f;
|
||||||
|
|
||||||
|
import electrosphere.engine.Globals;
|
||||||
|
import electrosphere.entity.types.camera.CameraEntityUtils;
|
||||||
|
import electrosphere.menu.WindowUtils;
|
||||||
|
import electrosphere.renderer.actor.ActorUtils;
|
||||||
|
import electrosphere.renderer.ui.elements.ActorPanel;
|
||||||
|
import electrosphere.renderer.ui.elements.Button;
|
||||||
|
import electrosphere.renderer.ui.elements.FormElement;
|
||||||
|
import electrosphere.renderer.ui.elements.Label;
|
||||||
|
import electrosphere.renderer.ui.elements.Slider;
|
||||||
|
import electrosphere.renderer.ui.elements.VirtualScrollable;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
|
import electrosphere.renderer.ui.events.ClickEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu generators for creating test visualizations for ui elements
|
||||||
|
*/
|
||||||
|
public class MenuGeneratorsUITesting {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Title menu ui testing window
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Element createUITestMenu(){
|
||||||
|
FormElement rVal = new FormElement();
|
||||||
|
|
||||||
|
//button (back)
|
||||||
|
Button backButton = new Button();
|
||||||
|
Label backLabel = new Label(1.0f);
|
||||||
|
backLabel.setText("Back");
|
||||||
|
backButton.addChild(backLabel);
|
||||||
|
rVal.addChild(backButton);
|
||||||
|
backButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){
|
||||||
|
WindowUtils.replaceMainMenuContents(MenuGeneratorsTitleMenu.createTitleMenu());
|
||||||
|
return false;
|
||||||
|
}});
|
||||||
|
|
||||||
|
//slider test
|
||||||
|
Slider slider = new Slider(0, 0, 500, 100, new Vector3f(0.1f,0.1f,0.1f), new Vector3f(1,0,0));
|
||||||
|
rVal.addChild(slider);
|
||||||
|
|
||||||
|
ActorPanel actorPanel = new ActorPanel(500, 100, 500, 500, ActorUtils.createActorFromModelPath("Models/deer1.fbx"));
|
||||||
|
if(Globals.playerCamera == null){
|
||||||
|
Globals.playerCamera = CameraEntityUtils.spawnBasicCameraEntity(new Vector3f(0,0,0), new Vector3f(-1,0,0));
|
||||||
|
}
|
||||||
|
rVal.addChild(actorPanel);
|
||||||
|
|
||||||
|
//
|
||||||
|
//Virtual scrollable test
|
||||||
|
VirtualScrollable virtualScrollable = new VirtualScrollable(300, 75);
|
||||||
|
//add a ton of children
|
||||||
|
for(int i = 0; i < 10; i++){
|
||||||
|
Button testButton = new Button();
|
||||||
|
Label testLabel = new Label(1.0f);
|
||||||
|
testLabel.setText("Test button " + i);
|
||||||
|
testButton.addChild(testLabel);
|
||||||
|
virtualScrollable.addChild(testButton);
|
||||||
|
}
|
||||||
|
rVal.addChild(virtualScrollable);
|
||||||
|
|
||||||
|
return rVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -69,6 +69,8 @@ public class Server implements Runnable{
|
|||||||
ServerConnectionHandler newClient = new ServerConnectionHandler(newSocket);
|
ServerConnectionHandler newClient = new ServerConnectionHandler(newSocket);
|
||||||
clientMap.put(newSocket.getInetAddress().getHostAddress(), newClient);
|
clientMap.put(newSocket.getInetAddress().getHostAddress(), newClient);
|
||||||
new Thread(newClient).start();
|
new Thread(newClient).start();
|
||||||
|
} catch (SocketException ex){
|
||||||
|
LoggerInterface.loggerNetworking.ERROR("Socket closed!",ex);
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
LoggerInterface.loggerNetworking.ERROR("Socket error on client socket!",ex);
|
LoggerInterface.loggerNetworking.ERROR("Socket error on client socket!",ex);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -306,13 +306,12 @@ public class RenderingEngine {
|
|||||||
Globals.WINDOW_HEIGHT = bufferHeight;
|
Globals.WINDOW_HEIGHT = bufferHeight;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Attack controls callbacks
|
// Attach controls callbacks
|
||||||
//
|
//
|
||||||
//set key callback
|
//set key callback
|
||||||
GLFW.glfwSetKeyCallback(Globals.window, Globals.controlCallback);
|
GLFW.glfwSetKeyCallback(Globals.window, Globals.controlCallback);
|
||||||
|
|
||||||
//set mouse callback
|
|
||||||
GLFW.glfwSetMouseButtonCallback(Globals.window, Globals.mouseCallback);
|
GLFW.glfwSetMouseButtonCallback(Globals.window, Globals.mouseCallback);
|
||||||
|
GLFW.glfwSetScrollCallback(Globals.window, Globals.scrollCallback);
|
||||||
|
|
||||||
//get title bar dimensions
|
//get title bar dimensions
|
||||||
// setTitleBarDimensions();
|
// setTitleBarDimensions();
|
||||||
|
|||||||
@ -34,11 +34,22 @@ public class DebugRendering {
|
|||||||
public static void drawUIBoundsWireframe(){
|
public static void drawUIBoundsWireframe(){
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
||||||
|
|
||||||
|
int parentPosX = 0;
|
||||||
|
int parentPosY = 0;
|
||||||
for(Element currentElement : Globals.elementManager.getWindowList()){
|
for(Element currentElement : Globals.elementManager.getWindowList()){
|
||||||
if(currentElement instanceof DrawableElement){
|
if(currentElement instanceof DrawableElement){
|
||||||
DrawableElement drawable = (DrawableElement) currentElement;
|
DrawableElement drawable = (DrawableElement) currentElement;
|
||||||
if(drawable.getVisible()){
|
if(drawable.getVisible()){
|
||||||
drawable.draw(Globals.renderingEngine.getRenderPipelineState(),Globals.renderingEngine.getOpenGLState(),RenderingEngine.GL_DEFAULT_FRAMEBUFFER, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT);
|
drawable.draw(
|
||||||
|
Globals.renderingEngine.getRenderPipelineState(),
|
||||||
|
Globals.renderingEngine.getOpenGLState(),
|
||||||
|
RenderingEngine.GL_DEFAULT_FRAMEBUFFER,
|
||||||
|
parentPosX,
|
||||||
|
parentPosY,
|
||||||
|
Globals.WINDOW_WIDTH,
|
||||||
|
Globals.WINDOW_HEIGHT
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import electrosphere.renderer.OpenGLState;
|
|||||||
import electrosphere.renderer.RenderPipelineState;
|
import electrosphere.renderer.RenderPipelineState;
|
||||||
import electrosphere.renderer.RenderingEngine;
|
import electrosphere.renderer.RenderingEngine;
|
||||||
import electrosphere.renderer.texture.Texture;
|
import electrosphere.renderer.texture.Texture;
|
||||||
|
import electrosphere.renderer.ui.Window;
|
||||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.Element;
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
|
|
||||||
@ -63,12 +64,16 @@ public class UIPipeline implements RenderPipeline {
|
|||||||
renderPipelineState.setUseBones(false);
|
renderPipelineState.setUseBones(false);
|
||||||
renderPipelineState.setUseLight(false);
|
renderPipelineState.setUseLight(false);
|
||||||
|
|
||||||
|
//the initial parent position values
|
||||||
|
int parentPosX = 0;
|
||||||
|
int parentPosY = 0;
|
||||||
|
|
||||||
openGLState.glDepthTest(false);
|
openGLState.glDepthTest(false);
|
||||||
for(Element currentElement : Globals.elementManager.getWindowList()){
|
for(Element currentElement : Globals.elementManager.getWindowList()){
|
||||||
if(currentElement instanceof DrawableElement){
|
if(currentElement instanceof DrawableElement){
|
||||||
DrawableElement drawable = (DrawableElement) currentElement;
|
DrawableElement drawable = (DrawableElement) currentElement;
|
||||||
if(drawable.getVisible()){
|
if(drawable.getVisible()){
|
||||||
drawable.draw(renderPipelineState, openGLState, RenderingEngine.GL_DEFAULT_FRAMEBUFFER, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT);
|
drawable.draw(renderPipelineState, openGLState, RenderingEngine.GL_DEFAULT_FRAMEBUFFER, parentPosX, parentPosY, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
package electrosphere.renderer.ui;
|
package electrosphere.renderer.ui;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.ListIterator;
|
import java.util.ListIterator;
|
||||||
@ -19,7 +18,6 @@ import electrosphere.renderer.ui.events.DragEvent;
|
|||||||
import electrosphere.renderer.ui.events.Event;
|
import electrosphere.renderer.ui.events.Event;
|
||||||
import electrosphere.renderer.ui.events.FocusEvent;
|
import electrosphere.renderer.ui.events.FocusEvent;
|
||||||
import electrosphere.renderer.ui.events.HoverEvent;
|
import electrosphere.renderer.ui.events.HoverEvent;
|
||||||
import electrosphere.renderer.ui.events.MouseEvent;
|
|
||||||
import electrosphere.renderer.ui.events.NavigationEvent;
|
import electrosphere.renderer.ui.events.NavigationEvent;
|
||||||
import electrosphere.renderer.ui.events.DragEvent.DragEventType;
|
import electrosphere.renderer.ui.events.DragEvent.DragEventType;
|
||||||
import electrosphere.renderer.ui.events.NavigationEvent.NavigationEventType;
|
import electrosphere.renderer.ui.events.NavigationEvent.NavigationEventType;
|
||||||
@ -52,6 +50,10 @@ public class ElementManager {
|
|||||||
return elementMap.get(name);
|
return elementMap.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the list of all registered windows
|
||||||
|
* @return The list of all registered windows
|
||||||
|
*/
|
||||||
public List<Element> getWindowList(){
|
public List<Element> getWindowList(){
|
||||||
return elementList;
|
return elementList;
|
||||||
}
|
}
|
||||||
@ -137,6 +139,24 @@ public class ElementManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a specific element to be focused
|
||||||
|
* @param focusableElement The focusable element
|
||||||
|
*/
|
||||||
|
public void focusElement(FocusableElement focusableElement){
|
||||||
|
if(currentFocusedElement != null){
|
||||||
|
currentFocusedElement.handleEvent(new FocusEvent(false));
|
||||||
|
}
|
||||||
|
this.currentFocusedElement = focusableElement;
|
||||||
|
focusableElement.handleEvent(new FocusEvent(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fires an event at a given position
|
||||||
|
* @param event The event
|
||||||
|
* @param x the x coordinate of the position
|
||||||
|
* @param y the y coordinate of the position
|
||||||
|
*/
|
||||||
public void fireEvent(Event event, int x, int y){
|
public void fireEvent(Event event, int x, int y){
|
||||||
boolean propagate = true;
|
boolean propagate = true;
|
||||||
ListIterator<Element> windowIterator = elementList.listIterator(elementList.size());
|
ListIterator<Element> windowIterator = elementList.listIterator(elementList.size());
|
||||||
@ -149,18 +169,32 @@ public class ElementManager {
|
|||||||
propagate = currentElement.handleEvent(event);
|
propagate = currentElement.handleEvent(event);
|
||||||
}
|
}
|
||||||
if(!propagate){
|
if(!propagate){
|
||||||
|
currentWindow.applyYoga();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursively uilds a stack of elements at a given position based on their depth into the tree
|
||||||
|
* @param inputStack The empty stack to fill
|
||||||
|
* @param current The current element
|
||||||
|
* @param x the x position to query
|
||||||
|
* @param y the y position to query
|
||||||
|
* @param offsetX the x offset accumulated
|
||||||
|
* @param offsetY the y offset accumulated
|
||||||
|
* @return the stack, filled with all relevant elements
|
||||||
|
*/
|
||||||
Stack<Element> buildElementPositionalStack(Stack<Element> inputStack, Element current, int x, int y, int offsetX, int offsetY){
|
Stack<Element> buildElementPositionalStack(Stack<Element> inputStack, Element current, int x, int y, int offsetX, int offsetY){
|
||||||
inputStack.push(current);
|
inputStack.push(current);
|
||||||
if(current instanceof ContainerElement){
|
if(current instanceof ContainerElement){
|
||||||
|
ContainerElement container = (ContainerElement)current;
|
||||||
|
int xLoc = x - container.getInternalX() - container.getChildOffsetX();
|
||||||
|
int yLoc = y - container.getInternalY() - container.getChildOffsetY();
|
||||||
for(Element el : ((ContainerElement)current).getChildren()){
|
for(Element el : ((ContainerElement)current).getChildren()){
|
||||||
//if contains x,y, call function on el
|
//if contains x,y, call function on el
|
||||||
if(elementContainsPoint(el,x,y)){
|
if(elementContainsPoint(el,xLoc,yLoc,offsetX,offsetY)){
|
||||||
buildElementPositionalStack(inputStack, el, x, y, offsetX + el.getPositionX(), offsetY + el.getPositionY());
|
buildElementPositionalStack(inputStack, el, xLoc, yLoc, offsetX, offsetY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -212,12 +246,12 @@ public class ElementManager {
|
|||||||
* @param y the y component of the coordinate
|
* @param y the y component of the coordinate
|
||||||
* @return True if it contains that point, false otherwise
|
* @return True if it contains that point, false otherwise
|
||||||
*/
|
*/
|
||||||
boolean elementContainsPoint(Element el, int x, int y){
|
boolean elementContainsPoint(Element el, int x, int y, int offsetX, int offsetY){
|
||||||
return
|
return
|
||||||
x >= el.getPositionX() &&
|
x >= el.getInternalX() + offsetX &&
|
||||||
x <= el.getPositionX() + el.getWidth() &&
|
x <= el.getInternalX() + offsetX + el.getInternalWidth() &&
|
||||||
y >= el.getPositionY() &&
|
y >= el.getInternalY() + offsetY &&
|
||||||
y <= el.getPositionY() + el.getHeight();
|
y <= el.getInternalY() + offsetY + el.getInternalHeight();
|
||||||
}
|
}
|
||||||
|
|
||||||
// public void click(MouseEvent event){
|
// public void click(MouseEvent event){
|
||||||
|
|||||||
@ -124,7 +124,7 @@ public class WidgetUtils {
|
|||||||
int x = Globals.WINDOW_WIDTH - width;
|
int x = Globals.WINDOW_WIDTH - width;
|
||||||
int y = Globals.WINDOW_HEIGHT - height;
|
int y = Globals.WINDOW_HEIGHT - height;
|
||||||
// Window rVal = new Window(x, 10, 100, 20);
|
// Window rVal = new Window(x, 10, 100, 20);
|
||||||
Window rVal = new Window(x,y,width,height);
|
Window rVal = new Window(x,y,width,height,true);
|
||||||
// Window rVal = new Window(100,100,100,100);
|
// Window rVal = new Window(100,100,100,100);
|
||||||
// System.out.println(x + " " + y + " " + width + " " + height);
|
// System.out.println(x + " " + y + " " + width + " " + height);
|
||||||
// LayoutSchemeListScrollable rVal = new LayoutSchemeListScrollable(x, y, width, height, true);
|
// LayoutSchemeListScrollable rVal = new LayoutSchemeListScrollable(x, y, width, height, true);
|
||||||
@ -133,13 +133,13 @@ public class WidgetUtils {
|
|||||||
// Widget rVal = WidgetUtils.createTextBox(x, y, width, height, 4, 1, "MENU", true);
|
// Widget rVal = WidgetUtils.createTextBox(x, y, width, height, 4, 1, "MENU", true);
|
||||||
|
|
||||||
//the actual "menu" label
|
//the actual "menu" label
|
||||||
Label menuLabel = new Label(0,0,0.3f);
|
Label menuLabel = new Label(0.3f);
|
||||||
menuLabel.setText("Menu");
|
menuLabel.setText("Menu");
|
||||||
menuLabel.setVisible(true);
|
menuLabel.setVisible(true);
|
||||||
rVal.addChild(menuLabel);
|
rVal.addChild(menuLabel);
|
||||||
|
|
||||||
//label telling player what key they have their menu bound to
|
//label telling player what key they have their menu bound to
|
||||||
Label keyCodeLabel = new Label(0,10,0.3f);
|
Label keyCodeLabel = new Label(0.3f);
|
||||||
keyCodeLabel.setText(ControlHandler.convertKeycodeToName(Globals.controlHandler.getControl(ControlHandler.DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU).getKeyValue()));
|
keyCodeLabel.setText(ControlHandler.convertKeycodeToName(Globals.controlHandler.getControl(ControlHandler.DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU).getKeyValue()));
|
||||||
keyCodeLabel.setVisible(true);
|
keyCodeLabel.setVisible(true);
|
||||||
rVal.addChild(keyCodeLabel);
|
rVal.addChild(keyCodeLabel);
|
||||||
@ -152,7 +152,9 @@ public class WidgetUtils {
|
|||||||
|
|
||||||
public static Button createLabelButton(String label, int posX, int posY, float fontSize, ClickableElement.ClickEventCallback callback){
|
public static Button createLabelButton(String label, int posX, int posY, float fontSize, ClickableElement.ClickEventCallback callback){
|
||||||
Button rVal = new Button();
|
Button rVal = new Button();
|
||||||
Label buttonLabel = new Label(posX,posY,fontSize);
|
Label buttonLabel = new Label(fontSize);
|
||||||
|
rVal.setPositionX(posX);
|
||||||
|
rVal.setPositionY(posY);
|
||||||
buttonLabel.setText(label);
|
buttonLabel.setText(label);
|
||||||
rVal.addChild(buttonLabel);
|
rVal.addChild(buttonLabel);
|
||||||
rVal.setOnClick(callback);
|
rVal.setOnClick(callback);
|
||||||
|
|||||||
@ -11,6 +11,9 @@ import java.util.LinkedList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
|
import org.lwjgl.util.yoga.YGLayout;
|
||||||
|
import org.lwjgl.util.yoga.YGNode;
|
||||||
|
import org.lwjgl.util.yoga.Yoga;
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.logger.LoggerInterface;
|
import electrosphere.logger.LoggerInterface;
|
||||||
@ -21,6 +24,7 @@ import electrosphere.renderer.framebuffer.Framebuffer;
|
|||||||
import electrosphere.renderer.framebuffer.FramebufferUtils;
|
import electrosphere.renderer.framebuffer.FramebufferUtils;
|
||||||
import electrosphere.renderer.model.Material;
|
import electrosphere.renderer.model.Material;
|
||||||
import electrosphere.renderer.model.Model;
|
import electrosphere.renderer.model.Model;
|
||||||
|
import electrosphere.renderer.texture.Texture;
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.Element;
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
@ -29,8 +33,7 @@ import electrosphere.renderer.ui.events.Event;
|
|||||||
import electrosphere.renderer.ui.events.NavigationEvent;
|
import electrosphere.renderer.ui.events.NavigationEvent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* A window
|
||||||
* @author amaterasu
|
|
||||||
*/
|
*/
|
||||||
public class Window implements DrawableElement, ContainerElement, NavigableElement {
|
public class Window implements DrawableElement, ContainerElement, NavigableElement {
|
||||||
List<Element> childList = new LinkedList<Element>();
|
List<Element> childList = new LinkedList<Element>();
|
||||||
@ -45,53 +48,91 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme
|
|||||||
NavigationEventCallback navCallback;
|
NavigationEventCallback navCallback;
|
||||||
|
|
||||||
static final Vector3f windowDrawDebugColor = new Vector3f(1.0f,0.0f,0.0f);
|
static final Vector3f windowDrawDebugColor = new Vector3f(1.0f,0.0f,0.0f);
|
||||||
|
|
||||||
|
//controls whether to show window decorations (ie the frame)
|
||||||
|
boolean showDecorations = true;
|
||||||
|
|
||||||
public Window(int positionX, int positionY, int width, int height){
|
/**
|
||||||
//TODO: figure out why this has to be 1920x1080
|
* Constructor
|
||||||
|
* @param showDecorations
|
||||||
|
* @param positionX
|
||||||
|
* @param positionY
|
||||||
|
* @param width
|
||||||
|
* @param height
|
||||||
|
*/
|
||||||
|
public Window(int positionX, int positionY, int width, int height, boolean showDecorations){
|
||||||
widgetBuffer = FramebufferUtils.generateTextureFramebuffer(width, height);
|
widgetBuffer = FramebufferUtils.generateTextureFramebuffer(width, height);
|
||||||
// widgetBuffer = FramebufferUtils.generateScreensizeTextureFramebuffer();
|
|
||||||
customMat.setTexturePointer(widgetBuffer.getTexturePointer());
|
customMat.setTexturePointer(widgetBuffer.getTexturePointer());
|
||||||
// customMat.setTexturePointer(Globals.assetManager.fetchTexture("Textures/Testing1.png").getTexturePointer());
|
|
||||||
float ndcWidth = (float)width/Globals.WINDOW_WIDTH;
|
float ndcWidth = (float)width/Globals.WINDOW_WIDTH;
|
||||||
float ndcHeight = (float)height/Globals.WINDOW_HEIGHT;
|
float ndcHeight = (float)height/Globals.WINDOW_HEIGHT;
|
||||||
float ndcX = (float)positionX/Globals.WINDOW_WIDTH;
|
float ndcX = (float)positionX/Globals.WINDOW_WIDTH;
|
||||||
float ndcY = (float)positionY/Globals.WINDOW_HEIGHT;
|
float ndcY = (float)positionY/Globals.WINDOW_HEIGHT;
|
||||||
this.width = width;
|
|
||||||
this.height = height;
|
|
||||||
boxPosition = new Vector3f(ndcX,ndcY,0);
|
boxPosition = new Vector3f(ndcX,ndcY,0);
|
||||||
boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
||||||
|
this.showDecorations = showDecorations;
|
||||||
|
this.yogaNode = Yoga.YGNodeNew();
|
||||||
|
this.layout = YGNode.create(this.yogaNode).layout();
|
||||||
|
this.setWidth(width);
|
||||||
|
this.setHeight(height);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentWidth, int parentHeight) {
|
public void draw(
|
||||||
|
RenderPipelineState renderPipelineState,
|
||||||
|
OpenGLState openGLState,
|
||||||
|
int parentFramebufferPointer,
|
||||||
|
int parentPosX,
|
||||||
|
int parentPosY,
|
||||||
|
int parentWidth,
|
||||||
|
int parentHeight
|
||||||
|
) {
|
||||||
|
|
||||||
widgetBuffer.bind();
|
widgetBuffer.bind();
|
||||||
openGLState.glViewport(width, height);
|
openGLState.glViewport(width, height);
|
||||||
|
|
||||||
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
|
//grab assets required to render window
|
||||||
|
Model planeModel = Globals.assetManager.fetchModel(Globals.imagePlaneModelID);
|
||||||
|
Texture windowFrame = Globals.assetManager.fetchTexture("Textures/ui/uiFrame1.png");
|
||||||
|
|
||||||
for(Element child : childList){
|
for(Element child : childList){
|
||||||
if(child instanceof DrawableElement){
|
if(child instanceof DrawableElement){
|
||||||
DrawableElement drawableChild = (DrawableElement) child;
|
DrawableElement drawableChild = (DrawableElement) child;
|
||||||
drawableChild.draw(renderPipelineState,openGLState,widgetBuffer.getFramebufferPointer(),width,height);
|
drawableChild.draw(renderPipelineState,openGLState,widgetBuffer.getFramebufferPointer(),parentPosX,parentPosY,width,height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//this call binds the screen as the "texture" we're rendering to
|
//this call binds the screen as the "texture" we're rendering to
|
||||||
//have to call before actually rendering
|
//have to call before actually rendering
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, parentFramebufferPointer);
|
glBindFramebuffer(GL_FRAMEBUFFER, parentFramebufferPointer);
|
||||||
openGLState.glViewport(parentWidth, parentHeight);
|
openGLState.glViewport(parentWidth, parentHeight);
|
||||||
|
|
||||||
|
//error if assets are null
|
||||||
|
if(planeModel == null || windowFrame == null){
|
||||||
|
LoggerInterface.loggerRenderer.ERROR("Window unable to find plane model or window frame!!", new Exception());
|
||||||
|
}
|
||||||
|
|
||||||
|
//render background of window
|
||||||
|
if(planeModel != null && windowFrame != null && showDecorations){
|
||||||
|
planeModel.pushUniformToMesh("plane", "mPosition", boxPosition);
|
||||||
|
planeModel.pushUniformToMesh("plane", "mDimension", boxDimensions);
|
||||||
|
planeModel.pushUniformToMesh("plane", "tPosition", texPosition);
|
||||||
|
planeModel.pushUniformToMesh("plane", "tDimension", texScale);
|
||||||
|
customMat.setTexturePointer(windowFrame.getTexturePointer());
|
||||||
|
planeModel.getMeshes().get(0).setMaterial(customMat);
|
||||||
|
planeModel.drawUI();
|
||||||
|
}
|
||||||
|
|
||||||
Model planeModel = Globals.assetManager.fetchModel(Globals.imagePlaneModelID);
|
//render content of window
|
||||||
if(planeModel != null){
|
if(planeModel != null){
|
||||||
planeModel.pushUniformToMesh("plane", "mPosition", boxPosition);
|
planeModel.pushUniformToMesh("plane", "mPosition", boxPosition);
|
||||||
planeModel.pushUniformToMesh("plane", "mDimension", boxDimensions);
|
planeModel.pushUniformToMesh("plane", "mDimension", boxDimensions);
|
||||||
planeModel.pushUniformToMesh("plane", "tPosition", texPosition);
|
planeModel.pushUniformToMesh("plane", "tPosition", texPosition);
|
||||||
planeModel.pushUniformToMesh("plane", "tDimension", texScale);
|
planeModel.pushUniformToMesh("plane", "tDimension", texScale);
|
||||||
|
customMat.setTexturePointer(widgetBuffer.getTexturePointer());
|
||||||
planeModel.getMeshes().get(0).setMaterial(customMat);
|
planeModel.getMeshes().get(0).setMaterial(customMat);
|
||||||
planeModel.drawUI();
|
planeModel.drawUI();
|
||||||
} else {
|
|
||||||
LoggerInterface.loggerRenderer.ERROR("Window unable to find plane model!!", new Exception());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Globals.RENDER_FLAG_RENDER_UI_BOUNDS && DebugRendering.RENDER_DEBUG_OUTLINE_WINDOW){
|
if(Globals.RENDER_FLAG_RENDER_UI_BOUNDS && DebugRendering.RENDER_DEBUG_OUTLINE_WINDOW){
|
||||||
@ -99,13 +140,30 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void pack() {
|
/**
|
||||||
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
* Destroys the element
|
||||||
|
*/
|
||||||
|
public void destroy(){
|
||||||
|
for(Element el : getChildren()){
|
||||||
|
el.destroy();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clears all children
|
||||||
|
*/
|
||||||
|
public void clear(){
|
||||||
|
for(Element el : getChildren()){
|
||||||
|
Yoga.YGNodeRemoveChild(this.yogaNode,el.getYogaNode());
|
||||||
|
el.destroy();
|
||||||
|
}
|
||||||
|
getChildren().clear();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setWidth(int width){
|
public void setWidth(int width){
|
||||||
this.width = width;
|
this.width = width;
|
||||||
|
Yoga.YGNodeStyleSetWidth(this.yogaNode, width);
|
||||||
for(Element child : childList){
|
for(Element child : childList){
|
||||||
if(child instanceof DrawableElement){
|
if(child instanceof DrawableElement){
|
||||||
DrawableElement drawableChild = (DrawableElement) child;
|
DrawableElement drawableChild = (DrawableElement) child;
|
||||||
@ -118,6 +176,7 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme
|
|||||||
@Override
|
@Override
|
||||||
public void setHeight(int height){
|
public void setHeight(int height){
|
||||||
this.height = height;
|
this.height = height;
|
||||||
|
Yoga.YGNodeStyleSetHeight(this.yogaNode, height);
|
||||||
for(Element child : childList){
|
for(Element child : childList){
|
||||||
if(child instanceof DrawableElement){
|
if(child instanceof DrawableElement){
|
||||||
DrawableElement drawableChild = (DrawableElement) child;
|
DrawableElement drawableChild = (DrawableElement) child;
|
||||||
@ -126,6 +185,26 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMaxWidth(int width) {
|
||||||
|
Yoga.YGNodeStyleSetMaxWidth(yogaNode, width);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMaxHeight(int height) {
|
||||||
|
Yoga.YGNodeStyleSetMaxHeight(yogaNode, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMinWidth(int width) {
|
||||||
|
Yoga.YGNodeStyleSetMinWidth(yogaNode, width);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMinHeight(int height) {
|
||||||
|
Yoga.YGNodeStyleSetMinHeight(yogaNode, height);
|
||||||
|
}
|
||||||
|
|
||||||
// public void setTextureCoord(int x, int y){
|
// public void setTextureCoord(int x, int y){
|
||||||
// float ndcX = (float)x/Globals.WINDOW_WIDTH;
|
// float ndcX = (float)x/Globals.WINDOW_WIDTH;
|
||||||
@ -147,6 +226,11 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme
|
|||||||
|
|
||||||
public int parentWidth = 1;
|
public int parentWidth = 1;
|
||||||
public int parentHeight = 1;
|
public int parentHeight = 1;
|
||||||
|
|
||||||
|
int marginTop = 0;
|
||||||
|
int marginRight = 0;
|
||||||
|
int marginBottom = 0;
|
||||||
|
int marginLeft = 0;
|
||||||
|
|
||||||
public boolean visible = false;
|
public boolean visible = false;
|
||||||
|
|
||||||
@ -184,6 +268,38 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme
|
|||||||
this.positionY = positionY;
|
this.positionY = positionY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getMarginTop(){
|
||||||
|
return marginTop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMarginRight(){
|
||||||
|
return marginRight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMarginBottom(){
|
||||||
|
return marginBottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMarginLeft(){
|
||||||
|
return marginLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMarginTop(int marginTop){
|
||||||
|
this.marginTop = marginTop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMarginRight(int marginRight){
|
||||||
|
this.marginRight = marginRight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMarginBottom(int marginBottom){
|
||||||
|
this.marginBottom = marginBottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMarginLeft(int marginLeft){
|
||||||
|
this.marginLeft = marginLeft;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setParentWidth(int width) {
|
public void setParentWidth(int width) {
|
||||||
this.width = width;
|
this.width = width;
|
||||||
@ -194,6 +310,62 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme
|
|||||||
this.height = height;
|
this.height = height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//the yoga node id
|
||||||
|
long yogaNode = -1;
|
||||||
|
//the layout object
|
||||||
|
YGLayout layout;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getYogaNode() {
|
||||||
|
return yogaNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void applyYoga() {
|
||||||
|
//calculate yoga layout
|
||||||
|
Yoga.YGNodeCalculateLayout(yogaNode, width, height, Yoga.YGFlexDirectionColumn);
|
||||||
|
//apply yoga values to all children
|
||||||
|
LoggerInterface.loggerUI.INFO("==Apply yoga to windoow==");
|
||||||
|
for(Element child : this.getChildren()){
|
||||||
|
child.applyYoga();
|
||||||
|
}
|
||||||
|
// //get the values from yoga
|
||||||
|
// float leftRaw = layout.positions(Yoga.YGEdgeLeft);
|
||||||
|
// float topRaw = layout.positions(Yoga.YGEdgeTop);
|
||||||
|
// float widthRaw = layout.dimensions(Yoga.YGDimensionWidth);
|
||||||
|
// float heightRaw = layout.dimensions(Yoga.YGDimensionHeight);
|
||||||
|
// //apply the values to this component
|
||||||
|
// this.setPositionX((int)leftRaw + this.getMarginLeft());
|
||||||
|
// this.setPositionY((int)topRaw + this.getMarginTop());
|
||||||
|
// this.setWidth((int)widthRaw - this.getMarginLeft() - this.getMarginRight());
|
||||||
|
// this.setHeight((int)heightRaw - this.getMarginTop() - this.getMarginBottom());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setDirection(int layout) {
|
||||||
|
Yoga.YGNodeStyleSetDirection(yogaNode, Yoga.YGFlexDirectionColumn);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setFlexDirection(int layout){
|
||||||
|
Yoga.YGNodeStyleSetFlexDirection(yogaNode, layout);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setJustifyContent(int justification){
|
||||||
|
Yoga.YGNodeStyleSetJustifyContent(this.yogaNode, justification);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setAlignItems(int alignment){
|
||||||
|
Yoga.YGNodeStyleSetAlignItems(this.yogaNode, alignment);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setAlignContent(int alignment){
|
||||||
|
Yoga.YGNodeStyleSetAlignContent(this.yogaNode, alignment);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addChild(Element child) {
|
public void addChild(Element child) {
|
||||||
childList.add(child);
|
childList.add(child);
|
||||||
@ -202,6 +374,7 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme
|
|||||||
drawableChild.setParentWidth(width);
|
drawableChild.setParentWidth(width);
|
||||||
drawableChild.setParentHeight(height);
|
drawableChild.setParentHeight(height);
|
||||||
drawableChild.setVisible(false);
|
drawableChild.setVisible(false);
|
||||||
|
Yoga.YGNodeInsertChild(yogaNode, drawableChild.getYogaNode(), childList.size() - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,6 +386,7 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme
|
|||||||
@Override
|
@Override
|
||||||
public void removeChild(Element child) {
|
public void removeChild(Element child) {
|
||||||
childList.remove(child);
|
childList.remove(child);
|
||||||
|
Yoga.YGNodeRemoveChild(yogaNode, child.getYogaNode());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean handleEvent(Event event){
|
public boolean handleEvent(Event event){
|
||||||
@ -230,4 +404,44 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme
|
|||||||
navCallback = callback;
|
navCallback = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getInternalX() {
|
||||||
|
return positionX;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getInternalY() {
|
||||||
|
return positionY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getInternalWidth() {
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getInternalHeight() {
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getChildOffsetX(){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getChildOffsetY(){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getChildScaleX(){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getChildScaleY(){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,20 +2,14 @@ package electrosphere.renderer.ui.elements;
|
|||||||
|
|
||||||
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
||||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
||||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_TEST;
|
|
||||||
import static org.lwjgl.opengl.GL11.GL_LESS;
|
import static org.lwjgl.opengl.GL11.GL_LESS;
|
||||||
import static org.lwjgl.opengl.GL11.glClear;
|
import static org.lwjgl.opengl.GL11.glClear;
|
||||||
import static org.lwjgl.opengl.GL11.glClearColor;
|
import static org.lwjgl.opengl.GL11.glClearColor;
|
||||||
import static org.lwjgl.opengl.GL11.glDepthFunc;
|
|
||||||
import static org.lwjgl.opengl.GL11.glDepthMask;
|
import static org.lwjgl.opengl.GL11.glDepthMask;
|
||||||
import static org.lwjgl.opengl.GL11.glDisable;
|
|
||||||
import static org.lwjgl.opengl.GL11.glEnable;
|
|
||||||
import static org.lwjgl.opengl.GL11.glViewport;
|
|
||||||
import static org.lwjgl.opengl.GL30.GL_FRAMEBUFFER;
|
import static org.lwjgl.opengl.GL30.GL_FRAMEBUFFER;
|
||||||
import static org.lwjgl.opengl.GL30.glBindFramebuffer;
|
import static org.lwjgl.opengl.GL30.glBindFramebuffer;
|
||||||
|
|
||||||
import org.joml.Matrix4d;
|
import org.joml.Matrix4d;
|
||||||
import org.joml.Matrix4f;
|
|
||||||
import org.joml.Quaterniond;
|
import org.joml.Quaterniond;
|
||||||
import org.joml.Vector3d;
|
import org.joml.Vector3d;
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
@ -37,7 +31,7 @@ import electrosphere.renderer.ui.events.DragEvent;
|
|||||||
import electrosphere.renderer.ui.events.DragEvent.DragEventType;
|
import electrosphere.renderer.ui.events.DragEvent.DragEventType;
|
||||||
import electrosphere.renderer.ui.events.Event;
|
import electrosphere.renderer.ui.events.Event;
|
||||||
|
|
||||||
public class ActorPanel implements DrawableElement, DraggableElement {
|
public class ActorPanel extends StandardElement implements DrawableElement, DraggableElement {
|
||||||
|
|
||||||
Material customMat = new Material();
|
Material customMat = new Material();
|
||||||
Framebuffer elementBuffer;
|
Framebuffer elementBuffer;
|
||||||
@ -62,6 +56,7 @@ public class ActorPanel implements DrawableElement, DraggableElement {
|
|||||||
static final Vector3f windowDrawDebugColor = new Vector3f(0.0f,0.0f,1.0f);
|
static final Vector3f windowDrawDebugColor = new Vector3f(0.0f,0.0f,1.0f);
|
||||||
|
|
||||||
public ActorPanel(int x, int y, int width, int height, Actor actor){
|
public ActorPanel(int x, int y, int width, int height, Actor actor){
|
||||||
|
super();
|
||||||
elementBuffer = FramebufferUtils.generateTextureFramebuffer(width, height);
|
elementBuffer = FramebufferUtils.generateTextureFramebuffer(width, height);
|
||||||
customMat.setTexturePointer(elementBuffer.getTexturePointer());
|
customMat.setTexturePointer(elementBuffer.getTexturePointer());
|
||||||
this.actor = actor;
|
this.actor = actor;
|
||||||
@ -76,7 +71,15 @@ public class ActorPanel implements DrawableElement, DraggableElement {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentWidth, int parentHeight) {
|
public void draw(
|
||||||
|
RenderPipelineState renderPipelineState,
|
||||||
|
OpenGLState openGLState,
|
||||||
|
int parentFramebufferPointer,
|
||||||
|
int parentPosX,
|
||||||
|
int parentPosY,
|
||||||
|
int parentWidth,
|
||||||
|
int parentHeight
|
||||||
|
) {
|
||||||
|
|
||||||
elementBuffer.bind();
|
elementBuffer.bind();
|
||||||
// Globals.renderingEngine.setViewportSize(width, height);
|
// Globals.renderingEngine.setViewportSize(width, height);
|
||||||
@ -144,10 +147,6 @@ public class ActorPanel implements DrawableElement, DraggableElement {
|
|||||||
Vector3f boxPosition = new Vector3f(ndcX,ndcY,0);
|
Vector3f boxPosition = new Vector3f(ndcX,ndcY,0);
|
||||||
Vector3f boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
Vector3f boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
||||||
|
|
||||||
openGLState.setActiveShader(
|
|
||||||
renderPipelineState,
|
|
||||||
Globals.assetManager.fetchShader("Shaders/ui/windowContent/windowContent.vs", null, "Shaders/ui/windowContent/windowContent.fs")
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -156,7 +155,7 @@ public class ActorPanel implements DrawableElement, DraggableElement {
|
|||||||
//
|
//
|
||||||
// Set rendering engine state
|
// Set rendering engine state
|
||||||
//
|
//
|
||||||
renderPipelineState.setUseMeshShader(false);
|
renderPipelineState.setUseMeshShader(true);
|
||||||
renderPipelineState.setBufferStandardUniforms(false);
|
renderPipelineState.setBufferStandardUniforms(false);
|
||||||
renderPipelineState.setBufferNonStandardUniforms(true);
|
renderPipelineState.setBufferNonStandardUniforms(true);
|
||||||
renderPipelineState.setUseMaterial(true);
|
renderPipelineState.setUseMaterial(true);
|
||||||
@ -185,65 +184,18 @@ public class ActorPanel implements DrawableElement, DraggableElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int width = 1;
|
|
||||||
public int height = 1;
|
|
||||||
|
|
||||||
public int positionX = 0;
|
|
||||||
public int positionY = 0;
|
|
||||||
|
|
||||||
public int parentWidth = 1;
|
|
||||||
public int parentHeight = 1;
|
|
||||||
|
|
||||||
public boolean visible = false;
|
public boolean visible = false;
|
||||||
|
|
||||||
public int getWidth() {
|
|
||||||
return width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getHeight() {
|
|
||||||
return height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionX() {
|
|
||||||
return positionX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionY() {
|
|
||||||
return positionY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getVisible() {
|
|
||||||
return visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setWidth(int width) {
|
|
||||||
this.width = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHeight(int height) {
|
|
||||||
this.height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionX(int positionX) {
|
|
||||||
this.positionX = positionX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionY(int positionY) {
|
|
||||||
this.positionY = positionY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setVisible(boolean draw) {
|
public void setVisible(boolean draw) {
|
||||||
this.visible = draw;
|
this.visible = draw;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setParentWidth(int width){
|
|
||||||
parentWidth = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setParentHeight(int height){
|
|
||||||
this.parentHeight = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public boolean getVisible(){
|
||||||
|
return this.visible;
|
||||||
|
}
|
||||||
|
|
||||||
public void setAnimation(String animation){
|
public void setAnimation(String animation){
|
||||||
currentAnim = animation;
|
currentAnim = animation;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
package electrosphere.renderer.ui.font.bitmapchar;
|
package electrosphere.renderer.ui.elements;
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.engine.assetmanager.AssetDataStrings;
|
import electrosphere.engine.assetmanager.AssetDataStrings;
|
||||||
@ -11,12 +11,12 @@ import electrosphere.renderer.ui.events.Event;
|
|||||||
import electrosphere.renderer.ui.font.Font;
|
import electrosphere.renderer.ui.font.Font;
|
||||||
// import electrosphere.renderer.ui.font.FontUtils;
|
// import electrosphere.renderer.ui.font.FontUtils;
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
|
import org.lwjgl.util.yoga.Yoga;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* A single character
|
||||||
* @author satellite
|
|
||||||
*/
|
*/
|
||||||
public class BitmapCharacter implements DrawableElement {
|
public class BitmapCharacter extends StandardElement implements DrawableElement {
|
||||||
|
|
||||||
String text;
|
String text;
|
||||||
|
|
||||||
@ -25,12 +25,19 @@ public class BitmapCharacter implements DrawableElement {
|
|||||||
Font font;
|
Font font;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
public BitmapCharacter(Font font, int posX, int posY, int width, int height, char toDraw){
|
* Constructor
|
||||||
this.positionX = posX;
|
* @param font
|
||||||
this.positionY = posY;
|
* @param posX
|
||||||
this.width = width;
|
* @param posY
|
||||||
this.height = height;
|
* @param width
|
||||||
|
* @param height
|
||||||
|
* @param toDraw
|
||||||
|
*/
|
||||||
|
public BitmapCharacter(Font font, int width, int height, char toDraw){
|
||||||
|
super();
|
||||||
|
setWidth(width);
|
||||||
|
setHeight(height);
|
||||||
this.text = "" + toDraw;
|
this.text = "" + toDraw;
|
||||||
this.font = font;
|
this.font = font;
|
||||||
}
|
}
|
||||||
@ -51,13 +58,21 @@ public class BitmapCharacter implements DrawableElement {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentWidth, int parentHeight){
|
public void draw(
|
||||||
|
RenderPipelineState renderPipelineState,
|
||||||
|
OpenGLState openGLState,
|
||||||
|
int parentFramebufferPointer,
|
||||||
|
int parentPosX,
|
||||||
|
int parentPosY,
|
||||||
|
int parentWidth,
|
||||||
|
int parentHeight
|
||||||
|
){
|
||||||
Globals.renderingEngine.bindFramebuffer(parentFramebufferPointer);
|
Globals.renderingEngine.bindFramebuffer(parentFramebufferPointer);
|
||||||
openGLState.glViewport(parentWidth, parentHeight);
|
openGLState.glViewport(parentWidth, parentHeight);
|
||||||
float ndcX = (float)positionX/parentWidth;
|
float ndcX = (float)(internalPositionX + parentPosX)/parentWidth;
|
||||||
float ndcY = (float)positionY/parentHeight;// + (float)Globals.WINDOW_TITLE_BAR_HEIGHT/parentHeight;
|
float ndcY = (float)(parentHeight - (internalPositionY + parentPosY))/parentHeight;
|
||||||
float ndcWidth = (float)width/parentWidth;
|
float ndcWidth = (float)internalWidth/parentWidth;
|
||||||
float ndcHeight = (float)height/parentHeight;
|
float ndcHeight = (float)internalHeight/parentHeight;
|
||||||
// float charWidth = ndcWidth/cols;
|
// float charWidth = ndcWidth/cols;
|
||||||
// float charHeight = ndcHeight/rows;
|
// float charHeight = ndcHeight/rows;
|
||||||
char toDraw = text.charAt(0);
|
char toDraw = text.charAt(0);
|
||||||
@ -82,68 +97,29 @@ public class BitmapCharacter implements DrawableElement {
|
|||||||
charModel.drawUI();
|
charModel.drawUI();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int width = 1;
|
|
||||||
public int height = 1;
|
|
||||||
|
|
||||||
public int positionX = 0;
|
|
||||||
public int positionY = 0;
|
|
||||||
|
|
||||||
public int parentWidth = 1;
|
|
||||||
public int parentHeight = 1;
|
|
||||||
|
|
||||||
public boolean visible = false;
|
public boolean visible = false;
|
||||||
|
|
||||||
public int getWidth() {
|
|
||||||
return width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getHeight() {
|
|
||||||
return height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionX() {
|
|
||||||
return positionX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionY() {
|
|
||||||
return positionY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getVisible() {
|
public boolean getVisible() {
|
||||||
return visible;
|
return visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setWidth(int width) {
|
|
||||||
this.width = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHeight(int height) {
|
|
||||||
this.height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionX(int positionX) {
|
|
||||||
this.positionX = positionX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionY(int positionY) {
|
|
||||||
this.positionY = positionY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setVisible(boolean draw) {
|
public void setVisible(boolean draw) {
|
||||||
this.visible = draw;
|
this.visible = draw;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setParentWidth(int width){
|
|
||||||
parentWidth = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setParentHeight(int height){
|
|
||||||
this.parentHeight = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean handleEvent(Event event){
|
public boolean handleEvent(Event event){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void applyYoga() {
|
||||||
|
//get the values from yoga
|
||||||
|
float leftRaw = Yoga.YGNodeLayoutGetLeft(yogaNode);
|
||||||
|
float topRaw = Yoga.YGNodeLayoutGetTop(yogaNode);
|
||||||
|
//apply the values to this component
|
||||||
|
this.internalPositionX = (int)leftRaw;
|
||||||
|
this.internalPositionY = (int)topRaw;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1,16 +1,17 @@
|
|||||||
package electrosphere.renderer.ui.elements;
|
package electrosphere.renderer.ui.elements;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
|
import org.lwjgl.opengl.GL30;
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
|
import electrosphere.logger.LoggerInterface;
|
||||||
import electrosphere.renderer.OpenGLState;
|
import electrosphere.renderer.OpenGLState;
|
||||||
import electrosphere.renderer.RenderPipelineState;
|
import electrosphere.renderer.RenderPipelineState;
|
||||||
import electrosphere.renderer.debug.DebugRendering;
|
import electrosphere.renderer.debug.DebugRendering;
|
||||||
|
import electrosphere.renderer.model.Material;
|
||||||
|
import electrosphere.renderer.model.Model;
|
||||||
|
import electrosphere.renderer.texture.Texture;
|
||||||
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
|
||||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.Element;
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
import electrosphere.renderer.ui.elementtypes.FocusableElement;
|
import electrosphere.renderer.ui.elementtypes.FocusableElement;
|
||||||
@ -21,19 +22,14 @@ import electrosphere.renderer.ui.events.FocusEvent;
|
|||||||
import electrosphere.renderer.ui.events.HoverEvent;
|
import electrosphere.renderer.ui.events.HoverEvent;
|
||||||
import electrosphere.renderer.ui.events.MouseEvent;
|
import electrosphere.renderer.ui.events.MouseEvent;
|
||||||
|
|
||||||
public class Button implements DrawableElement, FocusableElement, ContainerElement, ClickableElement, HoverableElement {
|
public class Button extends StandardContainerElement implements DrawableElement, FocusableElement, ClickableElement, HoverableElement {
|
||||||
|
|
||||||
List<Element> childList = new LinkedList<Element>();
|
Vector3f boxPosition = new Vector3f();
|
||||||
|
Vector3f boxDimensions = new Vector3f();
|
||||||
|
Vector3f texPosition = new Vector3f(0,0,0);
|
||||||
|
Vector3f texScale = new Vector3f(1,1,0);
|
||||||
|
Material customMat = new Material();
|
||||||
|
|
||||||
int width = -1;
|
|
||||||
int height = -1;
|
|
||||||
|
|
||||||
int positionX = -1;
|
|
||||||
int positionY = -1;
|
|
||||||
|
|
||||||
int parentWidth = 1;
|
|
||||||
int parentHeight = 1;
|
|
||||||
|
|
||||||
boolean visible = false;
|
boolean visible = false;
|
||||||
boolean focused = false;
|
boolean focused = false;
|
||||||
|
|
||||||
@ -44,140 +40,18 @@ public class Button implements DrawableElement, FocusableElement, ContainerEleme
|
|||||||
|
|
||||||
static final Vector3f windowDrawDebugColor = new Vector3f(1.0f,1.0f,1.0f);
|
static final Vector3f windowDrawDebugColor = new Vector3f(1.0f,1.0f,1.0f);
|
||||||
|
|
||||||
public int getWidth() {
|
public Button(){
|
||||||
if(width == -1){
|
super();
|
||||||
int minX = -1;
|
|
||||||
int maxX = -1;
|
|
||||||
for(Element child : childList){
|
|
||||||
if(minX == -1){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
} else if(child.getPositionX() < minX){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
}
|
|
||||||
if(maxX == -1){
|
|
||||||
maxX = child.getPositionX() + child.getWidth();
|
|
||||||
} else if(child.getPositionX() + child.getWidth() > maxX){
|
|
||||||
maxX = child.getPositionX() + child.getWidth();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minX == -1){
|
|
||||||
minX = 0;
|
|
||||||
}
|
|
||||||
if(maxX == -1){
|
|
||||||
maxX = 0;
|
|
||||||
}
|
|
||||||
return maxX - minX;
|
|
||||||
} else {
|
|
||||||
return width;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getHeight() {
|
|
||||||
if(height == -1){
|
|
||||||
int minY = -1;
|
|
||||||
int maxY = -1;
|
|
||||||
for(Element child : childList){
|
|
||||||
if(minY == -1){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
} else if(child.getPositionY() < minY){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
}
|
|
||||||
if(maxY == -1){
|
|
||||||
maxY = child.getPositionY() + child.getHeight();
|
|
||||||
} else if(child.getPositionY() + child.getHeight() > maxY){
|
|
||||||
maxY = child.getPositionY() + child.getHeight();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minY == -1){
|
|
||||||
minY = 0;
|
|
||||||
}
|
|
||||||
if(maxY == -1){
|
|
||||||
maxY = 0;
|
|
||||||
}
|
|
||||||
return maxY - minY;
|
|
||||||
} else {
|
|
||||||
return height;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionX() {
|
|
||||||
if(positionX == -1){
|
|
||||||
int minX = -1;
|
|
||||||
for(Element child : childList){
|
|
||||||
if(minX == -1){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
} else if(child.getPositionX() < minX){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minX == -1){
|
|
||||||
minX = 0;
|
|
||||||
}
|
|
||||||
return minX;
|
|
||||||
} else {
|
|
||||||
return positionX;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionY() {
|
|
||||||
if(positionY == -1){
|
|
||||||
int minY = -1;
|
|
||||||
for(Element child : childList){
|
|
||||||
if(minY == -1){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
} else if(child.getPositionY() < minY){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minY == -1){
|
|
||||||
minY = 0;
|
|
||||||
}
|
|
||||||
return minY;
|
|
||||||
} else {
|
|
||||||
return positionY;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getVisible() {
|
public boolean getVisible() {
|
||||||
return visible;
|
return visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setWidth(int width) {
|
|
||||||
this.width = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHeight(int height) {
|
|
||||||
this.height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionX(int posX) {
|
|
||||||
int deltaX = posX - getPositionX();
|
|
||||||
this.positionX = posX;
|
|
||||||
for(Element child : childList){
|
|
||||||
child.setPositionX(child.getPositionX() + deltaX);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionY(int posY) {
|
|
||||||
int deltaY = posY - getPositionY();
|
|
||||||
this.positionY = posY;
|
|
||||||
for(Element child : childList){
|
|
||||||
child.setPositionY(child.getPositionY() + deltaY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setVisible(boolean draw) {
|
public void setVisible(boolean draw) {
|
||||||
this.visible = draw;
|
this.visible = draw;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setParentWidth(int width){
|
|
||||||
parentWidth = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setParentHeight(int height){
|
|
||||||
this.parentHeight = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isFocused() {
|
public boolean isFocused() {
|
||||||
return focused;
|
return focused;
|
||||||
@ -231,46 +105,81 @@ public class Button implements DrawableElement, FocusableElement, ContainerEleme
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentWidth, int parentHeight) {
|
public void draw(
|
||||||
|
RenderPipelineState renderPipelineState,
|
||||||
|
OpenGLState openGLState,
|
||||||
|
int parentFramebufferPointer,
|
||||||
|
int parentPosX,
|
||||||
|
int parentPosY,
|
||||||
|
int parentWidth,
|
||||||
|
int parentHeight
|
||||||
|
) {
|
||||||
|
|
||||||
|
//
|
||||||
|
//Draw decorations
|
||||||
|
|
||||||
|
float ndcWidth = (float)getWidth()/parentWidth;
|
||||||
|
float ndcHeight = (float)getHeight()/parentHeight;
|
||||||
|
float ndcX = (float)(getInternalX() + parentPosX)/parentWidth;
|
||||||
|
float ndcY = (float)(getInternalY() + parentPosY)/parentHeight;
|
||||||
|
boxPosition = new Vector3f(ndcX,ndcY,0);
|
||||||
|
boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
||||||
|
|
||||||
|
Model planeModel = Globals.assetManager.fetchModel(Globals.imagePlaneModelID);
|
||||||
|
Texture windowFrame = null;
|
||||||
|
if(this.isFocused()){
|
||||||
|
windowFrame = Globals.assetManager.fetchTexture("Textures/ui/uiFrame2.png");
|
||||||
|
} else {
|
||||||
|
windowFrame = Globals.assetManager.fetchTexture("Textures/ui/uiFrame1.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
//this call binds the screen as the "texture" we're rendering to
|
||||||
|
//have to call before actually rendering
|
||||||
|
GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, parentFramebufferPointer);
|
||||||
|
openGLState.glViewport(parentWidth, parentHeight);
|
||||||
|
|
||||||
|
//error if assets are null
|
||||||
|
if(planeModel == null || windowFrame == null){
|
||||||
|
LoggerInterface.loggerRenderer.ERROR("Window unable to find plane model or window frame!!", new Exception());
|
||||||
|
}
|
||||||
|
|
||||||
|
//render background of window
|
||||||
|
if(planeModel != null && windowFrame != null){
|
||||||
|
planeModel.pushUniformToMesh("plane", "mPosition", boxPosition);
|
||||||
|
planeModel.pushUniformToMesh("plane", "mDimension", boxDimensions);
|
||||||
|
planeModel.pushUniformToMesh("plane", "tPosition", texPosition);
|
||||||
|
planeModel.pushUniformToMesh("plane", "tDimension", texScale);
|
||||||
|
customMat.setTexturePointer(windowFrame.getTexturePointer());
|
||||||
|
planeModel.getMeshes().get(0).setMaterial(customMat);
|
||||||
|
planeModel.drawUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
//Draw children elements
|
||||||
|
|
||||||
for(Element child : childList){
|
for(Element child : childList){
|
||||||
if(child instanceof DrawableElement){
|
if(child instanceof DrawableElement){
|
||||||
DrawableElement drawableChild = (DrawableElement) child;
|
DrawableElement drawableChild = (DrawableElement) child;
|
||||||
drawableChild.draw(renderPipelineState,openGLState,parentFramebufferPointer,parentWidth,parentHeight);
|
child.setPositionX(this.internalPositionX);
|
||||||
|
child.setPositionY(this.internalPositionY);
|
||||||
|
drawableChild.draw(
|
||||||
|
renderPipelineState,
|
||||||
|
openGLState,
|
||||||
|
parentFramebufferPointer,
|
||||||
|
parentPosX + this.internalPositionX,
|
||||||
|
parentPosY + this.internalPositionY,
|
||||||
|
parentWidth,
|
||||||
|
parentHeight
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Globals.RENDER_FLAG_RENDER_UI_BOUNDS && DebugRendering.RENDER_DEBUG_OUTLINE_BUTTON){
|
if(Globals.RENDER_FLAG_RENDER_UI_BOUNDS && DebugRendering.RENDER_DEBUG_OUTLINE_BUTTON){
|
||||||
float ndcX = (float)positionX/parentWidth;
|
|
||||||
float ndcY = (float)positionY/parentHeight;
|
|
||||||
float ndcWidth = (float)getWidth()/parentWidth;
|
|
||||||
float ndcHeight = (float)getHeight()/parentHeight;
|
|
||||||
Vector3f boxPosition = new Vector3f(ndcX,ndcY,0);
|
|
||||||
Vector3f boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
|
||||||
DebugRendering.drawUIBounds(parentFramebufferPointer, boxPosition, boxDimensions, windowDrawDebugColor);
|
DebugRendering.drawUIBounds(parentFramebufferPointer, boxPosition, boxDimensions, windowDrawDebugColor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addChild(Element child) {
|
|
||||||
childList.add(child);
|
|
||||||
if(child instanceof DrawableElement){
|
|
||||||
DrawableElement drawableChild = (DrawableElement) child;
|
|
||||||
drawableChild.setParentWidth(width);
|
|
||||||
drawableChild.setParentHeight(height);
|
|
||||||
drawableChild.setVisible(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Element> getChildren() {
|
|
||||||
return childList;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeChild(Element child) {
|
|
||||||
childList.remove(child);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOnFocus(FocusEventCallback callback) {
|
public void setOnFocus(FocusEventCallback callback) {
|
||||||
onFocusCallback = callback;
|
onFocusCallback = callback;
|
||||||
|
|||||||
@ -1,256 +1,47 @@
|
|||||||
package electrosphere.renderer.ui.elements;
|
package electrosphere.renderer.ui.elements;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
|
import org.lwjgl.util.yoga.Yoga;
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.renderer.OpenGLState;
|
import electrosphere.renderer.OpenGLState;
|
||||||
import electrosphere.renderer.RenderPipelineState;
|
import electrosphere.renderer.RenderPipelineState;
|
||||||
import electrosphere.renderer.debug.DebugRendering;
|
import electrosphere.renderer.debug.DebugRendering;
|
||||||
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
|
||||||
import electrosphere.renderer.ui.elementtypes.DraggableElement;
|
import electrosphere.renderer.ui.elementtypes.DraggableElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.Element;
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
import electrosphere.renderer.ui.elementtypes.FocusableElement;
|
|
||||||
import electrosphere.renderer.ui.elementtypes.NavigableElement;
|
import electrosphere.renderer.ui.elementtypes.NavigableElement;
|
||||||
import electrosphere.renderer.ui.events.ClickEvent;
|
import electrosphere.renderer.ui.events.ClickEvent;
|
||||||
import electrosphere.renderer.ui.events.DragEvent;
|
import electrosphere.renderer.ui.events.DragEvent;
|
||||||
import electrosphere.renderer.ui.events.DragEvent.DragEventType;
|
import electrosphere.renderer.ui.events.DragEvent.DragEventType;
|
||||||
import electrosphere.renderer.ui.events.Event;
|
import electrosphere.renderer.ui.events.Event;
|
||||||
import electrosphere.renderer.ui.events.FocusEvent;
|
|
||||||
import electrosphere.renderer.ui.events.NavigationEvent;
|
import electrosphere.renderer.ui.events.NavigationEvent;
|
||||||
|
|
||||||
public class Div implements ClickableElement,ContainerElement,DraggableElement,FocusableElement,DrawableElement,NavigableElement {
|
public class Div extends StandardContainerElement implements ClickableElement,DraggableElement,DrawableElement,NavigableElement {
|
||||||
|
|
||||||
ClickEventCallback onClick;
|
ClickEventCallback onClick;
|
||||||
FocusEventCallback onFocus;
|
|
||||||
FocusEventCallback onLoseFocus;
|
|
||||||
DragEventCallback onDragStart;
|
DragEventCallback onDragStart;
|
||||||
DragEventCallback onDrag;
|
DragEventCallback onDrag;
|
||||||
DragEventCallback onDragRelease;
|
DragEventCallback onDragRelease;
|
||||||
NavigationEventCallback onNavigate;
|
NavigationEventCallback onNavigate;
|
||||||
boolean focused = false;
|
boolean focused = false;
|
||||||
List<Element> childList = new LinkedList<Element>();
|
|
||||||
|
|
||||||
|
|
||||||
public int width = -1;
|
|
||||||
public int height = -1;
|
|
||||||
|
|
||||||
public int positionX = -1;
|
|
||||||
public int positionY = -1;
|
|
||||||
|
|
||||||
public int parentWidth = 1;
|
|
||||||
public int parentHeight = 1;
|
|
||||||
|
|
||||||
public boolean visible = false;
|
public boolean visible = false;
|
||||||
|
|
||||||
static final Vector3f windowDrawDebugColor = new Vector3f(1.0f,1.0f,1.0f);
|
static final Vector3f windowDrawDebugColor = new Vector3f(1.0f,1.0f,1.0f);
|
||||||
|
|
||||||
@Override
|
public Div(){
|
||||||
public int getWidth() {
|
super();
|
||||||
if(width == -1){
|
Yoga.YGNodeStyleSetFlex(yogaNode, 1.0f);
|
||||||
if(childList.size() > 0){
|
|
||||||
int minX = -1;
|
|
||||||
int maxX = -1;
|
|
||||||
for(Element child : childList){
|
|
||||||
if(minX == -1){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
} else if(child.getPositionX() < minX){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
}
|
|
||||||
if(maxX == -1){
|
|
||||||
maxX = child.getPositionX() + child.getWidth();
|
|
||||||
} else if(child.getPositionX() + child.getWidth() > maxX){
|
|
||||||
maxX = child.getPositionX() + child.getWidth();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minX == -1){
|
|
||||||
minX = 0;
|
|
||||||
}
|
|
||||||
if(maxX == -1){
|
|
||||||
maxX = 0;
|
|
||||||
}
|
|
||||||
return maxX - minX;
|
|
||||||
} else {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return width;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getHeight() {
|
|
||||||
if(height == -1){
|
|
||||||
if(childList.size() > 0){
|
|
||||||
int minY = -1;
|
|
||||||
int maxY = -1;
|
|
||||||
for(Element child : childList){
|
|
||||||
if(minY == -1){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
} else if(child.getPositionY() < minY){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
}
|
|
||||||
if(maxY == -1){
|
|
||||||
maxY = child.getPositionY() + child.getHeight();
|
|
||||||
} else if(child.getPositionY() + child.getHeight() > maxY){
|
|
||||||
maxY = child.getPositionY() + child.getHeight();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minY == -1){
|
|
||||||
minY = 0;
|
|
||||||
}
|
|
||||||
if(maxY == -1){
|
|
||||||
maxY = 0;
|
|
||||||
}
|
|
||||||
return maxY - minY;
|
|
||||||
} else {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return height;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPositionX() {
|
|
||||||
if(positionX == -1){
|
|
||||||
if(childList.size() > 0){
|
|
||||||
int minX = -1;
|
|
||||||
for(Element child : childList){
|
|
||||||
if(minX == -1){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
} else if(child.getPositionX() < minX){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minX == -1){
|
|
||||||
minX = 0;
|
|
||||||
}
|
|
||||||
return minX;
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return positionX;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPositionY() {
|
|
||||||
if(positionY == -1){
|
|
||||||
if(childList.size() > 0){
|
|
||||||
int minY = -1;
|
|
||||||
for(Element child : childList){
|
|
||||||
if(minY == -1){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
} else if(child.getPositionY() < minY){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minY == -1){
|
|
||||||
minY = 0;
|
|
||||||
}
|
|
||||||
return minY;
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return positionY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setWidth(int width) {
|
|
||||||
this.width = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setHeight(int height) {
|
|
||||||
this.height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPositionX(int posX) {
|
|
||||||
int deltaX = posX - getPositionX();
|
|
||||||
this.positionX = posX;
|
|
||||||
for(Element child : childList){
|
|
||||||
child.setPositionX(child.getPositionX() + deltaX);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
|
|
||||||
public void setPositionY(int posY) {
|
|
||||||
int deltaY = posY - getPositionY();
|
|
||||||
this.positionY = posY;
|
|
||||||
for(Element child : childList){
|
|
||||||
child.setPositionY(child.getPositionY() + deltaY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setParentWidth(int width) {
|
|
||||||
this.parentWidth = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setParentHeight(int height) {
|
|
||||||
this.parentHeight = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addChild(Element child) {
|
|
||||||
childList.add(child);
|
|
||||||
if(child instanceof DrawableElement){
|
|
||||||
DrawableElement drawableChild = (DrawableElement) child;
|
|
||||||
drawableChild.setParentWidth(width);
|
|
||||||
drawableChild.setParentHeight(height);
|
|
||||||
drawableChild.setVisible(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Element> getChildren() {
|
|
||||||
return childList;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeChild(Element child) {
|
|
||||||
childList.remove(child);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void setFocus(boolean focus){
|
public void setFocus(boolean focus){
|
||||||
this.focused = focus;
|
this.focused = focus;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isFocused() {
|
|
||||||
return focused;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setOnFocus(FocusEventCallback callback) {
|
|
||||||
this.onFocus = callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setOnLoseFocus(FocusEventCallback callback) {
|
|
||||||
this.onLoseFocus = callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOnDragStart(DragEventCallback callback) {
|
public void setOnDragStart(DragEventCallback callback) {
|
||||||
this.onDragStart = callback;
|
this.onDragStart = callback;
|
||||||
@ -284,20 +75,6 @@ public class Div implements ClickableElement,ContainerElement,DraggableElement,F
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(onFocus != null){
|
|
||||||
if(event instanceof FocusEvent){
|
|
||||||
if(!onFocus.execute((FocusEvent)event)){
|
|
||||||
propagate = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(onLoseFocus != null){
|
|
||||||
if(event instanceof FocusEvent){
|
|
||||||
if(!onLoseFocus.execute((FocusEvent)event)){
|
|
||||||
propagate = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(event instanceof DragEvent){
|
if(event instanceof DragEvent){
|
||||||
if(onDragStart != null && ((DragEvent)event).getType() == DragEventType.START){
|
if(onDragStart != null && ((DragEvent)event).getType() == DragEventType.START){
|
||||||
if(!onDragStart.execute((DragEvent)event)){
|
if(!onDragStart.execute((DragEvent)event)){
|
||||||
@ -336,11 +113,19 @@ public class Div implements ClickableElement,ContainerElement,DraggableElement,F
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentWidth, int parentHeight) {
|
public void draw(
|
||||||
|
RenderPipelineState renderPipelineState,
|
||||||
|
OpenGLState openGLState,
|
||||||
|
int parentFramebufferPointer,
|
||||||
|
int parentPosX,
|
||||||
|
int parentPosY,
|
||||||
|
int parentWidth,
|
||||||
|
int parentHeight
|
||||||
|
) {
|
||||||
for(Element child : childList){
|
for(Element child : childList){
|
||||||
if(child instanceof DrawableElement){
|
if(child instanceof DrawableElement){
|
||||||
DrawableElement drawableChild = (DrawableElement) child;
|
DrawableElement drawableChild = (DrawableElement) child;
|
||||||
drawableChild.draw(renderPipelineState,openGLState,parentFramebufferPointer,parentWidth,parentHeight);
|
drawableChild.draw(renderPipelineState,openGLState,parentFramebufferPointer,parentPosX + this.internalPositionX,parentPosY + this.internalPositionY,parentWidth,parentHeight);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,68 @@
|
|||||||
|
package electrosphere.renderer.ui.elements;
|
||||||
|
|
||||||
|
import org.lwjgl.util.yoga.Yoga;
|
||||||
|
|
||||||
|
import electrosphere.renderer.OpenGLState;
|
||||||
|
import electrosphere.renderer.RenderPipelineState;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
|
import electrosphere.renderer.ui.events.Event;
|
||||||
|
|
||||||
|
public class FormElement extends StandardContainerElement implements DrawableElement {
|
||||||
|
|
||||||
|
public boolean visible = false;
|
||||||
|
|
||||||
|
public boolean focused = false;
|
||||||
|
|
||||||
|
public FormElement(){
|
||||||
|
super();
|
||||||
|
Yoga.YGNodeStyleSetFlex(yogaNode, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void draw(
|
||||||
|
RenderPipelineState renderPipelineState,
|
||||||
|
OpenGLState openGLState,
|
||||||
|
int parentFramebufferPointer,
|
||||||
|
int parentPosX,
|
||||||
|
int parentPosY,
|
||||||
|
int parentWidth,
|
||||||
|
int parentHeight
|
||||||
|
) {
|
||||||
|
for(Element child : childList){
|
||||||
|
if(child instanceof DrawableElement){
|
||||||
|
DrawableElement drawableChild = (DrawableElement) child;
|
||||||
|
drawableChild.draw(renderPipelineState,openGLState,parentFramebufferPointer,parentPosX + this.internalPositionX,parentPosY + this.internalPositionY,parentWidth,parentHeight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onFocus(){
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getVisible() {
|
||||||
|
return visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isFocused(){
|
||||||
|
return focused;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVisible(boolean draw) {
|
||||||
|
this.visible = draw;
|
||||||
|
for(Element child : childList){
|
||||||
|
if(child instanceof DrawableElement){
|
||||||
|
DrawableElement drawableChild = (DrawableElement) child;
|
||||||
|
drawableChild.setVisible(draw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFocused(boolean focused){
|
||||||
|
this.focused = focused;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean handleEvent(Event event){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -23,7 +23,7 @@ import electrosphere.renderer.ui.events.Event;
|
|||||||
*
|
*
|
||||||
* @author amaterasu
|
* @author amaterasu
|
||||||
*/
|
*/
|
||||||
public class ImagePanel implements DrawableElement, DraggableElement {
|
public class ImagePanel extends StandardElement implements DrawableElement, DraggableElement {
|
||||||
|
|
||||||
public static String imagePanelModelPath;
|
public static String imagePanelModelPath;
|
||||||
|
|
||||||
@ -43,6 +43,7 @@ public class ImagePanel implements DrawableElement, DraggableElement {
|
|||||||
static final Vector3f windowDrawDebugColor = new Vector3f(0.0f,0.5f,1.0f);
|
static final Vector3f windowDrawDebugColor = new Vector3f(0.0f,0.5f,1.0f);
|
||||||
|
|
||||||
public ImagePanel(int x, int y, int width, int height, String texturePath){
|
public ImagePanel(int x, int y, int width, int height, String texturePath){
|
||||||
|
super();
|
||||||
this.texturePath = texturePath;
|
this.texturePath = texturePath;
|
||||||
texture = Globals.assetManager.fetchTexture(this.texturePath);
|
texture = Globals.assetManager.fetchTexture(this.texturePath);
|
||||||
if(texture != null){
|
if(texture != null){
|
||||||
@ -68,7 +69,15 @@ public class ImagePanel implements DrawableElement, DraggableElement {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentWidth, int parentHeight) {
|
public void draw(
|
||||||
|
RenderPipelineState renderPipelineState,
|
||||||
|
OpenGLState openGLState,
|
||||||
|
int parentFramebufferPointer,
|
||||||
|
int parentPosX,
|
||||||
|
int parentPosY,
|
||||||
|
int parentWidth,
|
||||||
|
int parentHeight
|
||||||
|
) {
|
||||||
if(!hasLoadedTexture){
|
if(!hasLoadedTexture){
|
||||||
texture = Globals.assetManager.fetchTexture(this.texturePath);
|
texture = Globals.assetManager.fetchTexture(this.texturePath);
|
||||||
if(texture != null){
|
if(texture != null){
|
||||||
@ -105,65 +114,16 @@ public class ImagePanel implements DrawableElement, DraggableElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int width = 1;
|
|
||||||
public int height = 1;
|
|
||||||
|
|
||||||
public int positionX = 0;
|
|
||||||
public int positionY = 0;
|
|
||||||
|
|
||||||
public int parentWidth = 1;
|
|
||||||
public int parentHeight = 1;
|
|
||||||
|
|
||||||
public boolean visible = false;
|
public boolean visible = false;
|
||||||
|
|
||||||
public int getWidth() {
|
|
||||||
return width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getHeight() {
|
|
||||||
return height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionX() {
|
|
||||||
return positionX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionY() {
|
|
||||||
return positionY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getVisible() {
|
public boolean getVisible() {
|
||||||
return visible;
|
return visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setWidth(int width) {
|
|
||||||
this.width = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHeight(int height) {
|
|
||||||
this.height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionX(int positionX) {
|
|
||||||
this.positionX = positionX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionY(int positionY) {
|
|
||||||
this.positionY = positionY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setVisible(boolean draw) {
|
public void setVisible(boolean draw) {
|
||||||
this.visible = draw;
|
this.visible = draw;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setParentWidth(int width){
|
|
||||||
parentWidth = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setParentHeight(int height){
|
|
||||||
this.parentHeight = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean handleEvent(Event event){
|
public boolean handleEvent(Event event){
|
||||||
boolean propagate = true;
|
boolean propagate = true;
|
||||||
if(event instanceof DragEvent){
|
if(event instanceof DragEvent){
|
||||||
|
|||||||
@ -1,9 +1,7 @@
|
|||||||
package electrosphere.renderer.ui.elements;
|
package electrosphere.renderer.ui.elements;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
|
import org.lwjgl.util.yoga.Yoga;
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.renderer.OpenGLState;
|
import electrosphere.renderer.OpenGLState;
|
||||||
@ -13,23 +11,12 @@ import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
|||||||
import electrosphere.renderer.ui.elementtypes.Element;
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
import electrosphere.renderer.ui.events.Event;
|
import electrosphere.renderer.ui.events.Event;
|
||||||
import electrosphere.renderer.ui.font.Font;
|
import electrosphere.renderer.ui.font.Font;
|
||||||
import electrosphere.renderer.ui.font.FontUtils;
|
|
||||||
import electrosphere.renderer.ui.font.bitmapchar.BitmapCharacter;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author amaterasu
|
* @author amaterasu
|
||||||
*/
|
*/
|
||||||
public class Label implements DrawableElement {
|
public class Label extends StandardContainerElement implements DrawableElement {
|
||||||
|
|
||||||
public int width = 1;
|
|
||||||
public int height = 1;
|
|
||||||
|
|
||||||
public int positionX = 0;
|
|
||||||
public int positionY = 0;
|
|
||||||
|
|
||||||
public int parentWidth = 1;
|
|
||||||
public int parentHeight = 1;
|
|
||||||
|
|
||||||
public boolean visible = false;
|
public boolean visible = false;
|
||||||
|
|
||||||
@ -39,31 +26,44 @@ public class Label implements DrawableElement {
|
|||||||
|
|
||||||
float fontSize = 1.0f;
|
float fontSize = 1.0f;
|
||||||
|
|
||||||
List<BitmapCharacter> childrenElements = new LinkedList<BitmapCharacter>();
|
|
||||||
|
|
||||||
static final Vector3f windowDrawDebugColor = new Vector3f(1.0f,1.0f,1.0f);
|
static final Vector3f windowDrawDebugColor = new Vector3f(1.0f,1.0f,1.0f);
|
||||||
|
|
||||||
Font font;
|
Font font;
|
||||||
|
|
||||||
|
public Label(float fontSize){
|
||||||
|
super();
|
||||||
|
this.font = Globals.fontManager.getFont("default");
|
||||||
|
setHeight((int)(font.getFontHeight() * fontSize));
|
||||||
|
this.fontSize = fontSize;
|
||||||
|
Yoga.YGNodeStyleSetFlexDirection(this.yogaNode, Yoga.YGFlexDirectionRow);
|
||||||
|
}
|
||||||
|
|
||||||
public Label(int x, int y, float fontSize){
|
public Label(int x, int y, float fontSize){
|
||||||
this.positionX = x;
|
super();
|
||||||
this.positionY = y;
|
this.setPositionX(x);
|
||||||
this.width = 0;
|
this.setPositionY(y);
|
||||||
this.font = Globals.fontManager.getFont("default");
|
this.font = Globals.fontManager.getFont("default");
|
||||||
this.height = (int)(font.getFontHeight() * fontSize);
|
setHeight((int)(font.getFontHeight() * fontSize));
|
||||||
this.fontSize = fontSize;
|
this.fontSize = fontSize;
|
||||||
|
Yoga.YGNodeStyleSetFlexDirection(this.yogaNode, Yoga.YGFlexDirectionRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
void generateLetters(){
|
void generateLetters(){
|
||||||
childrenElements.clear();
|
//free children
|
||||||
int rollingOffset = 0;
|
for(Element child : childList){
|
||||||
|
Yoga.YGNodeFree(child.getYogaNode());
|
||||||
|
}
|
||||||
|
childList.clear();
|
||||||
|
int accumulatingWidth = 0;
|
||||||
for(int i = 0; i < text.length(); i++){
|
for(int i = 0; i < text.length(); i++){
|
||||||
char toDraw = text.charAt(i);
|
char toDraw = text.charAt(i);
|
||||||
Vector3f bitMapDimension = this.font.getDimensionOfCharacterDiscrete(toDraw);
|
Vector3f bitMapDimension = this.font.getDimensionOfCharacterDiscrete(toDraw);
|
||||||
BitmapCharacter newLetter = new BitmapCharacter(this.font,(int)(rollingOffset * fontSize) + positionX, positionY, (int)(bitMapDimension.x * fontSize), this.height, toDraw);
|
BitmapCharacter newLetter = new BitmapCharacter(this.font,(int)(bitMapDimension.x * fontSize), this.height, toDraw);
|
||||||
rollingOffset += (int)bitMapDimension.x;
|
accumulatingWidth += bitMapDimension.x * fontSize;
|
||||||
childrenElements.add(newLetter);
|
childList.add(newLetter);
|
||||||
|
Yoga.YGNodeInsertChild(yogaNode, newLetter.getYogaNode(), childList.size() - 1);
|
||||||
}
|
}
|
||||||
|
Yoga.YGNodeStyleSetWidth(yogaNode, accumulatingWidth);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setText(String text){
|
public void setText(String text){
|
||||||
@ -77,8 +77,8 @@ public class Label implements DrawableElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setColor(Vector3f color){
|
public void setColor(Vector3f color){
|
||||||
for(BitmapCharacter character : childrenElements){
|
for(Element character : childList){
|
||||||
character.setColor(color);
|
((BitmapCharacter)character).setColor(color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,140 +87,46 @@ public class Label implements DrawableElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentWidth, int parentHeight) {
|
public void draw(
|
||||||
for(DrawableElement child : childrenElements){
|
RenderPipelineState renderPipelineState,
|
||||||
child.draw(renderPipelineState,openGLState,parentFramebufferPointer, parentWidth, parentHeight);
|
OpenGLState openGLState,
|
||||||
|
int parentFramebufferPointer,
|
||||||
|
int parentPosX,
|
||||||
|
int parentPosY,
|
||||||
|
int parentWidth,
|
||||||
|
int parentHeight
|
||||||
|
) {
|
||||||
|
for(Element child : childList){
|
||||||
|
((DrawableElement)child).draw(
|
||||||
|
renderPipelineState,
|
||||||
|
openGLState,
|
||||||
|
parentFramebufferPointer,
|
||||||
|
parentPosX + this.internalPositionX,
|
||||||
|
parentPosY + this.internalPositionY,
|
||||||
|
parentWidth,
|
||||||
|
parentHeight
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Globals.RENDER_FLAG_RENDER_UI_BOUNDS && DebugRendering.RENDER_DEBUG_OUTLINE_LABEL){
|
if(Globals.RENDER_FLAG_RENDER_UI_BOUNDS && DebugRendering.RENDER_DEBUG_OUTLINE_LABEL){
|
||||||
float ndcX = (float)positionX/parentWidth;
|
float ndcX = (float)(positionX)/parentWidth;
|
||||||
float ndcY = (float)positionY/parentHeight;
|
float ndcY = (float)(positionY)/parentHeight;
|
||||||
float ndcWidth = (float)getWidth()/parentWidth;
|
float ndcWidth = (float)internalWidth/parentWidth;
|
||||||
float ndcHeight = (float)getHeight()/parentHeight;
|
float ndcHeight = (float)internalHeight/parentHeight;
|
||||||
Vector3f boxPosition = new Vector3f(ndcX,ndcY,0);
|
Vector3f boxPosition = new Vector3f(ndcX,ndcY,0);
|
||||||
Vector3f boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
Vector3f boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
||||||
DebugRendering.drawUIBounds(parentFramebufferPointer, boxPosition, boxDimensions, windowDrawDebugColor);
|
DebugRendering.drawUIBounds(parentFramebufferPointer, boxPosition, boxDimensions, windowDrawDebugColor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getWidth() {
|
|
||||||
int minX = -1;
|
|
||||||
int maxX = -1;
|
|
||||||
for(BitmapCharacter child : childrenElements){
|
|
||||||
if(minX == -1){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
} else if(child.getPositionX() < minX){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
}
|
|
||||||
if(maxX == -1){
|
|
||||||
maxX = child.getPositionX() + child.getWidth();
|
|
||||||
} else if(child.getPositionX() + child.getWidth() > maxX){
|
|
||||||
maxX = child.getPositionX() + child.getWidth();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minX == -1){
|
|
||||||
minX = 0;
|
|
||||||
}
|
|
||||||
if(maxX == -1){
|
|
||||||
maxX = 0;
|
|
||||||
}
|
|
||||||
return maxX - minX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getHeight() {
|
|
||||||
int minY = -1;
|
|
||||||
int maxY = -1;
|
|
||||||
for(BitmapCharacter child : childrenElements){
|
|
||||||
if(minY == -1){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
} else if(child.getPositionY() < minY){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
}
|
|
||||||
if(maxY == -1){
|
|
||||||
maxY = child.getPositionY() + child.getHeight();
|
|
||||||
} else if(child.getPositionY() + child.getHeight() > maxY){
|
|
||||||
maxY = child.getPositionY() + child.getHeight();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minY == -1){
|
|
||||||
minY = 0;
|
|
||||||
}
|
|
||||||
if(maxY == -1){
|
|
||||||
maxY = 0;
|
|
||||||
}
|
|
||||||
return maxY - minY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionX() {
|
|
||||||
int minX = -1;
|
|
||||||
for(BitmapCharacter child : childrenElements){
|
|
||||||
if(minX == -1){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
} else if(child.getPositionX() < minX){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minX == -1){
|
|
||||||
minX = 0;
|
|
||||||
}
|
|
||||||
return minX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionY() {
|
|
||||||
int minY = -1;
|
|
||||||
for(BitmapCharacter child : childrenElements){
|
|
||||||
if(minY == -1){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
} else if(child.getPositionY() < minY){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minY == -1){
|
|
||||||
minY = 0;
|
|
||||||
}
|
|
||||||
return minY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getVisible() {
|
public boolean getVisible() {
|
||||||
return visible;
|
return visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setWidth(int width) {
|
|
||||||
this.width = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHeight(int height) {
|
|
||||||
this.height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionX(int posX) {
|
|
||||||
int deltaX = posX - this.positionX;
|
|
||||||
this.positionX = posX;
|
|
||||||
for(Element child : childrenElements){
|
|
||||||
child.setPositionX(child.getPositionX() + deltaX);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionY(int posY) {
|
|
||||||
int deltaY = posY - this.positionY;
|
|
||||||
this.positionY = posY;
|
|
||||||
for(Element child : childrenElements){
|
|
||||||
child.setPositionY(child.getPositionY() + deltaY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setVisible(boolean draw) {
|
public void setVisible(boolean draw) {
|
||||||
this.visible = draw;
|
this.visible = draw;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setParentWidth(int width){
|
|
||||||
parentWidth = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setParentHeight(int height){
|
|
||||||
this.parentHeight = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean handleEvent(Event event){
|
public boolean handleEvent(Event event){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,5 @@
|
|||||||
package electrosphere.renderer.ui.elements;
|
package electrosphere.renderer.ui.elements;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.joml.Vector2f;
|
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
@ -14,6 +10,7 @@ import electrosphere.renderer.framebuffer.Framebuffer;
|
|||||||
import electrosphere.renderer.framebuffer.FramebufferUtils;
|
import electrosphere.renderer.framebuffer.FramebufferUtils;
|
||||||
import electrosphere.renderer.model.Material;
|
import electrosphere.renderer.model.Material;
|
||||||
import electrosphere.renderer.model.Model;
|
import electrosphere.renderer.model.Model;
|
||||||
|
import electrosphere.renderer.texture.Texture;
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.Element;
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
@ -22,31 +19,22 @@ import electrosphere.renderer.ui.events.Event;
|
|||||||
import static org.lwjgl.opengl.GL11.*;
|
import static org.lwjgl.opengl.GL11.*;
|
||||||
import static org.lwjgl.opengl.GL30.*;
|
import static org.lwjgl.opengl.GL30.*;
|
||||||
|
|
||||||
public class ScrollableContainer implements DrawableElement, ContainerElement {
|
public class ScrollableContainer extends StandardContainerElement implements DrawableElement {
|
||||||
|
|
||||||
boolean focused = false;
|
boolean focused = false;
|
||||||
List<Element> childList = new LinkedList<Element>();
|
|
||||||
|
|
||||||
public int width = 1;
|
|
||||||
public int height = 1;
|
|
||||||
|
|
||||||
public int positionX = 0;
|
|
||||||
public int positionY = 0;
|
|
||||||
|
|
||||||
public int parentWidth = 1;
|
|
||||||
public int parentHeight = 1;
|
|
||||||
|
|
||||||
public boolean visible = false;
|
public boolean visible = false;
|
||||||
|
|
||||||
Framebuffer widgetBuffer;
|
Framebuffer widgetBuffer;
|
||||||
Material customMat = new Material();
|
Material customMat = new Material();
|
||||||
Vector3f boxPosition = new Vector3f();
|
Vector3f boxPosition = new Vector3f();
|
||||||
Vector3f boxDimensions = new Vector3f();
|
Vector3f boxDimensions = new Vector3f();
|
||||||
Vector3f texPosition = new Vector3f(0,1,0);
|
Vector3f texPosition = new Vector3f(0,0,0);
|
||||||
Vector3f texScale = new Vector3f(1,-1,0);
|
Vector3f texScale = new Vector3f(1,1,0);
|
||||||
|
|
||||||
|
|
||||||
public ScrollableContainer(int positionX, int positionY, int width, int height){
|
public ScrollableContainer(int positionX, int positionY, int width, int height){
|
||||||
|
super();
|
||||||
widgetBuffer = FramebufferUtils.generateTextureFramebuffer(width, height);
|
widgetBuffer = FramebufferUtils.generateTextureFramebuffer(width, height);
|
||||||
// widgetBuffer = FramebufferUtils.generateScreensizeTextureFramebuffer();
|
// widgetBuffer = FramebufferUtils.generateScreensizeTextureFramebuffer();
|
||||||
customMat.setTexturePointer(widgetBuffer.getTexturePointer());
|
customMat.setTexturePointer(widgetBuffer.getTexturePointer());
|
||||||
@ -55,108 +43,14 @@ public class ScrollableContainer implements DrawableElement, ContainerElement {
|
|||||||
float ndcY = (float)positionY/Globals.WINDOW_HEIGHT;
|
float ndcY = (float)positionY/Globals.WINDOW_HEIGHT;
|
||||||
float ndcWidth = (float)width/Globals.WINDOW_WIDTH;
|
float ndcWidth = (float)width/Globals.WINDOW_WIDTH;
|
||||||
float ndcHeight = (float)height/Globals.WINDOW_HEIGHT;
|
float ndcHeight = (float)height/Globals.WINDOW_HEIGHT;
|
||||||
this.width = width;
|
setWidth(width);
|
||||||
this.height = height;
|
setHeight(height);
|
||||||
boxPosition = new Vector3f(ndcX,ndcY,0);
|
boxPosition = new Vector3f(ndcX,ndcY,0);
|
||||||
boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getWidth() {
|
|
||||||
return width;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getHeight() {
|
|
||||||
return height;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPositionX() {
|
|
||||||
return positionX;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPositionY() {
|
|
||||||
return positionY;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setWidth(int width) {
|
|
||||||
this.width = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setHeight(int height) {
|
|
||||||
this.height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPositionX(int positionX) {
|
|
||||||
this.positionX = positionX;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPositionY(int positionY) {
|
|
||||||
this.positionY = positionY;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setParentWidth(int width) {
|
|
||||||
parentWidth = width;
|
|
||||||
float ndcX = (float)positionX/parentWidth;
|
|
||||||
float ndcY = (float)positionY/parentHeight;
|
|
||||||
float ndcWidth = (float)width/parentWidth;
|
|
||||||
float ndcHeight = (float)height/parentHeight;
|
|
||||||
boxPosition = new Vector3f(ndcX,ndcY,0);
|
|
||||||
boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setParentHeight(int height) {
|
|
||||||
parentHeight = height;
|
|
||||||
float ndcX = (float)positionX/parentWidth;
|
|
||||||
float ndcY = (float)positionY/parentHeight;
|
|
||||||
float ndcWidth = (float)width/parentWidth;
|
|
||||||
float ndcHeight = (float)height/parentHeight;
|
|
||||||
boxPosition = new Vector3f(ndcX,ndcY,0);
|
|
||||||
boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addChild(Element child) {
|
|
||||||
childList.add(child);
|
|
||||||
if(child instanceof DrawableElement){
|
|
||||||
DrawableElement drawableChild = (DrawableElement) child;
|
|
||||||
drawableChild.setParentWidth(width);
|
|
||||||
drawableChild.setParentHeight(height);
|
|
||||||
drawableChild.setVisible(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Element> getChildren() {
|
|
||||||
return childList;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeChild(Element child) {
|
|
||||||
childList.remove(child);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handleEvent(Event event) {
|
public boolean handleEvent(Event event) {
|
||||||
return false;
|
return false;
|
||||||
@ -189,7 +83,15 @@ public class ScrollableContainer implements DrawableElement, ContainerElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentWidth, int parentHeight) {
|
public void draw(
|
||||||
|
RenderPipelineState renderPipelineState,
|
||||||
|
OpenGLState openGLState,
|
||||||
|
int parentFramebufferPointer,
|
||||||
|
int parentPosX,
|
||||||
|
int parentPosY,
|
||||||
|
int parentWidth,
|
||||||
|
int parentHeight
|
||||||
|
) {
|
||||||
//figure out if currently focused element is a child or subchild of this container
|
//figure out if currently focused element is a child or subchild of this container
|
||||||
if(containsFocusedElement(this)){
|
if(containsFocusedElement(this)){
|
||||||
//if it is, if it is offscreen, calculate offset to put it onscreen
|
//if it is, if it is offscreen, calculate offset to put it onscreen
|
||||||
@ -235,9 +137,20 @@ public class ScrollableContainer implements DrawableElement, ContainerElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float ndcX = (float)internalPositionX/parentWidth;
|
||||||
|
float ndcY = (float)internalPositionY/parentHeight;
|
||||||
|
float ndcWidth = (float)internalWidth/parentWidth;
|
||||||
|
float ndcHeight = (float)internalHeight/parentHeight;
|
||||||
|
boxPosition = new Vector3f(ndcX,ndcY,0);
|
||||||
|
boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
||||||
|
|
||||||
|
//grab assets required to render window
|
||||||
|
Model planeModel = Globals.assetManager.fetchModel(Globals.imagePlaneModelID);
|
||||||
|
Texture windowFrame = Globals.assetManager.fetchTexture("Textures/ui/uiFrame1.png");
|
||||||
|
|
||||||
|
|
||||||
widgetBuffer.bind();
|
widgetBuffer.bind();
|
||||||
// Globals.renderingEngine.setViewportSize(width, height);
|
openGLState.glViewport(width, height);
|
||||||
|
|
||||||
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
@ -245,20 +158,31 @@ public class ScrollableContainer implements DrawableElement, ContainerElement {
|
|||||||
for(Element child : childList){
|
for(Element child : childList){
|
||||||
if(child instanceof DrawableElement){
|
if(child instanceof DrawableElement){
|
||||||
DrawableElement drawableChild = (DrawableElement) child;
|
DrawableElement drawableChild = (DrawableElement) child;
|
||||||
drawableChild.draw(renderPipelineState,openGLState,widgetBuffer.getFramebufferPointer(),width,height);
|
drawableChild.draw(renderPipelineState,openGLState,widgetBuffer.getFramebufferPointer(),0,0,width,height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//this call binds the screen as the "texture" we're rendering to
|
//this call binds the screen as the "texture" we're rendering to
|
||||||
//have to call before actually rendering
|
//have to call before actually rendering
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, parentFramebufferPointer);
|
glBindFramebuffer(GL_FRAMEBUFFER, parentFramebufferPointer);
|
||||||
openGLState.glViewport(parentWidth, parentHeight);
|
openGLState.glViewport(parentWidth, parentHeight);
|
||||||
|
|
||||||
|
//render background of window
|
||||||
|
if(planeModel != null && windowFrame != null){
|
||||||
|
planeModel.pushUniformToMesh("plane", "mPosition", boxPosition);
|
||||||
|
planeModel.pushUniformToMesh("plane", "mDimension", boxDimensions);
|
||||||
|
planeModel.pushUniformToMesh("plane", "tPosition", texPosition);
|
||||||
|
planeModel.pushUniformToMesh("plane", "tDimension", texScale);
|
||||||
|
customMat.setTexturePointer(windowFrame.getTexturePointer());
|
||||||
|
planeModel.getMeshes().get(0).setMaterial(customMat);
|
||||||
|
planeModel.drawUI();
|
||||||
|
}
|
||||||
|
|
||||||
Model planeModel = Globals.assetManager.fetchModel(Globals.imagePlaneModelID);
|
|
||||||
if(planeModel != null){
|
if(planeModel != null){
|
||||||
planeModel.pushUniformToMesh("plane", "mPosition", boxPosition);
|
planeModel.pushUniformToMesh("plane", "mPosition", boxPosition);
|
||||||
planeModel.pushUniformToMesh("plane", "mDimension", boxDimensions);
|
planeModel.pushUniformToMesh("plane", "mDimension", boxDimensions);
|
||||||
planeModel.pushUniformToMesh("plane", "tPosition", texPosition);
|
planeModel.pushUniformToMesh("plane", "tPosition", texPosition);
|
||||||
planeModel.pushUniformToMesh("plane", "tDimension", texScale);
|
planeModel.pushUniformToMesh("plane", "tDimension", texScale);
|
||||||
|
customMat.setTexturePointer(widgetBuffer.getTexturePointer());
|
||||||
planeModel.getMeshes().get(0).setMaterial(customMat);
|
planeModel.getMeshes().get(0).setMaterial(customMat);
|
||||||
planeModel.drawUI();
|
planeModel.drawUI();
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -22,17 +22,8 @@ import electrosphere.renderer.ui.events.FocusEvent;
|
|||||||
import electrosphere.renderer.ui.events.MenuEvent;
|
import electrosphere.renderer.ui.events.MenuEvent;
|
||||||
import electrosphere.renderer.ui.events.ValueChangeEvent;
|
import electrosphere.renderer.ui.events.ValueChangeEvent;
|
||||||
|
|
||||||
public class Slider implements ClickableElement, DraggableElement, FocusableElement, DrawableElement, MenuEventElement, ValueElement {
|
public class Slider extends StandardElement implements ClickableElement, DraggableElement, FocusableElement, DrawableElement, MenuEventElement, ValueElement {
|
||||||
|
|
||||||
public int width = 1;
|
|
||||||
public int height = 1;
|
|
||||||
|
|
||||||
public int positionX = 0;
|
|
||||||
public int positionY = 0;
|
|
||||||
|
|
||||||
public int parentWidth = 1;
|
|
||||||
public int parentHeight = 1;
|
|
||||||
|
|
||||||
public boolean visible = false;
|
public boolean visible = false;
|
||||||
|
|
||||||
boolean focused = false;
|
boolean focused = false;
|
||||||
@ -61,6 +52,7 @@ public class Slider implements ClickableElement, DraggableElement, FocusableElem
|
|||||||
|
|
||||||
|
|
||||||
public Slider(int positionX, int positionY, int width, int height, Vector3f colorBackground, Vector3f colorForeground){
|
public Slider(int positionX, int positionY, int width, int height, Vector3f colorBackground, Vector3f colorForeground){
|
||||||
|
super();
|
||||||
this.positionX = positionX;
|
this.positionX = positionX;
|
||||||
this.positionY = positionY;
|
this.positionY = positionY;
|
||||||
this.width = width;
|
this.width = width;
|
||||||
@ -72,7 +64,15 @@ public class Slider implements ClickableElement, DraggableElement, FocusableElem
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentWidth, int parentHeight) {
|
public void draw(
|
||||||
|
RenderPipelineState renderPipelineState,
|
||||||
|
OpenGLState openGLState,
|
||||||
|
int parentFramebufferPointer,
|
||||||
|
int parentPosX,
|
||||||
|
int parentPosY,
|
||||||
|
int parentWidth,
|
||||||
|
int parentHeight
|
||||||
|
) {
|
||||||
|
|
||||||
Globals.renderingEngine.bindFramebuffer(parentFramebufferPointer);
|
Globals.renderingEngine.bindFramebuffer(parentFramebufferPointer);
|
||||||
openGLState.glViewport(parentWidth, parentHeight);
|
openGLState.glViewport(parentWidth, parentHeight);
|
||||||
@ -153,58 +153,18 @@ public class Slider implements ClickableElement, DraggableElement, FocusableElem
|
|||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getWidth() {
|
|
||||||
return width;
|
|
||||||
}
|
|
||||||
|
|
||||||
float getValueAsPercentage(){
|
float getValueAsPercentage(){
|
||||||
return (value - min) / (max - min);
|
return (value - min) / (max - min);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getHeight() {
|
|
||||||
return height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionX() {
|
|
||||||
return positionX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionY() {
|
|
||||||
return positionY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getVisible() {
|
public boolean getVisible() {
|
||||||
return visible;
|
return visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setWidth(int width) {
|
|
||||||
this.width = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHeight(int height) {
|
|
||||||
this.height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionX(int posX) {
|
|
||||||
this.positionX = posX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionY(int posY) {
|
|
||||||
this.positionY = posY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setVisible(boolean draw) {
|
public void setVisible(boolean draw) {
|
||||||
this.visible = draw;
|
this.visible = draw;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setParentWidth(int width){
|
|
||||||
parentWidth = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setParentHeight(int height){
|
|
||||||
this.parentHeight = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isFocused() {
|
public boolean isFocused() {
|
||||||
return focused;
|
return focused;
|
||||||
|
|||||||
@ -0,0 +1,260 @@
|
|||||||
|
package electrosphere.renderer.ui.elements;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.lwjgl.util.yoga.Yoga;
|
||||||
|
|
||||||
|
import electrosphere.logger.LoggerInterface;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An element that contains other elements
|
||||||
|
*/
|
||||||
|
public class StandardContainerElement extends StandardElement implements ContainerElement {
|
||||||
|
|
||||||
|
List<Element> childList = new LinkedList<Element>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getWidth() {
|
||||||
|
if(width == -1){
|
||||||
|
if(childList.size() > 0){
|
||||||
|
int minX = -1;
|
||||||
|
int maxX = -1;
|
||||||
|
for(Element child : childList){
|
||||||
|
if(minX == -1){
|
||||||
|
minX = child.getPositionX();
|
||||||
|
} else if(child.getPositionX() < minX){
|
||||||
|
minX = child.getPositionX();
|
||||||
|
}
|
||||||
|
if(maxX == -1){
|
||||||
|
maxX = child.getPositionX() + child.getWidth();
|
||||||
|
} else if(child.getPositionX() + child.getWidth() > maxX){
|
||||||
|
maxX = child.getPositionX() + child.getWidth();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(minX == -1){
|
||||||
|
minX = 0;
|
||||||
|
}
|
||||||
|
if(maxX == -1){
|
||||||
|
maxX = 0;
|
||||||
|
}
|
||||||
|
return maxX - minX;
|
||||||
|
} else {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getHeight() {
|
||||||
|
if(height == -1){
|
||||||
|
if(childList.size() > 0){
|
||||||
|
int minY = -1;
|
||||||
|
int maxY = -1;
|
||||||
|
for(Element child : childList){
|
||||||
|
if(minY == -1){
|
||||||
|
minY = child.getPositionY();
|
||||||
|
} else if(child.getPositionY() < minY){
|
||||||
|
minY = child.getPositionY();
|
||||||
|
}
|
||||||
|
if(maxY == -1){
|
||||||
|
maxY = child.getPositionY() + child.getHeight();
|
||||||
|
} else if(child.getPositionY() + child.getHeight() > maxY){
|
||||||
|
maxY = child.getPositionY() + child.getHeight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(minY == -1){
|
||||||
|
minY = 0;
|
||||||
|
}
|
||||||
|
if(maxY == -1){
|
||||||
|
maxY = 0;
|
||||||
|
}
|
||||||
|
return maxY - minY;
|
||||||
|
} else {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPositionX() {
|
||||||
|
if(positionX == -1){
|
||||||
|
if(childList.size() > 0){
|
||||||
|
int minX = -1;
|
||||||
|
for(Element child : childList){
|
||||||
|
if(minX == -1){
|
||||||
|
minX = child.getPositionX();
|
||||||
|
} else if(child.getPositionX() < minX){
|
||||||
|
minX = child.getPositionX();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(minX == -1){
|
||||||
|
minX = 0;
|
||||||
|
}
|
||||||
|
return minX;
|
||||||
|
} else {
|
||||||
|
return internalPositionX;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return internalPositionX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPositionY() {
|
||||||
|
if(positionY == -1){
|
||||||
|
if(childList.size() > 0){
|
||||||
|
int minY = -1;
|
||||||
|
for(Element child : childList){
|
||||||
|
if(minY == -1){
|
||||||
|
minY = child.getPositionY();
|
||||||
|
} else if(child.getPositionY() < minY){
|
||||||
|
minY = child.getPositionY();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(minY == -1){
|
||||||
|
minY = 0;
|
||||||
|
}
|
||||||
|
return minY;
|
||||||
|
} else {
|
||||||
|
return internalPositionY;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return internalPositionY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setWidth(int width) {
|
||||||
|
this.width = width;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setHeight(int height) {
|
||||||
|
this.height = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPositionX(int posX) {
|
||||||
|
int deltaX = posX - getPositionX();
|
||||||
|
this.positionX = posX;
|
||||||
|
for(Element child : childList){
|
||||||
|
child.setPositionX(child.getPositionX() + deltaX);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
|
||||||
|
public void setPositionY(int posY) {
|
||||||
|
int deltaY = posY - getPositionY();
|
||||||
|
this.positionY = posY;
|
||||||
|
for(Element child : childList){
|
||||||
|
child.setPositionY(child.getPositionY() + deltaY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setDirection(int layout) {
|
||||||
|
Yoga.YGNodeStyleSetDirection(yogaNode, layout);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setFlexDirection(int layout){
|
||||||
|
Yoga.YGNodeStyleSetFlexDirection(yogaNode, layout);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addChild(Element child) {
|
||||||
|
childList.add(child);
|
||||||
|
if(child instanceof DrawableElement){
|
||||||
|
DrawableElement drawableChild = (DrawableElement) child;
|
||||||
|
drawableChild.setParentWidth(width);
|
||||||
|
drawableChild.setParentHeight(height);
|
||||||
|
drawableChild.setVisible(true);
|
||||||
|
Yoga.YGNodeInsertChild(yogaNode, drawableChild.getYogaNode(), childList.size() - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Element> getChildren() {
|
||||||
|
return childList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeChild(Element child) {
|
||||||
|
childList.remove(child);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getChildOffsetX(){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getChildOffsetY(){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getChildScaleX(){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getChildScaleY(){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy(){
|
||||||
|
for(Element child : childList){
|
||||||
|
child.destroy();
|
||||||
|
}
|
||||||
|
Yoga.YGNodeFree(this.yogaNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void applyYoga() {
|
||||||
|
//apply yoga values to all children
|
||||||
|
for(Element child : this.getChildren()){
|
||||||
|
child.applyYoga();
|
||||||
|
}
|
||||||
|
//get the values from yoga
|
||||||
|
float leftRaw = Yoga.YGNodeLayoutGetLeft(yogaNode);
|
||||||
|
float topRaw = Yoga.YGNodeLayoutGetTop(yogaNode);
|
||||||
|
float widthRaw = Yoga.YGNodeLayoutGetWidth(yogaNode);
|
||||||
|
float heightRaw = Yoga.YGNodeLayoutGetHeight(yogaNode);
|
||||||
|
LoggerInterface.loggerUI.INFO("" + this);
|
||||||
|
LoggerInterface.loggerUI.INFO(topRaw + " " + leftRaw + " " + heightRaw + " " + widthRaw);
|
||||||
|
//apply the values to this component
|
||||||
|
this.internalPositionX = (int)leftRaw;
|
||||||
|
this.internalPositionY = (int)topRaw;
|
||||||
|
this.internalWidth = (int)widthRaw;
|
||||||
|
this.internalHeight = (int)heightRaw;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setJustifyContent(int justification){
|
||||||
|
Yoga.YGNodeStyleSetJustifyContent(this.yogaNode, justification);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setAlignItems(int alignment){
|
||||||
|
Yoga.YGNodeStyleSetAlignItems(this.yogaNode, alignment);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setAlignContent(int alignment){
|
||||||
|
Yoga.YGNodeStyleSetAlignContent(this.yogaNode, alignment);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,180 @@
|
|||||||
|
package electrosphere.renderer.ui.elements;
|
||||||
|
|
||||||
|
import org.lwjgl.util.yoga.Yoga;
|
||||||
|
|
||||||
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
|
import electrosphere.renderer.ui.events.Event;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An implementation of element
|
||||||
|
*/
|
||||||
|
public class StandardElement implements Element {
|
||||||
|
|
||||||
|
//these are set by the
|
||||||
|
public int width = -1;
|
||||||
|
public int height = -1;
|
||||||
|
public int positionX = -1;
|
||||||
|
public int positionY = -1;
|
||||||
|
|
||||||
|
public int parentWidth = 1;
|
||||||
|
public int parentHeight = 1;
|
||||||
|
|
||||||
|
int internalWidth;
|
||||||
|
int internalHeight;
|
||||||
|
int internalPositionX;
|
||||||
|
int internalPositionY;
|
||||||
|
|
||||||
|
public boolean visible = false;
|
||||||
|
|
||||||
|
//the yoga node id
|
||||||
|
long yogaNode = -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
protected StandardElement(){
|
||||||
|
this.yogaNode = Yoga.YGNodeNew();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getWidth() {
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getHeight() {
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPositionX() {
|
||||||
|
return internalPositionX;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPositionY() {
|
||||||
|
return internalPositionY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setWidth(int width) {
|
||||||
|
this.internalWidth = width;
|
||||||
|
this.width = width;
|
||||||
|
Yoga.YGNodeStyleSetWidth(this.yogaNode, width);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setHeight(int height) {
|
||||||
|
this.internalHeight = height;
|
||||||
|
this.height = height;
|
||||||
|
Yoga.YGNodeStyleSetHeight(this.yogaNode, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPositionX(int posX) {
|
||||||
|
this.positionX = posX;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
|
||||||
|
public void setPositionY(int posY) {
|
||||||
|
this.positionY = posY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setParentWidth(int width) {
|
||||||
|
this.parentWidth = width;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setParentHeight(int height) {
|
||||||
|
this.parentHeight = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMarginTop(int marginTop){
|
||||||
|
Yoga.YGNodeStyleSetMargin(this.yogaNode, Yoga.YGEdgeTop, marginTop);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMarginRight(int marginRight){
|
||||||
|
Yoga.YGNodeStyleSetMargin(this.yogaNode, Yoga.YGEdgeRight, marginRight);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMarginBottom(int marginBottom){
|
||||||
|
Yoga.YGNodeStyleSetMargin(this.yogaNode, Yoga.YGEdgeBottom, marginBottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMarginLeft(int marginLeft){
|
||||||
|
Yoga.YGNodeStyleSetMargin(this.yogaNode, Yoga.YGEdgeLeft, marginLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getInternalX(){
|
||||||
|
return internalPositionX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getInternalY(){
|
||||||
|
return internalPositionY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getInternalWidth(){
|
||||||
|
return internalWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int getInternalHeight(){
|
||||||
|
return internalHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy(){
|
||||||
|
Yoga.YGNodeFree(this.yogaNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getYogaNode() {
|
||||||
|
return yogaNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void applyYoga() {
|
||||||
|
//get the values from yoga
|
||||||
|
float leftRaw = Yoga.YGNodeLayoutGetLeft(yogaNode);
|
||||||
|
float topRaw = Yoga.YGNodeLayoutGetTop(yogaNode);
|
||||||
|
float widthRaw = Yoga.YGNodeLayoutGetWidth(yogaNode);
|
||||||
|
float heightRaw = Yoga.YGNodeLayoutGetHeight(yogaNode);
|
||||||
|
//apply the values to this component
|
||||||
|
this.internalPositionX = (int)leftRaw;
|
||||||
|
this.internalPositionY = (int)topRaw;
|
||||||
|
this.internalWidth = (int)widthRaw;
|
||||||
|
this.internalHeight = (int)heightRaw;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean handleEvent(Event event) {
|
||||||
|
boolean propagate = true;
|
||||||
|
return propagate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMaxWidth(int width) {
|
||||||
|
Yoga.YGNodeStyleSetMaxWidth(yogaNode, width);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMaxHeight(int height) {
|
||||||
|
Yoga.YGNodeStyleSetMaxHeight(yogaNode, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMinWidth(int width) {
|
||||||
|
Yoga.YGNodeStyleSetMinWidth(yogaNode, width);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMinHeight(int height) {
|
||||||
|
Yoga.YGNodeStyleSetMinHeight(yogaNode, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -4,6 +4,7 @@ import java.util.LinkedList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
|
import org.lwjgl.util.yoga.Yoga;
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.renderer.OpenGLState;
|
import electrosphere.renderer.OpenGLState;
|
||||||
@ -19,19 +20,8 @@ import electrosphere.renderer.ui.events.MenuEvent;
|
|||||||
import electrosphere.renderer.ui.events.ValueChangeEvent;
|
import electrosphere.renderer.ui.events.ValueChangeEvent;
|
||||||
import electrosphere.renderer.ui.events.MenuEvent.MenuEventType;
|
import electrosphere.renderer.ui.events.MenuEvent.MenuEventType;
|
||||||
import electrosphere.renderer.ui.font.Font;
|
import electrosphere.renderer.ui.font.Font;
|
||||||
import electrosphere.renderer.ui.font.FontUtils;
|
|
||||||
import electrosphere.renderer.ui.font.bitmapchar.BitmapCharacter;
|
|
||||||
|
|
||||||
public class StringCarousel implements DrawableElement, MenuEventElement, FocusableElement, ValueElement {
|
public class StringCarousel extends StandardContainerElement implements DrawableElement, MenuEventElement, FocusableElement, ValueElement {
|
||||||
|
|
||||||
public int width = 1;
|
|
||||||
public int height = 1;
|
|
||||||
|
|
||||||
public int positionX = 0;
|
|
||||||
public int positionY = 0;
|
|
||||||
|
|
||||||
public int parentWidth = 1;
|
|
||||||
public int parentHeight = 1;
|
|
||||||
|
|
||||||
public boolean visible = false;
|
public boolean visible = false;
|
||||||
|
|
||||||
@ -49,17 +39,14 @@ public class StringCarousel implements DrawableElement, MenuEventElement, Focusa
|
|||||||
|
|
||||||
float fontSize = 1.0f;
|
float fontSize = 1.0f;
|
||||||
|
|
||||||
List<BitmapCharacter> childrenElements = new LinkedList<BitmapCharacter>();
|
|
||||||
|
|
||||||
Font font;
|
Font font;
|
||||||
|
|
||||||
public StringCarousel(int x, int y, float fontSize){
|
public StringCarousel(int x, int y, float fontSize){
|
||||||
this.positionX = x;
|
super();
|
||||||
this.positionY = y;
|
|
||||||
this.width = 0;
|
|
||||||
this.font = Globals.fontManager.getFont("default");
|
this.font = Globals.fontManager.getFont("default");
|
||||||
this.height = (int)(font.getFontHeight() * fontSize);
|
|
||||||
this.fontSize = fontSize;
|
this.fontSize = fontSize;
|
||||||
|
Yoga.YGNodeStyleSetMinHeight(this.yogaNode, font.imageHeight * fontSize);
|
||||||
|
Yoga.YGNodeStyleSetMinWidth(this.yogaNode, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addOption(String option){
|
public void addOption(String option){
|
||||||
@ -85,14 +72,16 @@ public class StringCarousel implements DrawableElement, MenuEventElement, Focusa
|
|||||||
}
|
}
|
||||||
|
|
||||||
void generateLetters(){
|
void generateLetters(){
|
||||||
childrenElements.clear();
|
for(Element el : getChildren()){
|
||||||
int rollingOffset = 0;
|
Yoga.YGNodeRemoveChild(this.yogaNode,el.getYogaNode());
|
||||||
|
el.destroy();
|
||||||
|
}
|
||||||
|
childList.clear();
|
||||||
for(int i = 0; i < textCurrent.length(); i++){
|
for(int i = 0; i < textCurrent.length(); i++){
|
||||||
char toDraw = textCurrent.charAt(i);
|
char toDraw = textCurrent.charAt(i);
|
||||||
Vector3f bitMapDimension = this.font.getDimensionOfCharacterDiscrete(toDraw);
|
Vector3f bitMapDimension = this.font.getDimensionOfCharacterDiscrete(toDraw);
|
||||||
BitmapCharacter newLetter = new BitmapCharacter(this.font,(int)(rollingOffset * fontSize) + positionX, positionY, (int)(bitMapDimension.x * fontSize), this.height, toDraw);
|
BitmapCharacter newLetter = new BitmapCharacter(this.font,(int)(bitMapDimension.x * fontSize), this.height, toDraw);
|
||||||
rollingOffset += (int)bitMapDimension.x;
|
addChild(newLetter);
|
||||||
childrenElements.add(newLetter);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,8 +99,8 @@ public class StringCarousel implements DrawableElement, MenuEventElement, Focusa
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setColor(Vector3f color){
|
public void setColor(Vector3f color){
|
||||||
for(BitmapCharacter character : childrenElements){
|
for(Element character : childList){
|
||||||
character.setColor(color);
|
((BitmapCharacter)character).setColor(color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,130 +109,28 @@ public class StringCarousel implements DrawableElement, MenuEventElement, Focusa
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentWidth, int parentHeight) {
|
public void draw(
|
||||||
for(DrawableElement child : childrenElements){
|
RenderPipelineState renderPipelineState,
|
||||||
child.draw(renderPipelineState, openGLState, parentFramebufferPointer, parentWidth, parentHeight);
|
OpenGLState openGLState,
|
||||||
|
int parentFramebufferPointer,
|
||||||
|
int parentPosX,
|
||||||
|
int parentPosY,
|
||||||
|
int parentWidth,
|
||||||
|
int parentHeight
|
||||||
|
) {
|
||||||
|
for(Element child : childList){
|
||||||
|
((DrawableElement)child).draw(renderPipelineState, openGLState, parentFramebufferPointer, parentPosX + this.internalPositionX, parentPosY + this.internalPositionY, parentWidth, parentHeight);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getWidth() {
|
|
||||||
int minX = -1;
|
|
||||||
int maxX = -1;
|
|
||||||
for(BitmapCharacter child : childrenElements){
|
|
||||||
if(minX == -1){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
} else if(child.getPositionX() < minX){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
}
|
|
||||||
if(maxX == -1){
|
|
||||||
maxX = child.getPositionX() + child.getWidth();
|
|
||||||
} else if(child.getPositionX() + child.getWidth() > maxX){
|
|
||||||
maxX = child.getPositionX() + child.getWidth();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minX == -1){
|
|
||||||
minX = 0;
|
|
||||||
}
|
|
||||||
if(maxX == -1){
|
|
||||||
maxX = 0;
|
|
||||||
}
|
|
||||||
return maxX - minX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getHeight() {
|
|
||||||
int minY = -1;
|
|
||||||
int maxY = -1;
|
|
||||||
for(BitmapCharacter child : childrenElements){
|
|
||||||
if(minY == -1){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
} else if(child.getPositionY() < minY){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
}
|
|
||||||
if(maxY == -1){
|
|
||||||
maxY = child.getPositionY() + child.getHeight();
|
|
||||||
} else if(child.getPositionY() + child.getHeight() > maxY){
|
|
||||||
maxY = child.getPositionY() + child.getHeight();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minY == -1){
|
|
||||||
minY = 0;
|
|
||||||
}
|
|
||||||
if(maxY == -1){
|
|
||||||
maxY = 0;
|
|
||||||
}
|
|
||||||
return maxY - minY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionX() {
|
|
||||||
int minX = -1;
|
|
||||||
for(BitmapCharacter child : childrenElements){
|
|
||||||
if(minX == -1){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
} else if(child.getPositionX() < minX){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minX == -1){
|
|
||||||
minX = 0;
|
|
||||||
}
|
|
||||||
return minX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionY() {
|
|
||||||
int minY = -1;
|
|
||||||
for(BitmapCharacter child : childrenElements){
|
|
||||||
if(minY == -1){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
} else if(child.getPositionY() < minY){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minY == -1){
|
|
||||||
minY = 0;
|
|
||||||
}
|
|
||||||
return minY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getVisible() {
|
public boolean getVisible() {
|
||||||
return visible;
|
return visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setWidth(int width) {
|
|
||||||
this.width = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHeight(int height) {
|
|
||||||
this.height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionX(int posX) {
|
|
||||||
int deltaX = posX - this.positionX;
|
|
||||||
this.positionX = posX;
|
|
||||||
for(Element child : childrenElements){
|
|
||||||
child.setPositionX(child.getPositionX() + deltaX);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionY(int posY) {
|
|
||||||
int deltaY = posY - this.positionY;
|
|
||||||
this.positionY = posY;
|
|
||||||
for(Element child : childrenElements){
|
|
||||||
child.setPositionY(child.getPositionY() + deltaY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setVisible(boolean draw) {
|
public void setVisible(boolean draw) {
|
||||||
this.visible = draw;
|
this.visible = draw;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setParentWidth(int width){
|
|
||||||
parentWidth = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setParentHeight(int height){
|
|
||||||
this.parentHeight = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean handleEvent(Event event){
|
public boolean handleEvent(Event event){
|
||||||
boolean propagate = true;
|
boolean propagate = true;
|
||||||
if(event instanceof MenuEvent){
|
if(event instanceof MenuEvent){
|
||||||
|
|||||||
@ -1,16 +1,12 @@
|
|||||||
package electrosphere.renderer.ui.elements;
|
package electrosphere.renderer.ui.elements;
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
|
||||||
import electrosphere.engine.assetmanager.AssetDataStrings;
|
|
||||||
import electrosphere.renderer.OpenGLState;
|
import electrosphere.renderer.OpenGLState;
|
||||||
import electrosphere.renderer.RenderPipelineState;
|
import electrosphere.renderer.RenderPipelineState;
|
||||||
import electrosphere.renderer.model.Model;
|
|
||||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||||
import electrosphere.renderer.ui.events.Event;
|
import electrosphere.renderer.ui.events.Event;
|
||||||
import electrosphere.renderer.ui.font.FontUtils;
|
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
|
|
||||||
public class TextBox implements DrawableElement {
|
public class TextBox extends StandardContainerElement implements DrawableElement {
|
||||||
|
|
||||||
|
|
||||||
String text;
|
String text;
|
||||||
@ -19,19 +15,13 @@ public class TextBox implements DrawableElement {
|
|||||||
Vector3f scalar;
|
Vector3f scalar;
|
||||||
|
|
||||||
public TextBox(int positionX, int positionY, int width, int height, String text, boolean render, boolean editable) {
|
public TextBox(int positionX, int positionY, int width, int height, String text, boolean render, boolean editable) {
|
||||||
this.positionX = positionX;
|
super();
|
||||||
this.positionY = positionY;
|
|
||||||
this.width = width;
|
|
||||||
this.height = height;
|
|
||||||
this.text = text;
|
this.text = text;
|
||||||
scalar = new Vector3f(1,1,1);
|
scalar = new Vector3f(1,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TextBox(int positionX, int positionY, int width, int height, String text, boolean render, boolean editable, Vector3f scalar) {
|
public TextBox(int positionX, int positionY, int width, int height, String text, boolean render, boolean editable, Vector3f scalar) {
|
||||||
this.positionX = positionX;
|
super();
|
||||||
this.positionY = positionY;
|
|
||||||
this.width = width;
|
|
||||||
this.height = height;
|
|
||||||
this.text = text;
|
this.text = text;
|
||||||
this.scalar = scalar;
|
this.scalar = scalar;
|
||||||
}
|
}
|
||||||
@ -54,7 +44,15 @@ public class TextBox implements DrawableElement {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentWidth, int parentHeight){
|
public void draw(
|
||||||
|
RenderPipelineState renderPipelineState,
|
||||||
|
OpenGLState openGLState,
|
||||||
|
int parentFramebufferPointer,
|
||||||
|
int parentPosX,
|
||||||
|
int parentPosY,
|
||||||
|
int parentWidth,
|
||||||
|
int parentHeight
|
||||||
|
){
|
||||||
throw new UnsupportedOperationException("Transparent Text box draw function not implemented yet oop");
|
throw new UnsupportedOperationException("Transparent Text box draw function not implemented yet oop");
|
||||||
// float ndcX = (float)positionX/Globals.WINDOW_WIDTH;
|
// float ndcX = (float)positionX/Globals.WINDOW_WIDTH;
|
||||||
// float ndcY = (float)positionY/Globals.WINDOW_HEIGHT;
|
// float ndcY = (float)positionY/Globals.WINDOW_HEIGHT;
|
||||||
@ -86,65 +84,14 @@ public class TextBox implements DrawableElement {
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
public int width = 1;
|
|
||||||
public int height = 1;
|
|
||||||
|
|
||||||
public int positionX = 0;
|
|
||||||
public int positionY = 0;
|
|
||||||
|
|
||||||
public int parentWidth = 1;
|
|
||||||
public int parentHeight = 1;
|
|
||||||
|
|
||||||
public boolean visible = false;
|
|
||||||
|
|
||||||
public int getWidth() {
|
|
||||||
return width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getHeight() {
|
|
||||||
return height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionX() {
|
|
||||||
return positionX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionY() {
|
|
||||||
return positionY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getVisible() {
|
public boolean getVisible() {
|
||||||
return visible;
|
return visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setWidth(int width) {
|
|
||||||
this.width = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHeight(int height) {
|
|
||||||
this.height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionX(int positionX) {
|
|
||||||
this.positionX = positionX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionY(int positionY) {
|
|
||||||
this.positionY = positionY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setVisible(boolean draw) {
|
public void setVisible(boolean draw) {
|
||||||
this.visible = draw;
|
this.visible = draw;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setParentWidth(int width){
|
|
||||||
parentWidth = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setParentHeight(int height){
|
|
||||||
this.parentHeight = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean handleEvent(Event event){
|
public boolean handleEvent(Event event){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,47 +1,39 @@
|
|||||||
package electrosphere.renderer.ui.elements;
|
package electrosphere.renderer.ui.elements;
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.engine.assetmanager.AssetDataStrings;
|
import electrosphere.logger.LoggerInterface;
|
||||||
import electrosphere.renderer.OpenGLState;
|
import electrosphere.renderer.OpenGLState;
|
||||||
import electrosphere.renderer.RenderPipelineState;
|
import electrosphere.renderer.RenderPipelineState;
|
||||||
import electrosphere.renderer.framebuffer.Framebuffer;
|
|
||||||
import electrosphere.renderer.framebuffer.FramebufferUtils;
|
|
||||||
import electrosphere.renderer.model.Material;
|
import electrosphere.renderer.model.Material;
|
||||||
import electrosphere.renderer.model.Model;
|
import electrosphere.renderer.model.Model;
|
||||||
import electrosphere.renderer.texture.Texture;
|
import electrosphere.renderer.texture.Texture;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.ClickableElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.Element;
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
import electrosphere.renderer.ui.elementtypes.FocusableElement;
|
import electrosphere.renderer.ui.elementtypes.FocusableElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.KeyEventElement;
|
import electrosphere.renderer.ui.elementtypes.KeyEventElement;
|
||||||
|
import electrosphere.renderer.ui.events.ClickEvent;
|
||||||
import electrosphere.renderer.ui.events.Event;
|
import electrosphere.renderer.ui.events.Event;
|
||||||
import electrosphere.renderer.ui.events.FocusEvent;
|
import electrosphere.renderer.ui.events.FocusEvent;
|
||||||
import electrosphere.renderer.ui.events.KeyboardEvent;
|
import electrosphere.renderer.ui.events.KeyboardEvent;
|
||||||
import electrosphere.renderer.ui.font.Font;
|
import electrosphere.renderer.ui.font.Font;
|
||||||
import electrosphere.renderer.ui.font.FontUtils;
|
|
||||||
import electrosphere.renderer.ui.font.bitmapchar.BitmapCharacter;
|
|
||||||
|
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
import static org.lwjgl.opengl.GL30.GL_FRAMEBUFFER;
|
import org.lwjgl.opengl.GL30;
|
||||||
import static org.lwjgl.opengl.GL30.glBindFramebuffer;
|
import org.lwjgl.util.yoga.Yoga;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* A Text input
|
||||||
* @author amaterasu
|
|
||||||
*/
|
*/
|
||||||
public class TextInput implements DrawableElement, FocusableElement, KeyEventElement {
|
public class TextInput extends StandardContainerElement implements DrawableElement, FocusableElement, KeyEventElement, ClickableElement {
|
||||||
|
|
||||||
public int width = 1;
|
Vector3f boxPosition = new Vector3f();
|
||||||
public int height = 1;
|
Vector3f boxDimensions = new Vector3f();
|
||||||
|
Vector3f texPosition = new Vector3f(0,0,0);
|
||||||
public int positionX = 0;
|
Vector3f texScale = new Vector3f(1,1,0);
|
||||||
public int positionY = 0;
|
Material customMat = new Material();
|
||||||
|
|
||||||
public int parentWidth = 1;
|
|
||||||
public int parentHeight = 1;
|
|
||||||
|
|
||||||
public boolean visible = false;
|
public boolean visible = false;
|
||||||
|
|
||||||
@ -49,6 +41,7 @@ public class TextInput implements DrawableElement, FocusableElement, KeyEventEle
|
|||||||
FocusEventCallback onFocusCallback;
|
FocusEventCallback onFocusCallback;
|
||||||
FocusEventCallback onLoseFocusCallback;
|
FocusEventCallback onLoseFocusCallback;
|
||||||
KeyboardEventCallback onKeyPressCallback;
|
KeyboardEventCallback onKeyPressCallback;
|
||||||
|
ClickEventCallback onClickCallback;
|
||||||
Vector3f color;
|
Vector3f color;
|
||||||
|
|
||||||
String text = "";
|
String text = "";
|
||||||
@ -56,30 +49,38 @@ public class TextInput implements DrawableElement, FocusableElement, KeyEventEle
|
|||||||
|
|
||||||
float fontSize = 1.0f;
|
float fontSize = 1.0f;
|
||||||
|
|
||||||
List<BitmapCharacter> childrenElements = new LinkedList<BitmapCharacter>();
|
|
||||||
|
|
||||||
Font font;
|
Font font;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param x
|
||||||
|
* @param y
|
||||||
|
* @param fontSize
|
||||||
|
*/
|
||||||
public TextInput(int x, int y, float fontSize){
|
public TextInput(int x, int y, float fontSize){
|
||||||
this.positionX = x;
|
super();
|
||||||
this.positionY = y;
|
|
||||||
this.width = 0;
|
|
||||||
this.font = Globals.fontManager.getFont("default");
|
this.font = Globals.fontManager.getFont("default");
|
||||||
this.height = (int)(this.font.getFontHeight() * fontSize);
|
|
||||||
this.fontSize = fontSize;
|
this.fontSize = fontSize;
|
||||||
this.color = new Vector3f(1,1,1);
|
this.color = new Vector3f(1,1,1);
|
||||||
|
setHeight((int)(font.getFontHeight() * fontSize));
|
||||||
|
Yoga.YGNodeStyleSetFlexDirection(this.yogaNode, Yoga.YGFlexDirectionRow);
|
||||||
|
Yoga.YGNodeStyleSetMinHeight(this.yogaNode, font.imageHeight * fontSize);
|
||||||
|
Yoga.YGNodeStyleSetMinWidth(this.yogaNode, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void generateLetters(){
|
void generateLetters(){
|
||||||
childrenElements.clear();
|
for(Element el : getChildren()){
|
||||||
int rollingOffset = 0;
|
Yoga.YGNodeRemoveChild(this.yogaNode,el.getYogaNode());
|
||||||
|
el.destroy();
|
||||||
|
}
|
||||||
|
childList.clear();
|
||||||
for(int i = 0; i < text.length(); i++){
|
for(int i = 0; i < text.length(); i++){
|
||||||
char toDraw = text.charAt(i);
|
char toDraw = text.charAt(i);
|
||||||
Vector3f bitMapDimension = this.font.getDimensionOfCharacterDiscrete(toDraw);
|
Vector3f bitMapDimension = this.font.getDimensionOfCharacterDiscrete(toDraw);
|
||||||
BitmapCharacter newLetter = new BitmapCharacter(this.font,(int)(rollingOffset * fontSize) + positionX, positionY, (int)(bitMapDimension.x * fontSize), this.height, toDraw);
|
BitmapCharacter newLetter = new BitmapCharacter(this.font,(int)(bitMapDimension.x * fontSize), this.height, toDraw);
|
||||||
newLetter.setColor(color);
|
newLetter.setColor(color);
|
||||||
rollingOffset += (int)bitMapDimension.x;
|
this.addChild(newLetter);
|
||||||
childrenElements.add(newLetter);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,8 +96,8 @@ public class TextInput implements DrawableElement, FocusableElement, KeyEventEle
|
|||||||
|
|
||||||
public void setColor(Vector3f color){
|
public void setColor(Vector3f color){
|
||||||
this.color.set(color);
|
this.color.set(color);
|
||||||
for(BitmapCharacter character : childrenElements){
|
for(Element character : childList){
|
||||||
character.setColor(color);
|
((BitmapCharacter)character).setColor(color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,138 +106,70 @@ public class TextInput implements DrawableElement, FocusableElement, KeyEventEle
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentWidth, int parentHeight) {
|
public void draw(
|
||||||
for(DrawableElement child : childrenElements){
|
RenderPipelineState renderPipelineState,
|
||||||
child.draw(renderPipelineState, openGLState, parentFramebufferPointer, parentWidth, parentHeight);
|
OpenGLState openGLState,
|
||||||
}
|
int parentFramebufferPointer,
|
||||||
}
|
int parentPosX,
|
||||||
|
int parentPosY,
|
||||||
|
int parentWidth,
|
||||||
|
int parentHeight
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
//Draw decorations
|
||||||
|
|
||||||
public int getWidth() {
|
float ndcWidth = (float)getInternalWidth()/parentWidth;
|
||||||
int minX = -1;
|
float ndcHeight = (float)getInternalHeight()/parentHeight;
|
||||||
int maxX = -1;
|
float ndcX = (float)(getInternalX() + parentPosX)/parentWidth;
|
||||||
for(BitmapCharacter child : childrenElements){
|
float ndcY = (float)(getInternalY() + parentPosY)/parentHeight;
|
||||||
if(minX == -1){
|
boxPosition = new Vector3f(ndcX,ndcY,0);
|
||||||
minX = child.getPositionX();
|
boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
||||||
} else if(child.getPositionX() < minX){
|
|
||||||
minX = child.getPositionX();
|
Model planeModel = Globals.assetManager.fetchModel(Globals.imagePlaneModelID);
|
||||||
}
|
Texture windowFrame = null;
|
||||||
if(maxX == -1){
|
if(this.isFocused()){
|
||||||
maxX = child.getPositionX() + child.getWidth();
|
windowFrame = Globals.assetManager.fetchTexture("Textures/ui/uiFrame2.png");
|
||||||
} else if(child.getPositionX() + child.getWidth() > maxX){
|
} else {
|
||||||
maxX = child.getPositionX() + child.getWidth();
|
windowFrame = Globals.assetManager.fetchTexture("Textures/ui/uiFrame1.png");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if(minX == -1){
|
|
||||||
minX = 0;
|
|
||||||
}
|
|
||||||
if(maxX == -1){
|
|
||||||
maxX = 0;
|
|
||||||
}
|
|
||||||
return maxX - minX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getHeight() {
|
//this call binds the screen as the "texture" we're rendering to
|
||||||
int minY = -1;
|
//have to call before actually rendering
|
||||||
int maxY = -1;
|
GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, parentFramebufferPointer);
|
||||||
for(BitmapCharacter child : childrenElements){
|
openGLState.glViewport(parentWidth, parentHeight);
|
||||||
if(minY == -1){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
} else if(child.getPositionY() < minY){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
}
|
|
||||||
if(maxY == -1){
|
|
||||||
maxY = child.getPositionY() + child.getHeight();
|
|
||||||
} else if(child.getPositionY() + child.getHeight() > maxY){
|
|
||||||
maxY = child.getPositionY() + child.getHeight();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minY == -1){
|
|
||||||
minY = 0;
|
|
||||||
}
|
|
||||||
if(maxY == -1){
|
|
||||||
maxY = 0;
|
|
||||||
}
|
|
||||||
return maxY - minY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionX() {
|
//error if assets are null
|
||||||
int minX = -1;
|
if(planeModel == null || windowFrame == null){
|
||||||
for(BitmapCharacter child : childrenElements){
|
LoggerInterface.loggerRenderer.ERROR("Window unable to find plane model or window frame!!", new Exception());
|
||||||
if(minX == -1){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
} else if(child.getPositionX() < minX){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if(minX == -1){
|
|
||||||
if(positionX == 0){
|
|
||||||
minX = 0;
|
|
||||||
} else {
|
|
||||||
minX = positionX;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return minX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionY() {
|
//render background of window
|
||||||
int minY = -1;
|
if(planeModel != null && windowFrame != null){
|
||||||
for(BitmapCharacter child : childrenElements){
|
planeModel.pushUniformToMesh("plane", "mPosition", boxPosition);
|
||||||
if(minY == -1){
|
planeModel.pushUniformToMesh("plane", "mDimension", boxDimensions);
|
||||||
minY = child.getPositionY();
|
planeModel.pushUniformToMesh("plane", "tPosition", texPosition);
|
||||||
} else if(child.getPositionY() < minY){
|
planeModel.pushUniformToMesh("plane", "tDimension", texScale);
|
||||||
minY = child.getPositionY();
|
customMat.setTexturePointer(windowFrame.getTexturePointer());
|
||||||
}
|
planeModel.getMeshes().get(0).setMaterial(customMat);
|
||||||
|
planeModel.drawUI();
|
||||||
}
|
}
|
||||||
if(minY == -1){
|
|
||||||
if(positionY == 0){
|
|
||||||
minY = 0;
|
//
|
||||||
} else {
|
//Draw children elements
|
||||||
minY = positionY;
|
for(Element child : childList){
|
||||||
}
|
((DrawableElement)child).draw(renderPipelineState, openGLState, parentFramebufferPointer, parentPosX + this.internalPositionX, parentPosY + this.internalPositionY, parentWidth, parentHeight);
|
||||||
}
|
}
|
||||||
return minY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getVisible() {
|
public boolean getVisible() {
|
||||||
return visible;
|
return visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setWidth(int width) {
|
|
||||||
this.width = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHeight(int height) {
|
|
||||||
this.height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionX(int posX) {
|
|
||||||
int deltaX = posX - this.positionX;
|
|
||||||
this.positionX = posX;
|
|
||||||
for(Element child : childrenElements){
|
|
||||||
child.setPositionX(child.getPositionX() + deltaX);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionY(int posY) {
|
|
||||||
int deltaY = posY - this.positionY;
|
|
||||||
this.positionY = posY;
|
|
||||||
for(Element child : childrenElements){
|
|
||||||
child.setPositionY(child.getPositionY() + deltaY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setVisible(boolean draw) {
|
public void setVisible(boolean draw) {
|
||||||
this.visible = draw;
|
this.visible = draw;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setParentWidth(int width){
|
|
||||||
parentWidth = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setParentHeight(int height){
|
|
||||||
this.parentHeight = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean handleEvent(Event event){
|
public boolean handleEvent(Event event){
|
||||||
boolean propagate = true;
|
boolean propagate = true;
|
||||||
if(event instanceof FocusEvent){
|
if(event instanceof FocusEvent){
|
||||||
@ -245,6 +178,7 @@ public class TextInput implements DrawableElement, FocusableElement, KeyEventEle
|
|||||||
if(this.onFocusCallback != null){
|
if(this.onFocusCallback != null){
|
||||||
this.onFocusCallback.execute(focusEvent);
|
this.onFocusCallback.execute(focusEvent);
|
||||||
} else {
|
} else {
|
||||||
|
this.focused = true;
|
||||||
this.setColor(new Vector3f(1,0,0));
|
this.setColor(new Vector3f(1,0,0));
|
||||||
propagate = false;
|
propagate = false;
|
||||||
}
|
}
|
||||||
@ -252,6 +186,7 @@ public class TextInput implements DrawableElement, FocusableElement, KeyEventEle
|
|||||||
if(this.onLoseFocusCallback != null){
|
if(this.onLoseFocusCallback != null){
|
||||||
this.onLoseFocusCallback.execute(focusEvent);
|
this.onLoseFocusCallback.execute(focusEvent);
|
||||||
} else {
|
} else {
|
||||||
|
this.focused = false;
|
||||||
this.setColor(new Vector3f(1,1,1));
|
this.setColor(new Vector3f(1,1,1));
|
||||||
propagate = false;
|
propagate = false;
|
||||||
}
|
}
|
||||||
@ -270,6 +205,14 @@ public class TextInput implements DrawableElement, FocusableElement, KeyEventEle
|
|||||||
}
|
}
|
||||||
propagate = false;
|
propagate = false;
|
||||||
}
|
}
|
||||||
|
} else if(event instanceof ClickEvent){
|
||||||
|
ClickEvent clickEvent = (ClickEvent)event;
|
||||||
|
if(onClickCallback != null){
|
||||||
|
onClickCallback.execute(clickEvent);
|
||||||
|
} else {
|
||||||
|
Globals.elementManager.focusElement(this);
|
||||||
|
propagate = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return propagate;
|
return propagate;
|
||||||
}
|
}
|
||||||
@ -293,5 +236,10 @@ public class TextInput implements DrawableElement, FocusableElement, KeyEventEle
|
|||||||
public void setOnPress(KeyboardEventCallback callback) {
|
public void setOnPress(KeyboardEventCallback callback) {
|
||||||
onKeyPressCallback = callback;
|
onKeyPressCallback = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setOnClick(ClickEventCallback callback) {
|
||||||
|
onClickCallback = callback;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,151 @@
|
|||||||
|
package electrosphere.renderer.ui.elements;
|
||||||
|
|
||||||
|
import org.lwjgl.util.yoga.Yoga;
|
||||||
|
|
||||||
|
import electrosphere.renderer.OpenGLState;
|
||||||
|
import electrosphere.renderer.RenderPipelineState;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.ScrollableElement;
|
||||||
|
import electrosphere.renderer.ui.events.Event;
|
||||||
|
import electrosphere.renderer.ui.events.ScrollEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A scrollable container that renders to it's parent framebuffer instead of a dedicated one
|
||||||
|
*/
|
||||||
|
public class VirtualScrollable extends StandardContainerElement implements DrawableElement, ScrollableElement {
|
||||||
|
|
||||||
|
//the current amount of scroll applied to this element
|
||||||
|
double scroll = 0;
|
||||||
|
|
||||||
|
//the scrollable callback
|
||||||
|
ScrollEventCallback callback;
|
||||||
|
|
||||||
|
//should we draw this element
|
||||||
|
boolean visible = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public VirtualScrollable(int width, int height){
|
||||||
|
super();
|
||||||
|
setWidth(width);
|
||||||
|
setHeight(height);
|
||||||
|
Yoga.YGNodeStyleSetOverflow(this.yogaNode, Yoga.YGOverflowScroll);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(
|
||||||
|
RenderPipelineState renderPipelineState,
|
||||||
|
OpenGLState openGLState,
|
||||||
|
int parentFramebufferPointer,
|
||||||
|
int parentPosX,
|
||||||
|
int parentPosY,
|
||||||
|
int parentWidth,
|
||||||
|
int parentHeight
|
||||||
|
) {
|
||||||
|
for(Element child : childList){
|
||||||
|
if(child instanceof DrawableElement){
|
||||||
|
DrawableElement drawableChild = (DrawableElement) child;
|
||||||
|
if(childIsInBounds(drawableChild)){
|
||||||
|
drawableChild.draw(
|
||||||
|
renderPipelineState,
|
||||||
|
openGLState,
|
||||||
|
parentFramebufferPointer,
|
||||||
|
parentPosX + internalPositionX,
|
||||||
|
(int)(parentPosY + internalPositionY + scroll),
|
||||||
|
parentWidth,
|
||||||
|
parentHeight
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if a given child element should be visible
|
||||||
|
* @param element the element
|
||||||
|
* @return true if visible, false otherwise
|
||||||
|
*/
|
||||||
|
private boolean childIsInBounds(DrawableElement element){
|
||||||
|
boolean rVal = true;
|
||||||
|
if(element.getInternalY() + scroll < 0 ||element.getInternalY() + scroll > this.height){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return rVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean getVisible() {
|
||||||
|
return visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setVisible(boolean draw) {
|
||||||
|
this.visible = draw;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setWidth(int width) {
|
||||||
|
this.internalWidth = width;
|
||||||
|
this.width = width;
|
||||||
|
Yoga.YGNodeStyleSetWidth(this.yogaNode, width);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setHeight(int height) {
|
||||||
|
this.internalHeight = height;
|
||||||
|
this.height = height;
|
||||||
|
Yoga.YGNodeStyleSetHeight(this.yogaNode, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getChildOffsetY(){
|
||||||
|
return (int)scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setOnScrollCallback(ScrollEventCallback callback) {
|
||||||
|
this.callback = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default handling for the scroll event
|
||||||
|
* @param event The scroll event
|
||||||
|
*/
|
||||||
|
private void defaultScrollHandling(ScrollEvent event){
|
||||||
|
scroll = scroll + event.getScrollAmount();
|
||||||
|
if(scroll > 0){
|
||||||
|
scroll = 0;
|
||||||
|
}
|
||||||
|
//calculate max scroll
|
||||||
|
double maxScroll = 0;
|
||||||
|
for(Element child : this.getChildren()){
|
||||||
|
if(child.getInternalY() + child.getInternalHeight() > maxScroll){
|
||||||
|
maxScroll = child.getInternalY() + child.getInternalHeight() - this.internalHeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(scroll < - maxScroll){
|
||||||
|
scroll = -maxScroll;
|
||||||
|
}
|
||||||
|
for(Element childElement : this.getChildren()){
|
||||||
|
childElement.setPositionX((int)(childElement.getInternalX() + scroll));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean handleEvent(Event event){
|
||||||
|
boolean propagate = true;
|
||||||
|
if(event instanceof ScrollEvent){
|
||||||
|
ScrollEvent scrollEvent = (ScrollEvent)event;
|
||||||
|
if(callback != null){
|
||||||
|
propagate = callback.execute(scrollEvent);
|
||||||
|
} else {
|
||||||
|
defaultScrollHandling(scrollEvent);
|
||||||
|
propagate = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return propagate;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -2,12 +2,66 @@ package electrosphere.renderer.ui.elementtypes;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An element that can contain other elements (label, button, div, etc)
|
||||||
|
*/
|
||||||
public interface ContainerElement extends Element {
|
public interface ContainerElement extends Element {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a child element to this element
|
||||||
|
* @param child The child element
|
||||||
|
*/
|
||||||
public void addChild(Element child);
|
public void addChild(Element child);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the list of children elements
|
||||||
|
* @return The list of child elements
|
||||||
|
*/
|
||||||
public List<Element> getChildren();
|
public List<Element> getChildren();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a child from this element
|
||||||
|
* @param child The child
|
||||||
|
*/
|
||||||
public void removeChild(Element child);
|
public void removeChild(Element child);
|
||||||
|
|
||||||
|
//gets the offset applied to all children
|
||||||
|
//ie if you scrolled up, how much are the children offset by that
|
||||||
|
public int getChildOffsetX();
|
||||||
|
public int getChildOffsetY();
|
||||||
|
|
||||||
|
//Gets the scaling applied to all children
|
||||||
|
public float getChildScaleX();
|
||||||
|
public float getChildScaleY();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the flex layout order of this component
|
||||||
|
* @param layout The order
|
||||||
|
*/
|
||||||
|
public void setDirection(int layout);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the flex direction
|
||||||
|
* @param layout the flex direction
|
||||||
|
*/
|
||||||
|
public void setFlexDirection(int layout);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the content justification of the container
|
||||||
|
* @param justification The spacing value
|
||||||
|
*/
|
||||||
|
public void setJustifyContent(int justification);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the item alignment
|
||||||
|
* @param alignment The alignment style
|
||||||
|
*/
|
||||||
|
public void setAlignItems(int alignment);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the content alignment
|
||||||
|
* @param alignment the alignment style
|
||||||
|
*/
|
||||||
|
public void setAlignContent(int alignment);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,16 +4,33 @@ import electrosphere.renderer.OpenGLState;
|
|||||||
import electrosphere.renderer.RenderPipelineState;
|
import electrosphere.renderer.RenderPipelineState;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* A UI Element that is actually drawable to the screen
|
||||||
* @author amaterasu
|
|
||||||
*/
|
*/
|
||||||
public interface DrawableElement extends Element {
|
public interface DrawableElement extends Element {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets if the drawable is currently set to visible
|
||||||
|
* @return true if visible, false otherwise
|
||||||
|
*/
|
||||||
public boolean getVisible();
|
public boolean getVisible();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the visibility status of the element
|
||||||
|
* @param draw true for visible, false otherwise
|
||||||
|
*/
|
||||||
public void setVisible(boolean draw);
|
public void setVisible(boolean draw);
|
||||||
|
|
||||||
public abstract void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentWidth, int parentHeight);
|
/**
|
||||||
|
* Draws the element
|
||||||
|
* @param renderPipelineState The render pipeline state
|
||||||
|
* @param openGLState The opengl state
|
||||||
|
* @param parentFramebufferPointer The parent's framebuffer pointer
|
||||||
|
* @param parentPosX the parent's position x
|
||||||
|
* @param parentPosY the parent's position y
|
||||||
|
* @param parentWidth the parent's width
|
||||||
|
* @param parentHeight the parent's height
|
||||||
|
*/
|
||||||
|
public abstract void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentPosX, int parentPosY, int parentWidth, int parentHeight);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,27 +3,84 @@ package electrosphere.renderer.ui.elementtypes;
|
|||||||
import electrosphere.renderer.ui.events.Event;
|
import electrosphere.renderer.ui.events.Event;
|
||||||
|
|
||||||
public interface Element {
|
public interface Element {
|
||||||
|
|
||||||
|
//width and height
|
||||||
public int getWidth();
|
public int getWidth();
|
||||||
|
|
||||||
public int getHeight();
|
public int getHeight();
|
||||||
|
|
||||||
public int getPositionX();
|
|
||||||
|
|
||||||
public int getPositionY();
|
|
||||||
|
|
||||||
public void setWidth(int width);
|
public void setWidth(int width);
|
||||||
|
|
||||||
public void setHeight(int height);
|
public void setHeight(int height);
|
||||||
|
public void setMaxWidth(int width);
|
||||||
|
public void setMaxHeight(int height);
|
||||||
|
public void setMinWidth(int width);
|
||||||
|
public void setMinHeight(int height);
|
||||||
|
|
||||||
|
//position
|
||||||
|
public int getPositionX();
|
||||||
|
public int getPositionY();
|
||||||
public void setPositionX(int positionX);
|
public void setPositionX(int positionX);
|
||||||
|
|
||||||
public void setPositionY(int positionY);
|
public void setPositionY(int positionY);
|
||||||
|
|
||||||
|
//parent data
|
||||||
public void setParentWidth(int width);
|
public void setParentWidth(int width);
|
||||||
|
|
||||||
public void setParentHeight(int height);
|
public void setParentHeight(int height);
|
||||||
|
|
||||||
|
//margin
|
||||||
|
public void setMarginTop(int marginTop);
|
||||||
|
public void setMarginRight(int marginRight);
|
||||||
|
public void setMarginBottom(int marginBottom);
|
||||||
|
public void setMarginLeft(int marginLeft);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// I N T E R N A L
|
||||||
|
//
|
||||||
|
/**
|
||||||
|
* Gets the internal x position. This is the position x value used by the layout manager. It corresponds to what is actually displayed.
|
||||||
|
* @return The internal position x coordinate
|
||||||
|
*/
|
||||||
|
public int getInternalX();
|
||||||
|
/**
|
||||||
|
* Gets the internal y position. This is the position y value used by the layout manager. It corresponds to what is actually displayed.
|
||||||
|
* @return The internal position y coordinate
|
||||||
|
*/
|
||||||
|
public int getInternalY();
|
||||||
|
/**
|
||||||
|
* Gets the internal width. This is the width value used by the layout manager. It corresponds to what is actually displayed.
|
||||||
|
* @return The internal width
|
||||||
|
*/
|
||||||
|
public int getInternalWidth();
|
||||||
|
/**
|
||||||
|
* Gets the internal height. This is the height value used by the layout manager. It corresponds to what is actually displayed.
|
||||||
|
* @return The internal height
|
||||||
|
*/
|
||||||
|
public int getInternalHeight();
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
//Maintenance related
|
||||||
|
//
|
||||||
|
public void destroy();
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Y O G A
|
||||||
|
//
|
||||||
|
/**
|
||||||
|
* Gets the yoga node id
|
||||||
|
* @return the yoga node id
|
||||||
|
*/
|
||||||
|
public long getYogaNode();
|
||||||
|
/**
|
||||||
|
* Applies the yoga values to this component
|
||||||
|
*/
|
||||||
|
public void applyYoga();
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// E V E N T S
|
||||||
|
//
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param event the even to handle
|
* @param event the even to handle
|
||||||
|
|||||||
@ -0,0 +1,30 @@
|
|||||||
|
package electrosphere.renderer.ui.elementtypes;
|
||||||
|
|
||||||
|
import electrosphere.renderer.ui.events.ScrollEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An element that accepts scroll event
|
||||||
|
*/
|
||||||
|
public interface ScrollableElement extends Element {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the scroll event handler for the element
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
public void setOnScrollCallback(ScrollEventCallback callback);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A callback that handles scroll events
|
||||||
|
*/
|
||||||
|
public interface ScrollEventCallback {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param event
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean execute(ScrollEvent event);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,5 +1,8 @@
|
|||||||
package electrosphere.renderer.ui.events;
|
package electrosphere.renderer.ui.events;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A UI Event
|
||||||
|
*/
|
||||||
public interface Event {
|
public interface Event {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,49 @@
|
|||||||
|
package electrosphere.renderer.ui.events;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fired when the user scrolls the mouse wheel
|
||||||
|
*/
|
||||||
|
public class ScrollEvent implements Event {
|
||||||
|
|
||||||
|
//the amount scrolled by
|
||||||
|
double scrollAmount;
|
||||||
|
|
||||||
|
double mouseX;
|
||||||
|
double mouseY;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param scrollAmount
|
||||||
|
*/
|
||||||
|
public ScrollEvent(double mouseX, double mouseY, double scrollAmount){
|
||||||
|
this.scrollAmount = scrollAmount;
|
||||||
|
this.mouseX = mouseX;
|
||||||
|
this.mouseY = mouseY;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the amount scrolled by
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public double getScrollAmount(){
|
||||||
|
return this.scrollAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the x position of the mouse
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public double getMouseX(){
|
||||||
|
return mouseX;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the y position of the mouse
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public double getMouseY(){
|
||||||
|
return mouseY;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -6,7 +6,6 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import electrosphere.logger.LoggerInterface;
|
import electrosphere.logger.LoggerInterface;
|
||||||
import electrosphere.renderer.model.Material;
|
|
||||||
import electrosphere.util.FileUtils;
|
import electrosphere.util.FileUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -93,7 +93,7 @@ public class FontUtils {
|
|||||||
imageHeight = Math.max(imageHeight, ch.getHeight());
|
imageHeight = Math.max(imageHeight, ch.getHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
int fontHeight = imageHeight;
|
// int fontHeight = imageHeight;
|
||||||
|
|
||||||
//create font bitmap
|
//create font bitmap
|
||||||
BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_ARGB);
|
BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_ARGB);
|
||||||
|
|||||||
@ -1,203 +0,0 @@
|
|||||||
package electrosphere.renderer.ui.form;
|
|
||||||
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import electrosphere.renderer.OpenGLState;
|
|
||||||
import electrosphere.renderer.RenderPipelineState;
|
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
|
||||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
|
||||||
import electrosphere.renderer.ui.elementtypes.Element;
|
|
||||||
import electrosphere.renderer.ui.events.Event;
|
|
||||||
|
|
||||||
public class FormElement implements DrawableElement, ContainerElement {
|
|
||||||
|
|
||||||
List<Element> childList = new LinkedList<Element>();
|
|
||||||
|
|
||||||
public void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentWidth, int parentHeight) {
|
|
||||||
for(Element child : childList){
|
|
||||||
if(child instanceof DrawableElement){
|
|
||||||
DrawableElement drawableChild = (DrawableElement) child;
|
|
||||||
drawableChild.draw(renderPipelineState,openGLState,parentFramebufferPointer,parentWidth,parentHeight);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int width = 1;
|
|
||||||
public int height = 1;
|
|
||||||
|
|
||||||
public int positionX = 0;
|
|
||||||
public int positionY = 0;
|
|
||||||
|
|
||||||
public int parentWidth = 1;
|
|
||||||
public int parentHeight = 1;
|
|
||||||
|
|
||||||
public boolean visible = false;
|
|
||||||
|
|
||||||
public boolean focused = false;
|
|
||||||
|
|
||||||
public void onFocus(){
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getWidth() {
|
|
||||||
int minX = -1;
|
|
||||||
int maxX = -1;
|
|
||||||
for(Element child : childList){
|
|
||||||
if(minX == -1){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
} else if(child.getPositionX() < minX){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
}
|
|
||||||
if(maxX == -1){
|
|
||||||
maxX = child.getPositionX() + child.getWidth();
|
|
||||||
} else if(child.getPositionX() + child.getWidth() > maxX){
|
|
||||||
maxX = child.getPositionX() + child.getWidth();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minX == -1){
|
|
||||||
minX = 0;
|
|
||||||
}
|
|
||||||
if(maxX == -1){
|
|
||||||
maxX = 0;
|
|
||||||
}
|
|
||||||
return maxX - minX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getHeight() {
|
|
||||||
int minY = -1;
|
|
||||||
int maxY = -1;
|
|
||||||
for(Element child : childList){
|
|
||||||
if(minY == -1){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
} else if(child.getPositionY() < minY){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
}
|
|
||||||
if(maxY == -1){
|
|
||||||
maxY = child.getPositionY() + child.getHeight();
|
|
||||||
} else if(child.getPositionY() + child.getHeight() > maxY){
|
|
||||||
maxY = child.getPositionY() + child.getHeight();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minY == -1){
|
|
||||||
minY = 0;
|
|
||||||
}
|
|
||||||
if(maxY == -1){
|
|
||||||
maxY = 0;
|
|
||||||
}
|
|
||||||
return maxY - minY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionX() {
|
|
||||||
int minX = -1;
|
|
||||||
for(Element child : childList){
|
|
||||||
if(minX == -1){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
} else if(child.getPositionX() < minX){
|
|
||||||
minX = child.getPositionX();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minX == -1){
|
|
||||||
minX = 0;
|
|
||||||
}
|
|
||||||
return minX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionY() {
|
|
||||||
int minY = -1;
|
|
||||||
for(Element child : childList){
|
|
||||||
if(minY == -1){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
} else if(child.getPositionY() < minY){
|
|
||||||
minY = child.getPositionY();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(minY == -1){
|
|
||||||
minY = 0;
|
|
||||||
}
|
|
||||||
return minY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getVisible() {
|
|
||||||
return visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isFocused(){
|
|
||||||
return focused;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setWidth(int width) {
|
|
||||||
this.width = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHeight(int height) {
|
|
||||||
this.height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionX(int positionX) {
|
|
||||||
this.positionX = positionX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionY(int positionY) {
|
|
||||||
this.positionY = positionY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setVisible(boolean draw) {
|
|
||||||
this.visible = draw;
|
|
||||||
for(Element child : childList){
|
|
||||||
if(child instanceof DrawableElement){
|
|
||||||
DrawableElement drawableChild = (DrawableElement) child;
|
|
||||||
drawableChild.setVisible(draw);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setParentWidth(int width){
|
|
||||||
parentWidth = width;
|
|
||||||
for(Element child : childList){
|
|
||||||
if(child instanceof DrawableElement){
|
|
||||||
DrawableElement drawableChild = (DrawableElement) child;
|
|
||||||
drawableChild.setParentWidth(width);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setParentHeight(int height){
|
|
||||||
this.parentHeight = height;
|
|
||||||
for(Element child : childList){
|
|
||||||
if(child instanceof DrawableElement){
|
|
||||||
DrawableElement drawableChild = (DrawableElement) child;
|
|
||||||
drawableChild.setParentWidth(width);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFocused(boolean focused){
|
|
||||||
this.focused = focused;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addChild(Element child) {
|
|
||||||
childList.add(child);
|
|
||||||
if(child instanceof DrawableElement){
|
|
||||||
DrawableElement drawableChild = (DrawableElement) child;
|
|
||||||
drawableChild.setParentWidth(width);
|
|
||||||
drawableChild.setParentHeight(height);
|
|
||||||
drawableChild.setVisible(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Element> getChildren() {
|
|
||||||
return childList;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeChild(Element child) {
|
|
||||||
childList.remove(child);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean handleEvent(Event event){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,10 +1,7 @@
|
|||||||
package electrosphere.renderer.ui.layout;
|
package electrosphere.renderer.ui.layout;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|||||||
@ -1,178 +0,0 @@
|
|||||||
package electrosphere.renderer.ui.layout;
|
|
||||||
|
|
||||||
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
|
||||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
|
||||||
import static org.lwjgl.opengl.GL11.glClear;
|
|
||||||
import static org.lwjgl.opengl.GL11.glClearColor;
|
|
||||||
import static org.lwjgl.opengl.GL30.GL_FRAMEBUFFER;
|
|
||||||
import static org.lwjgl.opengl.GL30.glBindFramebuffer;
|
|
||||||
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.joml.Vector3f;
|
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
|
||||||
import electrosphere.renderer.OpenGLState;
|
|
||||||
import electrosphere.renderer.RenderPipelineState;
|
|
||||||
import electrosphere.renderer.debug.DebugRendering;
|
|
||||||
import electrosphere.renderer.framebuffer.Framebuffer;
|
|
||||||
import electrosphere.renderer.framebuffer.FramebufferUtils;
|
|
||||||
import electrosphere.renderer.model.Material;
|
|
||||||
import electrosphere.renderer.model.Model;
|
|
||||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
|
||||||
import electrosphere.renderer.ui.elementtypes.Element;
|
|
||||||
import electrosphere.renderer.ui.events.Event;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author amaterasu
|
|
||||||
*/
|
|
||||||
public class LayoutSchemeListScrollable implements DrawableElement,LayoutScheme {
|
|
||||||
|
|
||||||
List<Element> childList = new LinkedList<Element>();
|
|
||||||
Framebuffer widgetBuffer = FramebufferUtils.generateScreensizeTextureFramebuffer();
|
|
||||||
Material customMat = new Material();
|
|
||||||
|
|
||||||
Vector3f boxPosition = new Vector3f();
|
|
||||||
Vector3f boxDimensions = new Vector3f();
|
|
||||||
Vector3f texPosition = new Vector3f(0,0,0);
|
|
||||||
Vector3f texScale = new Vector3f(1,1,0);
|
|
||||||
|
|
||||||
static final Vector3f windowDrawDebugColor = new Vector3f(0.0f,1.0f,0.0f);
|
|
||||||
|
|
||||||
public LayoutSchemeListScrollable(int positionX, int positionY, int width, int height, boolean draw){
|
|
||||||
customMat.setTexturePointer(widgetBuffer.getTexturePointer());
|
|
||||||
// customMat.setTexturePointer(Globals.assetManager.fetchTexture("Textures/Branch.png").getTexturePointer());
|
|
||||||
|
|
||||||
float ndcX = (float)positionX/Globals.WINDOW_WIDTH;
|
|
||||||
float ndcY = (float)positionY/Globals.WINDOW_HEIGHT;
|
|
||||||
float ndcWidth = (float)width/Globals.WINDOW_WIDTH;
|
|
||||||
float ndcHeight = (float)height/Globals.WINDOW_HEIGHT;
|
|
||||||
boxPosition = new Vector3f(ndcX,ndcY,0);
|
|
||||||
boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static float aaaa = 0;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentWidth, int parentHeight) {
|
|
||||||
widgetBuffer.bind();
|
|
||||||
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
||||||
for(Element child : childList){
|
|
||||||
if(child instanceof DrawableElement){
|
|
||||||
DrawableElement drawableChild = (DrawableElement) child;
|
|
||||||
drawableChild.draw(renderPipelineState,openGLState,widgetBuffer.getFramebufferPointer(),width,height);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//this call binds the screen as the "texture" we're rendering to
|
|
||||||
//have to call before actually rendering
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
|
||||||
aaaa = aaaa + 0.0005f;
|
|
||||||
if(aaaa > 1){
|
|
||||||
aaaa = -1;
|
|
||||||
}
|
|
||||||
texPosition.y = aaaa;
|
|
||||||
Model planeModel = Globals.assetManager.fetchModel(Globals.imagePlaneModelID);
|
|
||||||
planeModel.pushUniformToMesh("plane", "mPosition", boxPosition);
|
|
||||||
planeModel.pushUniformToMesh("plane", "mDimension", boxDimensions);
|
|
||||||
planeModel.pushUniformToMesh("plane", "tPosition", texPosition);
|
|
||||||
planeModel.pushUniformToMesh("plane", "tDimension", texScale);
|
|
||||||
planeModel.getMeshes().get(0).setMaterial(customMat);
|
|
||||||
planeModel.drawUI();
|
|
||||||
|
|
||||||
if(Globals.RENDER_FLAG_RENDER_UI_BOUNDS){
|
|
||||||
DebugRendering.drawUIBounds(parentFramebufferPointer, boxPosition, boxDimensions, windowDrawDebugColor);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void pack() {
|
|
||||||
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
|
||||||
}
|
|
||||||
|
|
||||||
public int width = 1;
|
|
||||||
public int height = 1;
|
|
||||||
|
|
||||||
public int positionX = 0;
|
|
||||||
public int positionY = 0;
|
|
||||||
|
|
||||||
public int parentWidth = 1;
|
|
||||||
public int parentHeight = 1;
|
|
||||||
|
|
||||||
public boolean visible = false;
|
|
||||||
|
|
||||||
public int getWidth() {
|
|
||||||
return width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getHeight() {
|
|
||||||
return height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionX() {
|
|
||||||
return positionX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPositionY() {
|
|
||||||
return positionY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getVisible() {
|
|
||||||
return visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setWidth(int width) {
|
|
||||||
this.width = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHeight(int height) {
|
|
||||||
this.height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionX(int positionX) {
|
|
||||||
this.positionX = positionX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPositionY(int positionY) {
|
|
||||||
this.positionY = positionY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setVisible(boolean draw) {
|
|
||||||
this.visible = draw;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setParentWidth(int width){
|
|
||||||
parentWidth = width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setParentHeight(int height){
|
|
||||||
this.parentHeight = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addChild(Element child) {
|
|
||||||
childList.add(child);
|
|
||||||
if(child instanceof DrawableElement){
|
|
||||||
DrawableElement drawableChild = (DrawableElement) child;
|
|
||||||
drawableChild.setParentWidth(width);
|
|
||||||
drawableChild.setParentHeight(height);
|
|
||||||
drawableChild.setVisible(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Element> getChildren() {
|
|
||||||
return childList;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeChild(Element child) {
|
|
||||||
childList.remove(child);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean handleEvent(Event event){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user