diff --git a/src/main/java/xyz/valnet/engine/scenegraph/GameObject.java b/src/main/java/xyz/valnet/engine/scenegraph/GameObject.java index 5f50a5c..e0a802e 100644 --- a/src/main/java/xyz/valnet/engine/scenegraph/GameObject.java +++ b/src/main/java/xyz/valnet/engine/scenegraph/GameObject.java @@ -27,7 +27,6 @@ public class GameObject implements IRenderable, ITickable { protected final T add(T obj) { if(obj.inScene()) { - System.out.println(obj + " is already in the scene. not adding twice..."); return obj; } scene.add(obj); diff --git a/src/main/java/xyz/valnet/hadean/HadeanGame.java b/src/main/java/xyz/valnet/hadean/HadeanGame.java index be5b8a7..9a880be 100644 --- a/src/main/java/xyz/valnet/hadean/HadeanGame.java +++ b/src/main/java/xyz/valnet/hadean/HadeanGame.java @@ -1,10 +1,6 @@ package xyz.valnet.hadean; -import java.io.File; -import java.io.IOException; -import java.net.URL; import java.util.ArrayList; -import java.util.Enumeration; import java.util.List; import xyz.valnet.engine.App; @@ -13,13 +9,14 @@ import xyz.valnet.engine.graphics.Drawing; import xyz.valnet.engine.math.Matrix4f; import xyz.valnet.engine.math.Vector4f; import xyz.valnet.hadean.scenes.GameScene; -import xyz.valnet.hadean.scenes.MenuScene; import xyz.valnet.hadean.util.Assets; public class HadeanGame extends Game { public static final HadeanGame Hadean = new HadeanGame(); + public static boolean debugView = false; + public static void main(String[] args) { new App(Hadean).run(); } @@ -34,35 +31,36 @@ public class HadeanGame extends Game { public void render() { Drawing.setLayer(0); super.render(); + + if(!debugView) return; Drawing.setLayer(99); - // renderDebugInfo(); + renderDebugInfo(); } - private Runtime runtime = Runtime.getRuntime(); - private static Vector4f fontColor = new Vector4f(0, 1, 1, 1); + private static Runtime runtime = Runtime.getRuntime(); + private static Vector4f fontColor = new Vector4f(1, 0, 0, 1); private void renderDebugInfo() { long allocated = runtime.totalMemory(); long max = runtime.maxMemory(); + int left = 800; + int top = 10; - Assets.flat.pushColor(Vector4f.black); - Assets.font.drawString("FPS: " + Math.round(averageFPS) + "/" + measuredFPS + " | AVG/MEASURED", 1, 1); - Assets.font.drawString("Mouse: <" + App.mouseX + ", " + App.mouseY + ">", 1, 17); - Assets.font.drawString("MEMORY: " + (int)((allocated / (double)max) * 100) + "% (" + (allocated / (1024 * 1024)) + "/" + (max / (1024 * 1024)) + "MB)", 1, 33); - Assets.font.drawString("IPATHABLE", 1, 49); - Assets.font.drawString("", 1, 65); - Assets.font.drawString("", 1, 81); + List strings = new ArrayList(); + strings.add("DEBUG"); + strings.add("FPS: " + Math.round(averageFPS) + "/" + measuredFPS + " | AVG/MEASURED"); + strings.add("Mouse: <" + App.mouseX + ", " + App.mouseY + ">"); + strings.add("MEMORY: " + (int)((allocated / (double)max) * 100) + "% (" + (allocated / (1024 * 1024)) + "/" + (max / (1024 * 1024)) + "MB)"); - Assets.flat.swapColor(fontColor); - Assets.font.drawString("FPS: " + Math.round(averageFPS) + "/" + measuredFPS + " | AVG/MEASURED", 0, 0); - Assets.font.drawString("Mouse: <" + App.mouseX + ", " + App.mouseY + ">", 0, 16); - Assets.font.drawString("MEMORY: " + (int)((allocated / (double)max) * 100) + "% (" + (allocated / (1024 * 1024)) + "/" + (max / (1024 * 1024)) + "MB)", 0, 32); - Assets.font.drawString("IPATHABLE", 0, 48); - Assets.font.drawString("", 0, 64); - Assets.font.drawString("", 0, 80); - - Assets.flat.popColor(); + for(String str : strings) { + Assets.flat.pushColor(Vector4f.black); + Assets.font.drawString(str, left + 1, top + 1); + Assets.flat.swapColor(fontColor); + Assets.font.drawString(str, left, top); + Assets.flat.popColor(); + top += 16; + } } // receive the updated matrix every frame for the actual window. diff --git a/src/main/java/xyz/valnet/hadean/designation/CutTreesDesignation.java b/src/main/java/xyz/valnet/hadean/designation/CutTreesDesignation.java index ffab6dd..c3e2ea8 100644 --- a/src/main/java/xyz/valnet/hadean/designation/CutTreesDesignation.java +++ b/src/main/java/xyz/valnet/hadean/designation/CutTreesDesignation.java @@ -3,7 +3,7 @@ package xyz.valnet.hadean.designation; import xyz.valnet.hadean.gameobjects.worldobjects.Tree; import xyz.valnet.hadean.interfaces.BuildableMetadata; -@BuildableMetadata(category = "Designations", name = "Chop Trees") +@BuildableMetadata(category = "Jobs", name = "Chop Trees") public class CutTreesDesignation extends Designation { @Override diff --git a/src/main/java/xyz/valnet/hadean/designation/HaulItemDesignation.java b/src/main/java/xyz/valnet/hadean/designation/HaulItemDesignation.java new file mode 100644 index 0000000..5970506 --- /dev/null +++ b/src/main/java/xyz/valnet/hadean/designation/HaulItemDesignation.java @@ -0,0 +1,17 @@ +package xyz.valnet.hadean.designation; + +import xyz.valnet.hadean.gameobjects.worldobjects.items.Item; +import xyz.valnet.hadean.interfaces.BuildableMetadata; + +@BuildableMetadata(category = "Jobs", name = "Haul Items") +public class HaulItemDesignation extends Designation { + @Override + protected Class getType() { + return Item.class; + } + + @Override + protected void designate(Item thing) { + thing.runAction(Item.ACTION_HAUL); + } +} diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/BuildLayer.java b/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/BuildLayer.java index 0a5a51e..fa43f9f 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/BuildLayer.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/BuildLayer.java @@ -76,7 +76,6 @@ public class BuildLayer extends GameObject implements IMouseCaptureArea { public void mouseDown(int button) { if(button == 1 && active && hovered) { listener.cancel(); - deactiveate(); } else if(button == 0 && active && hovered) { Vector2i worldcoords = camera.screen2world(App.mouseX, App.mouseY).asInt(); mouseDown = true; 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 61ac1c8..4feef69 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/SelectionLayer.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/SelectionLayer.java @@ -10,6 +10,7 @@ import xyz.valnet.engine.math.Vector4f; import xyz.valnet.engine.scenegraph.GameObject; import xyz.valnet.engine.scenegraph.IMouseCaptureArea; import xyz.valnet.hadean.gameobjects.Camera; +import xyz.valnet.hadean.gameobjects.ui.tabs.BuildTab; import xyz.valnet.hadean.interfaces.ISelectable; import xyz.valnet.hadean.interfaces.ISelectionChangeListener; import xyz.valnet.hadean.util.Assets; @@ -26,9 +27,12 @@ public class SelectionLayer extends GameObject implements IMouseCaptureArea { private float animationAmplitude = 0.2f; private List listeners = new ArrayList(); + private BuildTab buildTab; + @Override public void start() { camera = get(Camera.class); + buildTab = get(BuildTab.class); } public void subscribe(ISelectionChangeListener listener) { @@ -178,6 +182,13 @@ public class SelectionLayer extends GameObject implements IMouseCaptureArea { if(initialCoords == null) { initialCoords = new Vector2f(App.mouseX, App.mouseY); } + } else if (button == 1) { + if(selected.size() == 0) { + buildTab.evoke(); + } else { + selected.clear(); + broadcastSelectionChanged(); + } } } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/ui/HoverQuery.java b/src/main/java/xyz/valnet/hadean/gameobjects/ui/HoverQuery.java index 33f1219..1146e6a 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/ui/HoverQuery.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/ui/HoverQuery.java @@ -7,10 +7,10 @@ import xyz.valnet.engine.App; import xyz.valnet.engine.math.Vector2f; import xyz.valnet.engine.math.Vector4f; import xyz.valnet.engine.scenegraph.GameObject; +import xyz.valnet.hadean.HadeanGame; import xyz.valnet.hadean.gameobjects.Camera; import xyz.valnet.hadean.gameobjects.Tile; import xyz.valnet.hadean.gameobjects.worldobjects.WorldObject; -import xyz.valnet.hadean.interfaces.ITileThing; import xyz.valnet.hadean.util.Assets; public class HoverQuery extends GameObject { @@ -38,7 +38,8 @@ public class HoverQuery extends GameObject { position.y < box.w ) { thingStrings.add(obj.getName()); - + if (!HadeanGame.debugView) continue; + if(obj instanceof Tile) { thingStrings.add(((Tile)obj).toThingsString()); } 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 7ce84d2..8904dc4 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 @@ -15,6 +15,8 @@ import java.util.List; import java.util.Map; import xyz.valnet.engine.graphics.Drawing; +import xyz.valnet.engine.math.Vector2f; +import xyz.valnet.engine.math.Vector2i; import xyz.valnet.engine.math.Vector4f; import xyz.valnet.engine.scenegraph.GameObject; import xyz.valnet.engine.scenegraph.IMouseCaptureArea; @@ -63,6 +65,7 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IMouseCap private Map>>> buildables = new HashMap>>>(); private int height = 0; + private String selectedBuildableName = ""; private void calculateBuildables() { try { @@ -91,8 +94,6 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IMouseCap buildables.put(category, new ArrayList>>()); buildables.get(category).add(new Pair>(name, constructor)); - selectedBuildable = constructor; - System.out.println("Added " + category + " / " + name); } @@ -109,8 +110,13 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IMouseCap if(opened.value()) { Assets.uiFrame.draw(padding, 576 - BottomBar.bottomBarHeight - padding - height, width, height); + + if(selectedBuildable == null) return; // draw the currently selected build item - Assets.flat.pushColor(new Vector4f(1f, 1f, 1f, 0.5f)); + Assets.flat.pushColor(new Vector4f(1f, 1f, 1f, 1.0f)); + Vector2i topLeft = camera.world2screen(x, y).asInt(); + Assets.font.drawString(selectedBuildableName, topLeft.x, topLeft.y - 20); + Assets.flat.swapColor(new Vector4f(1f, 1f, 1f, 0.5f)); for(int i = 0; i < w; i ++) for(int j = 0; j < h; j ++) {{ camera.draw(Layers.BUILD_INTERACTABLE, Assets.checkerBoard, x + i, y + j); }} @@ -149,7 +155,17 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IMouseCap private List