diff --git a/src/com/danitheskunk/skunkgame/Building.java b/src/com/danitheskunk/skunkgame/Building.java new file mode 100644 index 0000000..7577268 --- /dev/null +++ b/src/com/danitheskunk/skunkgame/Building.java @@ -0,0 +1,56 @@ +package com.danitheskunk.skunkgame; + +import com.danitheskunk.skunkworks.Vec2i; + +public class Building { + private final String name; + private final String displayName; + private int count; + private Button button; + private final Cost cost; + + public Building(String name, String displayName, Cost cost) { + this.name = name; + this.displayName = displayName; + this.cost = cost; + this.count = 0; + this.button = new Button(Vec2i.ZERO, displayName); + this.button.onClick(() -> { + if(canAfford()) { + buy(); + } + }); + } + + public void setButtonPos(Vec2i pos) { + button.setPos(pos); + } + + public boolean canAfford() { + return cost.canAfford(); + } + + public void buy() { + if(cost.canAfford()) { + cost.use(); + count += 1; + button.setCount(count); + } + } + + public boolean isButtonVisible() { + return count > 0 || canAfford(); + } + + public Button getButton() { + return button; + } + + public String getName() { + return name; + } + + public int getCount() { + return count; + } +} diff --git a/src/com/danitheskunk/skunkgame/Button.java b/src/com/danitheskunk/skunkgame/Button.java index 2a1fbc8..ca47532 100644 --- a/src/com/danitheskunk/skunkgame/Button.java +++ b/src/com/danitheskunk/skunkgame/Button.java @@ -7,9 +7,9 @@ import com.danitheskunk.skunkworks.gfx.vt.Terminal; import java.util.concurrent.Callable; public class Button { - private final Vec2i pos; + private Vec2i pos; private static final Vec2i SIZE = new Vec2i(32, 3); - private final Recti rect; + private Recti rect; private final String label; private int count; private Runnable clickCallback; @@ -49,4 +49,9 @@ public class Button { public void setCount(int count) { this.count = count; } + + public void setPos(Vec2i pos) { + this.pos = pos; + this.rect = new Recti(this.pos, SIZE); + } } diff --git a/src/com/danitheskunk/skunkgame/Cost.java b/src/com/danitheskunk/skunkgame/Cost.java new file mode 100644 index 0000000..44a4717 --- /dev/null +++ b/src/com/danitheskunk/skunkgame/Cost.java @@ -0,0 +1,24 @@ +package com.danitheskunk.skunkgame; + +public class Cost { + private final CostElement[] elements; + + public Cost(CostElement[] elements) { + this.elements = elements; + } + + public boolean canAfford() { + for(var element : elements) { + if(element.getAmount() > SkunkGame.getRes(element.getRes())) { + return false; + } + } + return true; + } + + public void use() { + for(var element : elements) { + SkunkGame.addRes(element.getRes(), -element.getAmount()); + } + } +} diff --git a/src/com/danitheskunk/skunkgame/CostElement.java b/src/com/danitheskunk/skunkgame/CostElement.java new file mode 100644 index 0000000..98add09 --- /dev/null +++ b/src/com/danitheskunk/skunkgame/CostElement.java @@ -0,0 +1,19 @@ +package com.danitheskunk.skunkgame; + +public class CostElement { + private final String res; + private final double amount; + + public CostElement(String res, double amount) { + this.res = res; + this.amount = amount; + } + + public String getRes() { + return res; + } + + public double getAmount() { + return amount; + } +} diff --git a/src/com/danitheskunk/skunkgame/Resources.java b/src/com/danitheskunk/skunkgame/Resources.java deleted file mode 100644 index 08a905a..0000000 --- a/src/com/danitheskunk/skunkgame/Resources.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.danitheskunk.skunkgame; - -public class Resources { - public double wood; - public int den; - -} diff --git a/src/com/danitheskunk/skunkgame/SkunkGame.java b/src/com/danitheskunk/skunkgame/SkunkGame.java index 2c3b14c..9eef6fb 100644 --- a/src/com/danitheskunk/skunkgame/SkunkGame.java +++ b/src/com/danitheskunk/skunkgame/SkunkGame.java @@ -1,7 +1,6 @@ package com.danitheskunk.skunkgame; import com.danitheskunk.skunkworks.BaseGame; -import com.danitheskunk.skunkworks.Recti; import com.danitheskunk.skunkworks.Vec2i; import com.danitheskunk.skunkworks.WindowStretchMode; import com.danitheskunk.skunkworks.gfx.Color; @@ -9,57 +8,102 @@ import com.danitheskunk.skunkworks.gfx.IRenderContext; import com.danitheskunk.skunkworks.gfx.vt.Terminal; import java.util.ArrayList; +import java.util.Dictionary; +import java.util.Hashtable; import java.util.List; public class SkunkGame extends BaseGame { private Terminal term; private double timeSinceLastUpdate; private double timePerUpdate; - private Resources res; + public static Dictionary res; + private List buildings; public static Vec2i mousePos; - private List