From 97d6412ea78ac4c8052464f2b2e4376e2aa1ba2c Mon Sep 17 00:00:00 2001 From: Ivory Date: Fri, 20 Jan 2023 07:46:15 -0500 Subject: [PATCH] more minor ui --- .../xyz/valnet/hadean/gameobjects/Camera.java | 8 ++++++++ .../hadean/gameobjects/ui/HoverQuery.java | 18 ++++++++++++++---- .../hadean/gameobjects/ui/tabs/BuildTab.java | 4 +++- .../interfaces/ISelectionChangeListener.java | 4 +++- 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/Camera.java b/src/main/java/xyz/valnet/hadean/gameobjects/Camera.java index 961eace..73014e6 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/Camera.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/Camera.java @@ -7,6 +7,7 @@ import java.util.List; import xyz.valnet.engine.App; import xyz.valnet.engine.graphics.Drawing; import xyz.valnet.engine.graphics.Sprite; +import xyz.valnet.engine.graphics.Tile9; import xyz.valnet.engine.math.Vector2f; import xyz.valnet.engine.math.Vector2i; import xyz.valnet.engine.math.Vector4f; @@ -83,6 +84,7 @@ public class Camera extends GameObject implements ITransient, IMouseCaptureArea return screen2world(pos.x, pos.y); } + // !! this takes an AABB and returns and AABB public Vector4f world2screen(Vector4f input) { return new Vector4f( input.x * tileWidth + screenWidth / 2 - focus.x * tileWidth, @@ -122,6 +124,12 @@ public class Camera extends GameObject implements ITransient, IMouseCaptureArea Drawing.drawSprite(sprite, (int)(screenPos.x), (int)(screenPos.y), (int)(tileWidth * w), (int)(tileWidth * h)); } + public void draw(float layer, Tile9 sprite, float x, float y, float w, float h) { + Vector2i screenPos = world2screen(x, y); + Drawing.setLayer(layer + (((y + h) - minY) / (maxY - minY))); + sprite.draw((int)(screenPos.x), (int)(screenPos.y), (int)(tileWidth * w), (int)(tileWidth * h)); + } + public void drawProgressBar(float progress, Vector4f worldBox) { int h = 6; Vector4i box = world2screen(worldBox).toXYWH().asInt(); 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 9a018f9..14f0733 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/ui/HoverQuery.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/ui/HoverQuery.java @@ -13,6 +13,7 @@ import xyz.valnet.hadean.HadeanGame; import xyz.valnet.hadean.gameobjects.BottomBar; import xyz.valnet.hadean.gameobjects.Camera; import xyz.valnet.hadean.gameobjects.Tile; +import xyz.valnet.hadean.gameobjects.inputlayer.SelectionLayer; import xyz.valnet.hadean.gameobjects.worldobjects.WorldObject; import xyz.valnet.hadean.util.Assets; import xyz.valnet.hadean.util.Layers; @@ -21,12 +22,20 @@ public class HoverQuery extends GameObject implements ITransient { private Camera camera; + private boolean visible = true; + @Override protected void connect() { super.connect(); camera = get(Camera.class); } - + + @Override + protected void start() { + get(SelectionLayer.class).subscribe((selected) -> { + visible = selected.size() == 0; + }); + } private List thingStrings = new ArrayList(); @Override @@ -53,12 +62,13 @@ public class HoverQuery extends GameObject implements ITransient { @Override public void render() { + if(!visible) return; Drawing.setLayer(Layers.LOW_PRIORITY_UI); - int i = 576 - BottomBar.bottomBarHeight - 32; + int i = 576 - BottomBar.bottomBarHeight - 24; for(String thingString : thingStrings) { for(String str : thingString.split("\n")) { - Assets.font.drawString(str, 16, i); - i -= 14; + Assets.font.drawStringOutlined(str, 8, i); + i -= 16; } } } 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 da59e7e..ccc0d24 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 @@ -117,7 +117,9 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IMouseCap Assets.flat.pushColor(new Vector4f(1f, 1f, 1f, 1.0f)); Vector2i topLeft = camera.world2screen(x, y); Assets.font.drawString(selectedBuildable.name, topLeft.x, topLeft.y - 20); - Assets.flat.swapColor(new Vector4f(1f, 1f, 1f, 0.5f)); + Assets.flat.swapColor(new Vector4f(1f, 1f, 1f, 0.6f)); + camera.draw(Layers.BUILD_INTERACTABLE, Assets.selectionFrame, x, y, w, h); + Assets.flat.swapColor(new Vector4f(1f, 1f, 1f, 0.35f)); 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); }} diff --git a/src/main/java/xyz/valnet/hadean/interfaces/ISelectionChangeListener.java b/src/main/java/xyz/valnet/hadean/interfaces/ISelectionChangeListener.java index ef3ad60..52bd351 100644 --- a/src/main/java/xyz/valnet/hadean/interfaces/ISelectionChangeListener.java +++ b/src/main/java/xyz/valnet/hadean/interfaces/ISelectionChangeListener.java @@ -1,7 +1,9 @@ package xyz.valnet.hadean.interfaces; +import java.io.Serializable; import java.util.List; -public interface ISelectionChangeListener { +@FunctionalInterface +public interface ISelectionChangeListener extends Serializable { public void selectionChanged(List selected); }