diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/IHaulable.java b/src/main/java/xyz/valnet/hadean/gameobjects/IHaulable.java new file mode 100644 index 0000000..0225013 --- /dev/null +++ b/src/main/java/xyz/valnet/hadean/gameobjects/IHaulable.java @@ -0,0 +1,8 @@ +package xyz.valnet.hadean.gameobjects; + +import xyz.valnet.hadean.Tile; + +public interface IHaulable extends IJob { + public Log take(); + public Tile getDestination(); +} diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/IJob.java b/src/main/java/xyz/valnet/hadean/gameobjects/IJob.java new file mode 100644 index 0000000..478a817 --- /dev/null +++ b/src/main/java/xyz/valnet/hadean/gameobjects/IJob.java @@ -0,0 +1,9 @@ +package xyz.valnet.hadean.gameobjects; + +import xyz.valnet.engine.math.Vector2i; + +public interface IJob { + public boolean hasWork(); + public Vector2i[] getWorablePositions(); + public Vector2i getLocation(); +} diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/ITransferrable.java b/src/main/java/xyz/valnet/hadean/gameobjects/ITransferrable.java deleted file mode 100644 index 737e47b..0000000 --- a/src/main/java/xyz/valnet/hadean/gameobjects/ITransferrable.java +++ /dev/null @@ -1,5 +0,0 @@ -package xyz.valnet.hadean.gameobjects; - -public interface ITransferrable { - -} diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/IWorkable.java b/src/main/java/xyz/valnet/hadean/gameobjects/IWorkable.java index 62e331a..ccbf0e3 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/IWorkable.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/IWorkable.java @@ -1,10 +1,5 @@ package xyz.valnet.hadean.gameobjects; -import xyz.valnet.engine.math.Vector2i; - -public interface IWorkable { - public boolean hasWork(); - public Vector2i[] getWorablePositions(); +public interface IWorkable extends IJob { public void doWork(); - public Vector2i getLocation(); } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/Log.java b/src/main/java/xyz/valnet/hadean/gameobjects/Log.java index 156ab33..160be88 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/Log.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/Log.java @@ -8,12 +8,14 @@ import xyz.valnet.hadean.Layers; import xyz.valnet.hadean.util.Action; import xyz.valnet.hadean.util.Assets; -public class Log extends GameObject implements ITileThing, ISelectable, ITransferrable, IWorkable { +public class Log extends GameObject implements ITileThing, ISelectable, IHaulable, IWorkable { private Camera camera; private int x, y; + private boolean haul = false; + public Log(int x, int y) { this.x = x; this.y = y; @@ -28,6 +30,10 @@ public class Log extends GameObject implements ITileThing, ISelectable, ITransfe public void render() { Drawing.setLayer(Layers.GROUND); camera.draw(Assets.log, x, y); + if(haul) { + Drawing.setLayer(Layers.MARKERS); + camera.draw(Assets.haulArrow, x, y); + } } @Override diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/Pawn.java b/src/main/java/xyz/valnet/hadean/gameobjects/Pawn.java index 0129bda..f9ea52c 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/Pawn.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/Pawn.java @@ -26,7 +26,7 @@ import xyz.valnet.hadean.util.Assets; public class Pawn extends GameObject implements ISelectable { - private ITransferrable carrying = null; + private IHaulable carrying = null; private float x = 0.5f + (int)(Math.random() * Terrain.WORLD_SIZE), y = 0.5f + (int)(Math.random() * Terrain.WORLD_SIZE); @@ -146,18 +146,20 @@ public class Pawn extends GameObject implements ISelectable { private IWorkable currentJob; private void tryStartWork() { - List workables = getAll(IWorkable.class); - - workables.sort(new Comparator() { - @Override - public int compare(IWorkable a, IWorkable b) { - float distA = a.getLocation().distanceTo((int)x, (int)y); - float distB = b.getLocation().distanceTo((int)x, (int)y); - if(distA > distB) return -1; - if(distB > distA) return 1; - return 0; - } - }); + List workables = getAll(IWorkable.class) + .stream() + .filter(workable -> workable.hasWork()) + .sorted(new Comparator() { + @Override + public int compare(IWorkable a, IWorkable b) { + float distA = a.getLocation().distanceTo((int)x, (int)y); + float distB = b.getLocation().distanceTo((int)x, (int)y); + if(distA > distB) return -1; + if(distB > distA) return 1; + return 0; + } + }) + .toList(); if(workables.size() > 0) { for(IWorkable job : workables) { diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/Selection.java b/src/main/java/xyz/valnet/hadean/gameobjects/Selection.java index 018770f..992b595 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/Selection.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/Selection.java @@ -64,6 +64,8 @@ public class Selection extends GameObject implements IMouseListener { @Override public void render() { + Drawing.setLayer(Layers.AREA_SELECT_BOX); + float t = animation / animationMax; float p = lerp(animationAmplitude, 0, t);