diff --git a/src/main/java/xyz/valnet/engine/scenegraph/CustomObjectDeserializer.java b/src/main/java/xyz/valnet/engine/scenegraph/CustomObjectDeserializer.java index ed58b7a..9fdb1eb 100644 --- a/src/main/java/xyz/valnet/engine/scenegraph/CustomObjectDeserializer.java +++ b/src/main/java/xyz/valnet/engine/scenegraph/CustomObjectDeserializer.java @@ -13,6 +13,7 @@ public class CustomObjectDeserializer extends ObjectInputStream { super(in); } + @SuppressWarnings("rawtypes") protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException { ObjectStreamClass resultClassDescriptor = super.readClassDescriptor(); // initially streams descriptor Class localClass; // the class in the local JVM that this descriptor represents. diff --git a/src/main/java/xyz/valnet/engine/scenegraph/SceneGraph.java b/src/main/java/xyz/valnet/engine/scenegraph/SceneGraph.java index c18b191..5f98b8a 100644 --- a/src/main/java/xyz/valnet/engine/scenegraph/SceneGraph.java +++ b/src/main/java/xyz/valnet/engine/scenegraph/SceneGraph.java @@ -153,14 +153,14 @@ public abstract class SceneGraph implements IScene { } private void dump(List objects) { - Map count = new HashMap(); + Map, Integer> count = new HashMap, Integer>(); for(GameObject go : objects) { - Class clazz = go.getClass(); + Class clazz = go.getClass(); if(!count.containsKey(clazz)) count.put(clazz, 0); count.put(clazz, count.get(clazz) + 1); } - for(Entry entry : count.entrySet()) { + for(Entry, Integer> entry : count.entrySet()) { System.out.println("" + entry.getValue() + "x " + entry.getKey().getSimpleName()); } } @@ -190,6 +190,7 @@ public abstract class SceneGraph implements IScene { saveFlag = false; } + @SuppressWarnings("unchecked") private void load() { try { FileInputStream file = new FileInputStream("SAVE_DATA.TXT"); diff --git a/src/main/java/xyz/valnet/hadean/HadeanGame.java b/src/main/java/xyz/valnet/hadean/HadeanGame.java index dcf33b4..8070cb8 100644 --- a/src/main/java/xyz/valnet/hadean/HadeanGame.java +++ b/src/main/java/xyz/valnet/hadean/HadeanGame.java @@ -11,7 +11,6 @@ import xyz.valnet.engine.math.Vector4f; import xyz.valnet.hadean.scenes.GameScene; import xyz.valnet.hadean.util.Assets; - public class HadeanGame extends Game { public static final HadeanGame Hadean = new HadeanGame(); diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/Job.java b/src/main/java/xyz/valnet/hadean/gameobjects/Job.java index 9c53a2a..de0e96e 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/Job.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/Job.java @@ -4,11 +4,11 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; -import xyz.valnet.engine.math.Vector2f; import xyz.valnet.engine.math.Vector2i; import xyz.valnet.engine.scenegraph.GameObject; import xyz.valnet.hadean.gameobjects.worldobjects.Stockpile; import xyz.valnet.hadean.gameobjects.worldobjects.items.Item; +import xyz.valnet.hadean.interfaces.IItemReceiver; import xyz.valnet.hadean.interfaces.IWorkable; public class Job extends GameObject { @@ -26,9 +26,8 @@ public class Job extends GameObject { public class PickupItem extends JobStep { public Item item; - public Vector2f[] locations; - public PickupItem(Item item, Vector2f[] possibleLocations) { + public PickupItem(Item item) { this.item = item; } @@ -43,6 +42,28 @@ public class Job extends GameObject { } } + public class DropoffAtItemReceiver extends JobStep { + + public IItemReceiver receiver; + public Item item; + + public DropoffAtItemReceiver(IItemReceiver receiver, Item item) { + this.receiver = receiver; + this.item = item; + } + + @Override + public Vector2i[] getLocations() { + return receiver.getItemDropoffLocations(); + } + + @Override + public boolean isValid() { + return true; + } + } + + // TODO find the _best_ place to dropoff, instead of just the top left place. public class DropoffAtStockpile extends JobStep { public Item item; public DropoffAtStockpile(Item item) { @@ -72,8 +93,8 @@ public class Job extends GameObject { public Vector2i[] getLocations() { return subject.getWorkablePositions(); } - public boolean doWork() { - return subject.doWork(); + public boolean doWork(float dTime) { + return subject.doWork(dTime); } @Override diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/JobBoard.java b/src/main/java/xyz/valnet/hadean/gameobjects/JobBoard.java index fd3d9e6..f8d4c6b 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/JobBoard.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/JobBoard.java @@ -1,7 +1,6 @@ package xyz.valnet.hadean.gameobjects; import java.util.ArrayList; -import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.List; diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/Tile.java b/src/main/java/xyz/valnet/hadean/gameobjects/Tile.java index 8a2e7f5..3166cd7 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/Tile.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/Tile.java @@ -87,8 +87,6 @@ public class Tile extends WorldObject implements IWorkable { } thing.onPlaced(this); if(thing instanceof FarmPlot) { - desiredTill = true; - get(JobBoard.class).postSimpleWorkJob("Till Soil", this); } } @@ -140,13 +138,8 @@ public class Tile extends WorldObject implements IWorkable { return true; } - private boolean desiredTill = false; private float tillLevel = 0; - public void setTill(boolean till) { - desiredTill = till; - } - @Override public Vector2i[] getWorkablePositions() { return new Vector2i[] { @@ -168,8 +161,8 @@ public class Tile extends WorldObject implements IWorkable { } @Override - public boolean doWork() { - tillLevel += 0.005f; + public boolean doWork(float dTime) { + tillLevel += 0.005f * dTime; tillLevel = Math.min(tillLevel, 1); return tillLevel >= 1; } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/BuildLayer.java b/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/BuildLayer.java index 7423070..1648041 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/BuildLayer.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/BuildLayer.java @@ -70,7 +70,6 @@ public class BuildLayer extends GameObject implements IMouseCaptureArea, ITransi } private int x, y; - private int screenX, screenY; private boolean mouseDown = false; @Override @@ -80,8 +79,6 @@ public class BuildLayer extends GameObject implements IMouseCaptureArea, ITransi } else if(button == 0 && active && hovered) { Vector2i worldcoords = camera.screen2world(App.mouseX, App.mouseY).asInt(); mouseDown = true; - screenX = App.mouseX; - screenY = App.mouseY; x = worldcoords.x; y = worldcoords.y; } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/SelectionLayer.java b/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/SelectionLayer.java index 7114d7b..cb38a67 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/SelectionLayer.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/SelectionLayer.java @@ -49,7 +49,7 @@ public class SelectionLayer extends GameObject implements IMouseCaptureArea, ITr @Override public void update(float dTime) { - if(animation < animationMax) animation ++; + if(animation < animationMax) animation += dTime; if(animation > animationMax) animation = animationMax; // if(!active) return; 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 2dbf3cd..016c06f 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 @@ -18,7 +18,6 @@ import xyz.valnet.engine.scenegraph.GameObject; import xyz.valnet.engine.scenegraph.IMouseCaptureArea; import xyz.valnet.hadean.gameobjects.BottomBar; import xyz.valnet.hadean.gameobjects.Camera; -import xyz.valnet.hadean.gameobjects.Terrain; import xyz.valnet.hadean.gameobjects.inputlayer.BuildLayer; import xyz.valnet.hadean.gameobjects.inputlayer.SelectionLayer; import xyz.valnet.hadean.input.Button; @@ -31,7 +30,6 @@ import xyz.valnet.hadean.interfaces.ISelectable; import xyz.valnet.hadean.interfaces.ISelectionChangeListener; import xyz.valnet.hadean.util.Assets; import xyz.valnet.hadean.util.Layers; -import xyz.valnet.hadean.util.Pair; import xyz.valnet.hadean.util.SmartBoolean; public class BuildTab extends Tab implements ISelectionChangeListener, IMouseCaptureArea, IButtonListener { @@ -39,7 +37,6 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IMouseCap private SelectionLayer selection; private BuildLayer buildLayer; private Camera camera; - private Terrain terrain; private SmartBoolean opened; private int width = 200; @@ -51,25 +48,32 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IMouseCap private String selectedCategory = ""; - private transient Constructor selectedBuildable = null; - private transient Map>>> buildables = null; - private transient Map> buildableButtons = null; - + private transient BuildableRecord selectedBuildable = null; + private transient Map> buildables = null; + private transient Map buildableButtons = null; private int height = 0; - private String selectedBuildableName = ""; + private record BuildableRecord( + String name, + Constructor constructor, + int type + ) { + + } + + @SuppressWarnings("unchecked") private void calculateBuildables() { try { - Class[] maybeBuildables = getClasses("xyz.valnet.hadean"); + Class[] maybeBuildables = getClasses("xyz.valnet.hadean"); - for(Class clazz : maybeBuildables) { + for(Class clazz : maybeBuildables) { if(clazz.isAnonymousClass()) continue; if(!IBuildable.class.isAssignableFrom(clazz)) continue; if(clazz.isInterface()) continue; if(Modifier.isAbstract(clazz.getModifiers())) continue; - Constructor constructor = clazz.getConstructor(); + Constructor constructor = (Constructor) clazz.getConstructor(); if(constructor.getParameterCount() != 0) { System.out.println(clazz + " has no default constructor (no params)"); continue; @@ -81,10 +85,11 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IMouseCap } String category = annotation.category(); String name = annotation.name(); + int type = annotation.type(); if(!buildables.containsKey(category)) - buildables.put(category, new ArrayList>>()); - buildables.get(category).add(new Pair>(name, constructor)); + buildables.put(category, new ArrayList()); + buildables.get(category).add(new BuildableRecord(name, constructor, type)); System.out.println("Added " + category + " / " + name); } @@ -107,7 +112,7 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IMouseCap // draw the currently selected build item Assets.flat.pushColor(new Vector4f(1f, 1f, 1f, 1.0f)); Vector2i topLeft = camera.world2screen(x, y).asInt(); - Assets.font.drawString(selectedBuildableName, topLeft.x, topLeft.y - 20); + Assets.font.drawString(selectedBuildable.name, topLeft.x, topLeft.y - 20); Assets.flat.swapColor(new Vector4f(1f, 1f, 1f, 0.5f)); 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); @@ -122,7 +127,6 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IMouseCap buildLayer = get(BuildLayer.class); selection = get(SelectionLayer.class); camera = get(Camera.class); - terrain = get(Terrain.class); opened = new SmartBoolean(false, new SmartBoolean.IListener() { @@ -142,22 +146,23 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IMouseCap selection.subscribe(this); } - buildables = new HashMap>>>(); - buildableButtons = new HashMap>(); + buildables = new HashMap>(); + buildableButtons = new HashMap(); calculateBuildables(); } private List