diff --git a/res/textures.png b/res/textures.png index a1aa83f..d344013 100644 Binary files a/res/textures.png and b/res/textures.png differ diff --git a/src/main/java/xyz/valnet/engine/math/Vector4f.java b/src/main/java/xyz/valnet/engine/math/Vector4f.java index 252e9f3..a9a92f7 100644 --- a/src/main/java/xyz/valnet/engine/math/Vector4f.java +++ b/src/main/java/xyz/valnet/engine/math/Vector4f.java @@ -54,4 +54,8 @@ public class Vector4f implements Serializable { ); } + public Vector4i asInt() { + return new Vector4i((int)x, (int)y, (int)z, (int)w); + } + } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/Camera.java b/src/main/java/xyz/valnet/hadean/gameobjects/Camera.java index 05327df..4cb7cc6 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/Camera.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/Camera.java @@ -1,11 +1,16 @@ package xyz.valnet.hadean.gameobjects; +import static xyz.valnet.engine.util.Math.lerp; + import xyz.valnet.engine.graphics.Drawing; import xyz.valnet.engine.graphics.Sprite; import xyz.valnet.engine.math.Vector2f; import xyz.valnet.engine.math.Vector4f; +import xyz.valnet.engine.math.Vector4i; import xyz.valnet.engine.scenegraph.GameObject; import xyz.valnet.hadean.interfaces.IWorldBoundsAdapter; +import xyz.valnet.hadean.util.Assets; +import xyz.valnet.hadean.util.Layers; public class Camera extends GameObject { @@ -76,5 +81,16 @@ public class Camera extends GameObject { Drawing.setLayer(layer + (((y + h) - minY) / (maxY - minY))); Drawing.drawSprite(sprite, (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(); + Drawing.setLayer(Layers.GENERAL_UI); + Assets.flat.pushColor(new Vector4f(0, 0, 0, 1)); + Assets.uiFrame.draw(box.x - h, box.y + box.w / 2 - h / 2, box.z + h * 2, h); + Assets.flat.swapColor(new Vector4f(1, 1, 0, 1)); + Assets.fillColor.draw(box.x + 1 - h, box.y + 1 + box.w / 2 - h / 2, (int)Math.round(lerp(0, box.z - 3 + h * 2, progress)) + 1, h - 2); + Assets.flat.popColor(); + } } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/Clock.java b/src/main/java/xyz/valnet/hadean/gameobjects/Clock.java index fd0dc02..0509358 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/Clock.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/Clock.java @@ -12,7 +12,7 @@ public class Clock extends GameObject { @Override public void update(float dTime) { - time += 0.0004f; + time += 0.0002f * dTime; while (time >= 24) time -= 24; } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Bed.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Bed.java index 755cc8b..e4ebe03 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Bed.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Bed.java @@ -1,7 +1,5 @@ package xyz.valnet.hadean.gameobjects.worldobjects; -import static xyz.valnet.engine.util.Math.lerp; - import xyz.valnet.engine.math.Vector2i; import xyz.valnet.engine.math.Vector4f; import xyz.valnet.hadean.gameobjects.Job; @@ -44,12 +42,22 @@ public class Bed extends WorldObject implements IBuildable, IItemReceiver, IWork @Override public void render() { super.render(); + if(isBuilt()) { camera.draw(Layers.GROUND, Assets.bed, (int)x, (int)y, 1, 2); } else { - Assets.flat.pushColor(Vector4f.opacity(lerp(0.5f, 1.0f, work / maxWork))); + float p = work / maxWork; + float b = 4; + + Assets.flat.pushColor(new Vector4f(b, b, b, 0.5f)); camera.draw(Layers.GROUND, Assets.bed, (int)x, (int)y, 1, 2); Assets.flat.popColor(); + + if(logs > 0) { + camera.drawProgressBar(p, getWorldBox()); + } + // Assets.uiFrame.draw(box.x -3, box.y - 6, (int)Math.round(lerp(0, box.z + 6, p)), 4); + } } @@ -133,7 +141,7 @@ public class Bed extends WorldObject implements IBuildable, IItemReceiver, IWork public Detail[] getDetails() { return new Detail[] { new BooleanDetail("Built", isBuilt()), - new PercentDetail("Work", work / maxWork), + new PercentDetail("Work", work / maxWork, 1), new ObjectDetail("Logs", logs), }; } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Tree.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Tree.java index e106ad9..ddc89d7 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Tree.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Tree.java @@ -30,10 +30,13 @@ public class Tree extends WorldObject implements ITileThing, ISelectable, IWorka @Override public void render() { - Assets.flat.pushColor(new Vector4f(1 - getProgress(), 1 - getProgress(), 1 - getProgress(), 1.0f)); + // Assets.flat.pushColor(new Vector4f(1 - getProgress(), 1 - getProgress(), 1 - getProgress(), 1.0f)); camera.draw(Layers.AIR, Assets.tree, x - 1, y - 2, 3, 3); - Assets.flat.popColor(); + // Assets.flat.popColor(); if(chopJob != null) { + if(getProgress() > 0) { + camera.drawProgressBar(getProgress(), new Vector4f(x - 1, y - 2, x + 2, y + 1)); + } camera.draw(Layers.MARKERS, Assets.lilAxe, x, y); } } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/items/Item.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/items/Item.java index e6653fb..11a60c9 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/items/Item.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/items/Item.java @@ -56,9 +56,9 @@ public abstract class Item extends WorldObject implements ISelectable, ITileThin @Override public void renderAlpha() { if(haulJob != null) { - Assets.flat.pushColor(Vector4f.opacity(0.4f)); - camera.draw(Layers.GENERAL_UI, Assets.haulArrow, getWorldPosition()); - Assets.flat.popColor(); + // Assets.flat.pushColor(Vector4f.opacity(1f)); + camera.draw(Layers.MARKERS, Assets.haulArrow, getWorldPosition()); + // Assets.flat.popColor(); } } diff --git a/src/main/java/xyz/valnet/hadean/util/Assets.java b/src/main/java/xyz/valnet/hadean/util/Assets.java index 5cfc323..b4474fd 100644 --- a/src/main/java/xyz/valnet/hadean/util/Assets.java +++ b/src/main/java/xyz/valnet/hadean/util/Assets.java @@ -22,6 +22,8 @@ public class Assets { public static final Tile9 uiFrame; public static final Tile9 uiFrameLight; public static final Tile9 uiFrameDark; + public static final Tile9 fillColor; + public static final Sprite[] defaultTerrain; public static final Sprite[] growingRice; @@ -247,6 +249,18 @@ public class Assets { new Sprite(atlas, 15, 97, 2, 7), new Sprite(atlas, 17, 97, 7, 7) ); + + fillColor = new Tile9( + new Sprite(atlas, 44, 64, 1, 1), + new Sprite(atlas, 44, 64, 1, 1), + new Sprite(atlas, 44, 64, 1, 1), + new Sprite(atlas, 44, 64, 1, 1), + new Sprite(atlas, 44, 64, 1, 1), + new Sprite(atlas, 44, 64, 1, 1), + new Sprite(atlas, 44, 64, 1, 1), + new Sprite(atlas, 44, 64, 1, 1), + new Sprite(atlas, 44, 64, 1, 1) + ); uiFrame = new Tile9( new Sprite(atlas, 32, 80, 1, 1),