diff --git a/src/main/java/xyz/valnet/engine/App.java b/src/main/java/xyz/valnet/engine/App.java index 5e2c3c6..9f27aa9 100644 --- a/src/main/java/xyz/valnet/engine/App.java +++ b/src/main/java/xyz/valnet/engine/App.java @@ -21,6 +21,7 @@ import org.lwjgl.opengl.GL; import org.lwjgl.system.MemoryStack; import xyz.valnet.engine.math.Matrix4f; +import xyz.valnet.hadean.gameobjects.ui.tabs.DebugTab; public class App { @@ -91,7 +92,7 @@ public class App { }); glfwSetScrollCallback(window, (long window, double xOffset, double yOffset) -> { - System.out.println("Scroll " + yOffset); + DebugTab.log("Scroll " + yOffset); if(yOffset > 0) game.scrollUp(); else if(yOffset < 0) diff --git a/src/main/java/xyz/valnet/engine/scenegraph/IKeyboardListener.java b/src/main/java/xyz/valnet/engine/scenegraph/IKeyboardListener.java new file mode 100644 index 0000000..e1019e0 --- /dev/null +++ b/src/main/java/xyz/valnet/engine/scenegraph/IKeyboardListener.java @@ -0,0 +1,7 @@ +package xyz.valnet.engine.scenegraph; + +public interface IKeyboardListener { + public void keyPress(int code); + public void keyRelease(int code); + // public default void keyPress(int code) {} +} diff --git a/src/main/java/xyz/valnet/engine/scenegraph/SceneGraph.java b/src/main/java/xyz/valnet/engine/scenegraph/SceneGraph.java index 9c2c024..b3d2ec1 100644 --- a/src/main/java/xyz/valnet/engine/scenegraph/SceneGraph.java +++ b/src/main/java/xyz/valnet/engine/scenegraph/SceneGraph.java @@ -251,13 +251,19 @@ public abstract class SceneGraph implements IScene { @Override public final void keyPress(int key) { - keys.add(key); System.out.println("keyCode: " + key); + keys.add(key); + for(IKeyboardListener ikbl : getAll(IKeyboardListener.class)) { + ikbl.keyPress(key); + } } @Override public final void keyRelease(int key) { if(keys.contains(key)) keys.remove(key); + for(IKeyboardListener ikbl : getAll(IKeyboardListener.class)) { + ikbl.keyRelease(key); + } } @Override diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/SelectionLayer.java b/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/SelectionLayer.java index 5fec5c9..8ec6b2c 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/SelectionLayer.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/SelectionLayer.java @@ -16,6 +16,7 @@ import xyz.valnet.engine.scenegraph.GameObject; import xyz.valnet.engine.scenegraph.IMouseCaptureArea; import xyz.valnet.engine.scenegraph.ITransient; import xyz.valnet.hadean.gameobjects.Camera; +import xyz.valnet.hadean.gameobjects.ui.ExclusivityManager; import xyz.valnet.hadean.gameobjects.ui.tabs.BuildTab; import xyz.valnet.hadean.interfaces.ISelectable; import xyz.valnet.hadean.interfaces.ISelectionChangeListener; @@ -206,7 +207,7 @@ public class SelectionLayer extends GameObject implements IMouseCaptureArea, ITr } } else if (button == 1) { if(selected.size() == 0) { - buildTab.rightClickOnWorld(); + get(ExclusivityManager.class).backOrDefault(); } else { clearSelection(); } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/ui/ExclusivityManager.java b/src/main/java/xyz/valnet/hadean/gameobjects/ui/ExclusivityManager.java index 70b7bd2..677488a 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/ui/ExclusivityManager.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/ui/ExclusivityManager.java @@ -1,13 +1,17 @@ package xyz.valnet.hadean.gameobjects.ui; import xyz.valnet.engine.scenegraph.GameObject; +import xyz.valnet.engine.scenegraph.ITransient; +import xyz.valnet.hadean.gameobjects.ui.tabs.BuildTab; import xyz.valnet.hadean.gameobjects.ui.tabs.Tab; import xyz.valnet.hadean.util.Assets; -public class ExclusivityManager extends GameObject { +public class ExclusivityManager extends GameObject implements ITransient { private Tab current = null; private boolean switching = false; + + private Tab defaultTab = null; public void switchTo(Tab tab) { if(tab == current) return; @@ -25,9 +29,20 @@ public class ExclusivityManager extends GameObject { public void closeCurrent() { if(switching) return; + if(current == null) return; Assets.sndCancel.play(); current.close(); current = null; } + public void backOrDefault() { + if(current == null) switchTo(defaultTab); + else current.back(); + } + + @Override + protected void connect() { + defaultTab = get(BuildTab.class); + } + } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/BuildTab.java b/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/BuildTab.java index eddb867..ea77598 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/BuildTab.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/BuildTab.java @@ -128,11 +128,12 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IBuildLay } } - public void rightClickOnWorld() { + @Override + public void back() { if(selectedBuildable != null) { selectBuildable(null); } else { - evoke(); + close(); } } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/DebugTab.java b/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/DebugTab.java index da6ec47..f37eba5 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/DebugTab.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/DebugTab.java @@ -1,10 +1,13 @@ package xyz.valnet.hadean.gameobjects.ui.tabs; -import xyz.valnet.engine.App; +import java.util.LinkedList; +import java.util.List; + +import xyz.valnet.engine.scenegraph.IKeyboardListener; import xyz.valnet.hadean.HadeanGame; import xyz.valnet.hadean.gameobjects.BottomBar; -public class DebugTab extends Tab { +public class DebugTab extends Tab implements IKeyboardListener { private int width = 250; private static Runtime runtime = Runtime.getRuntime(); @@ -24,7 +27,16 @@ public class DebugTab extends Tab { protected void gui() { if(!shouldRender()) return; - window(animate(1200, 1024 - width), 0, width, 576 - BottomBar.bottomBarHeight + 1, () -> { + window(0, animate(-200, 0), 1024 - width + 1, 176, () -> { + for(int i = 10; i > logs.size(); i --) { + text(" "); + } + for(String str : logs) { + text(str); + } + }); + + window(animate(1050, 1024 - width), 0, width, 576 - BottomBar.bottomBarHeight + 1, () -> { text("Debug"); space(8); @@ -46,4 +58,23 @@ public class DebugTab extends Tab { } + private static List logs = new LinkedList(); + + public static void log(String str) { + logs.add(str); + while(logs.size() > 10) { + logs.remove(0); + } + } + + @Override + public void keyPress(int code) { + if(code == 96) { // tilde + evoke(); + } + } + + @Override + public void keyRelease(int code) {} + } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/MenuTab.java b/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/MenuTab.java index e69de29..eff81d4 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/MenuTab.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/MenuTab.java @@ -0,0 +1,29 @@ +package xyz.valnet.hadean.gameobjects.ui.tabs; + +public class MenuTab extends Tab { + + @Override + protected void onClose() { + // TODO Auto-generated method stub + + } + + @Override + protected void onOpen() { + // TODO Auto-generated method stub + + } + + @Override + protected void gui() { + // TODO Auto-generated method stub + + } + + @Override + public String getTabName() { + // TODO Auto-generated method stub + return null; + } + +} \ No newline at end of file diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/Tab.java b/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/Tab.java index e3b8368..2c6f1e5 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/Tab.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/Tab.java @@ -72,6 +72,10 @@ public abstract class Tab extends ImmediateUI implements IBottomBarItem, ITransi onClose(); } + public void back() { + close(); + } + protected abstract void onClose(); protected abstract void onOpen(); } diff --git a/src/main/java/xyz/valnet/hadean/scenes/GameScene.java b/src/main/java/xyz/valnet/hadean/scenes/GameScene.java index 527846a..80b8d28 100644 --- a/src/main/java/xyz/valnet/hadean/scenes/GameScene.java +++ b/src/main/java/xyz/valnet/hadean/scenes/GameScene.java @@ -12,12 +12,8 @@ import xyz.valnet.hadean.gameobjects.inputlayer.BuildLayer; import xyz.valnet.hadean.gameobjects.inputlayer.SelectionLayer; import xyz.valnet.hadean.gameobjects.ui.ExclusivityManager; import xyz.valnet.hadean.gameobjects.ui.HoverQuery; -import xyz.valnet.hadean.gameobjects.ui.Popup; import xyz.valnet.hadean.gameobjects.ui.tabs.BuildTab; -import xyz.valnet.hadean.gameobjects.ui.tabs.JobBoardTab; -import xyz.valnet.hadean.gameobjects.ui.tabs.LoadTab; import xyz.valnet.hadean.gameobjects.ui.tabs.DebugTab; -import xyz.valnet.hadean.gameobjects.ui.tabs.SaveTab; import xyz.valnet.hadean.gameobjects.worldobjects.pawn.Pawn; // TODO BIG IDEAS diff --git a/src/main/java/xyz/valnet/hadean/util/Layers.java b/src/main/java/xyz/valnet/hadean/util/Layers.java index c522492..207971e 100644 --- a/src/main/java/xyz/valnet/hadean/util/Layers.java +++ b/src/main/java/xyz/valnet/hadean/util/Layers.java @@ -20,5 +20,6 @@ public class Layers { public static final float GENERAL_UI = current ++; public static final float GENERAL_UI_INTERACTABLE = current ++; public static final float BOTTOM_BAR = current ++; - + public static final float PAUSE_MENU = current ++; + public static final float CONSOLE = current ++; }