From a0604b455595cd73a91482b0089f12094762d0bd Mon Sep 17 00:00:00 2001 From: Valerie Date: Thu, 2 Jun 2022 02:29:41 -0400 Subject: [PATCH] farm plots & slightly improved hauling --- .../valnet/hadean/gameobjects/JobBoard.java | 4 +- .../hadean/gameobjects/tabs/BuildTab.java | 6 +- .../gameobjects/worldobjects/FarmPlot.java | 157 ++++++++++++++++++ .../hadean/gameobjects/worldobjects/Log.java | 2 +- .../hadean/gameobjects/worldobjects/Pawn.java | 2 +- .../hadean/gameobjects/worldobjects/Rice.java | 130 +++++++++++++++ .../hadean/gameobjects/worldobjects/Tree.java | 2 +- .../xyz/valnet/hadean/interfaces/IJob.java | 2 +- 8 files changed, 296 insertions(+), 9 deletions(-) create mode 100644 src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/FarmPlot.java create mode 100644 src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Rice.java diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/JobBoard.java b/src/main/java/xyz/valnet/hadean/gameobjects/JobBoard.java index f959b33..2a14164 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/JobBoard.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/JobBoard.java @@ -124,11 +124,11 @@ public class JobBoard extends GameObject { String availableJobsString = ""; for(Entry allocation : allocations.entrySet()) { - takenJobsString += " " + allocation.getKey().getName() + ": " + allocation.getValue().getName() + "\n"; + takenJobsString += " " + allocation.getKey().getName() + ": " + allocation.getValue().getJobName() + "\n"; } for(IJob job : availableJobs) { - availableJobsString += " " + job.getName() + "\n"; + availableJobsString += " " + job.getJobName() + "\n"; } return "Available Jobs: " + availableJobs.size() + "\n" + availableJobsString + diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/tabs/BuildTab.java b/src/main/java/xyz/valnet/hadean/gameobjects/tabs/BuildTab.java index bc73c1a..d2fdb1d 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/tabs/BuildTab.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/tabs/BuildTab.java @@ -10,10 +10,10 @@ import xyz.valnet.engine.math.Vector4f; import xyz.valnet.engine.scenegraph.IMouseCaptureArea; import xyz.valnet.hadean.gameobjects.BottomBar; import xyz.valnet.hadean.gameobjects.Camera; -import xyz.valnet.hadean.gameobjects.Stockpile; import xyz.valnet.hadean.gameobjects.Terrain; import xyz.valnet.hadean.gameobjects.inputlayer.BuildLayer; import xyz.valnet.hadean.gameobjects.inputlayer.Selection; +import xyz.valnet.hadean.gameobjects.worldobjects.FarmPlot; import xyz.valnet.hadean.interfaces.IBuildLayerListener; import xyz.valnet.hadean.interfaces.ISelectable; import xyz.valnet.hadean.interfaces.ISelectionChangeListener; @@ -71,8 +71,8 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IMouseCap public void select(float nx, float ny, float nw, float nh) { x = (int)Math.floor(nx); y = (int)Math.floor(ny); - ITileThing stockpile = new Stockpile(x, y); - terrain.getTile(x, y).placeThing(stockpile); + ITileThing thing = new FarmPlot(x, y); + terrain.getTile(x, y).placeThing(thing); opened.set(false); } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/FarmPlot.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/FarmPlot.java new file mode 100644 index 0000000..65df2d2 --- /dev/null +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/FarmPlot.java @@ -0,0 +1,157 @@ +package xyz.valnet.hadean.gameobjects.worldobjects; + +import xyz.valnet.engine.graphics.Drawing; +import xyz.valnet.engine.math.Vector2i; +import xyz.valnet.engine.math.Vector4f; +import xyz.valnet.hadean.gameobjects.JobBoard; +import xyz.valnet.hadean.interfaces.ISelectable; +import xyz.valnet.hadean.interfaces.ITileThing; +import xyz.valnet.hadean.interfaces.IWorkable; +import xyz.valnet.hadean.util.Action; +import xyz.valnet.hadean.util.Assets; +import xyz.valnet.hadean.util.Layers; + +public class FarmPlot extends WorldObject implements IWorkable, ISelectable, ITileThing { + + private float progress = 0f; + private int stage = 0; + private boolean planted = false; + private boolean mature = false; + + private static int STAGE_LENGTH = 1000; + private static int MAX_STAGES = 4; + + private JobBoard board; + + public FarmPlot(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public void render() { + Drawing.setLayer(Layers.GROUND); + camera.draw(Assets.farmPlot, x, y); + + if(planted) { + if(stage > 1) { + Drawing.setLayer(Layers.AIR); + camera.draw(Assets.growingRice[stage], x, y - 1, 1, 2); + } else { + camera.draw(Assets.growingRice[stage], x, y); + } + } + } + + @Override + public void update(float dTime) { + super.update(dTime); + + if(stage == MAX_STAGES - 1) { + return; + } if(planted) { + if(Math.random() > 0.95f) { + progress += 10; + if(progress >= STAGE_LENGTH) { + stage ++; + progress = 0; + if(stage == MAX_STAGES - 1) { + mature = true; + board.postJob(this); + } + } + } + } else if (progress >= STAGE_LENGTH) { + planted = true; + progress = 0; + } + + + } + + @Override + public void start() { + super.start(); + board = get(JobBoard.class); + board.postJob(this); + } + + @Override + public boolean hasWork() { + return !planted || mature; + } + + @Override + public Vector2i[] getWorablePositions() { + return new Vector2i[] { + new Vector2i((int) x, (int) y + 1), + new Vector2i((int) x, (int) y - 1), + new Vector2i((int) x + 1, (int) y), + new Vector2i((int) x - 1, (int) y) + }; + } + + @Override + public Vector2i getLocation() { + return new Vector2i((int) x, (int) y); + } + + @Override + public String getJobName() { + return planted ? "Harvest Rice" : "Plant Rice"; + } + + @Override + public Vector4f getWorldBox() { + return new Vector4f(x, y, x + 1, y + 1); + } + + @Override + public Action[] getActions() { + return new Action[] {}; + } + + @Override + public void runAction(Action action) {} + + @Override + public String details() { + + return "Planted | " + planted + "\n" + + "Stage | " + stage + "\n" + + "Progress | " + String.format("%.2f", (progress / STAGE_LENGTH) * 100) + "%"; + } + + @Override + public void doWork() { + progress ++; + if(mature && progress >= STAGE_LENGTH) { + mature = false; + planted = false; + stage = 0; + if(Math.random() < 0.3) { + getTile().placeThing(new Rice((int)x, (int)y)); + } + } + } + + @Override + public boolean isWalkable() { + return true; + } + + @Override + public boolean shouldRemove() { + return false; + } + + @Override + public void onRemove() { + + } + + @Override + public void updatePosition(int x, int y) {} + + +} diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Log.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Log.java index 87a4503..7f9bba7 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Log.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Log.java @@ -134,7 +134,7 @@ public class Log extends WorldObject implements ITileThing, ISelectable, IHaulab } @Override - public String getName() { + public String getJobName() { return "Haul Log"; } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Pawn.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Pawn.java index 45fe1b8..5761f5a 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Pawn.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Pawn.java @@ -279,7 +279,7 @@ public class Pawn extends WorldObject implements ISelectable, IWorker { @Override public String details() { IJob currentJob = jobboard.getJob(this); - String jobString = currentJob == null ? "No Job" : currentJob.getName(); + String jobString = currentJob == null ? "No Job" : currentJob.getJobName(); return "" + name + "\n" + "Held | " + getCarriedName() + "\n" + "Job | " + jobString + "\n" + diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Rice.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Rice.java new file mode 100644 index 0000000..95c0d11 --- /dev/null +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Rice.java @@ -0,0 +1,130 @@ +package xyz.valnet.hadean.gameobjects.worldobjects; + +import xyz.valnet.engine.graphics.Drawing; +import xyz.valnet.engine.math.Vector2i; +import xyz.valnet.engine.math.Vector4f; +import xyz.valnet.hadean.gameobjects.JobBoard; +import xyz.valnet.hadean.gameobjects.Stockpile; +import xyz.valnet.hadean.gameobjects.Tile; +import xyz.valnet.hadean.interfaces.IHaulable; +import xyz.valnet.hadean.interfaces.ISelectable; +import xyz.valnet.hadean.interfaces.ITileThing; +import xyz.valnet.hadean.util.Action; +import xyz.valnet.hadean.util.Assets; +import xyz.valnet.hadean.util.Layers; +import xyz.valnet.hadean.util.SmartBoolean; +import xyz.valnet.hadean.util.SmartBoolean.IListener; + +public class Rice extends WorldObject implements ITileThing, ISelectable { + + // private SmartBoolean haul; + + private JobBoard jobboard; + + @Override + public void start() { + super.start(); + jobboard = get(JobBoard.class); + Rice that = this; + + // haul = new SmartBoolean(false, new IListener() { + // @Override + // public void rise() { + // jobboard.postJob(that); + // } + + // @Override + // public void fall() { + // jobboard.rescindJob(that); + // } + // }); + } + + public Rice(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public void render() { + Drawing.setLayer(Layers.AIR); + camera.draw(Assets.riceBag, x, y); + } + + @Override + public boolean isWalkable() { + return true; + } + + @Override + public boolean shouldRemove() { + return false; + } + + @Override + public void onRemove() {} + + @Override + public Vector4f getWorldBox() { + return new Vector4f(x, y, x + 1, y + 1); + } + + @Override + public Action[] getActions() { + return new Action[] {}; + } + + @Override + public void runAction(Action action) { + } + + @Override + public String details() { + return "Bag of Rice"; + } + + // @Override + // public boolean hasWork() { + // return haul.value(); + // } + + // @Override + // public Vector2i[] getWorablePositions() { + // return new Vector2i[] { + // new Vector2i((int)x + 1, (int)y), + // new Vector2i((int)x - 1, (int)y), + // new Vector2i((int)x, (int)y + 1), + // new Vector2i((int)x, (int)y - 1) + // }; + // } + + // @Override + // public Vector2i getLocation() { + // return new Vector2i((int)x, (int)y); + // } + + // @Override + // public Log take() { + // haul.set(false); + // Tile tile = terrain.getTile((int)x, (int)y); + // tile.remove(this); + // return this; + // } + + // @Override + // public Tile getDestination() { + // return get(Stockpile.class).getTile(); + // } + + @Override + public void updatePosition(int x, int y) { + this.x = x; + this.y = y; + } + + // @Override + // public String getJobName() { + // return "Haul Log"; + // } + +} 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 7619ace..e5531e0 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Tree.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Tree.java @@ -137,7 +137,7 @@ public class Tree extends WorldObject implements ITileThing, ISelectable, IWorka } @Override - public String getName() { + public String getJobName() { return "Chop " + name; } } diff --git a/src/main/java/xyz/valnet/hadean/interfaces/IJob.java b/src/main/java/xyz/valnet/hadean/interfaces/IJob.java index 3692f9d..c96a267 100644 --- a/src/main/java/xyz/valnet/hadean/interfaces/IJob.java +++ b/src/main/java/xyz/valnet/hadean/interfaces/IJob.java @@ -6,5 +6,5 @@ public interface IJob { public boolean hasWork(); public Vector2i[] getWorablePositions(); public Vector2i getLocation(); - public String getName(); + public String getJobName(); }