From 7afa863ee8c9a14f7cc332d54f0fb7ab5fc7f100 Mon Sep 17 00:00:00 2001 From: Ivory Date: Fri, 30 Jun 2023 19:09:06 -0400 Subject: [PATCH] deleted ITileThing, added depth shader :) --- res/shaders/{flat.vert => base.vert} | 2 + res/shaders/depth.frag | 17 ++ res/shaders/flat.frag | 1 + .../xyz/valnet/engine/graphics/Drawing.java | 4 +- .../java/xyz/valnet/engine/math/TileBox.java | 2 - .../valnet/engine/scenegraph/GameObject.java | 4 + .../valnet/engine/scenegraph/SceneGraph.java | 3 +- .../xyz/valnet/engine/shaders/Shader.java | 238 +++++++++--------- .../valnet/hadean/gameobjects/jobs/Job.java | 4 +- .../hadean/gameobjects/terrain/Tile.java | 54 ++-- .../hadean/gameobjects/ui/tabs/BuildTab.java | 2 +- .../hadean/gameobjects/ui/tabs/DebugTab.java | 10 + .../gameobjects/worldobjects/Buildable.java | 19 +- .../hadean/gameobjects/worldobjects/Tree.java | 14 +- .../gameobjects/worldobjects/WorldObject.java | 13 +- .../worldobjects/agents/pawn/Pawn.java | 6 + .../worldobjects/constructions/Bed.java | 10 - .../constructions/Construction.java | 15 +- .../worldobjects/constructions/Quarry.java | 9 - .../worldobjects/constructions/Wall.java | 10 - .../worldobjects/items/Boulder.java | 8 - .../gameobjects/worldobjects/items/Item.java | 11 +- .../gameobjects/worldobjects/items/Log.java | 8 - .../worldobjects/zones/FarmPlot.java | 13 - .../worldobjects/zones/Stockpile.java | 13 - .../valnet/hadean/interfaces/ITileThing.java | 10 - .../hadean/interfaces/IWorldObject.java | 1 + .../java/xyz/valnet/hadean/util/Action.java | 2 + .../java/xyz/valnet/hadean/util/Assets.java | 4 +- 29 files changed, 211 insertions(+), 296 deletions(-) rename res/shaders/{flat.vert => base.vert} (88%) create mode 100644 res/shaders/depth.frag delete mode 100644 src/main/java/xyz/valnet/hadean/interfaces/ITileThing.java diff --git a/res/shaders/flat.vert b/res/shaders/base.vert similarity index 88% rename from res/shaders/flat.vert rename to res/shaders/base.vert index 644b39b..1a7ac38 100644 --- a/res/shaders/flat.vert +++ b/res/shaders/base.vert @@ -9,9 +9,11 @@ attribute vec2 TexCoord; //"out" varyings to our fragment shader varying vec4 vColor; varying vec2 vTexCoord; +varying float vDepth; void main() { vColor = uColor; vTexCoord = TexCoord; gl_Position = uProjection * vec4(Position, 1.0); + vDepth = Position.z; } \ No newline at end of file diff --git a/res/shaders/depth.frag b/res/shaders/depth.frag new file mode 100644 index 0000000..52faf3d --- /dev/null +++ b/res/shaders/depth.frag @@ -0,0 +1,17 @@ +//SpriteBatch will use texture unit 0 +uniform sampler2D u_texture; + +//"in" varyings from our vertex shader +varying vec4 vColor; +varying vec2 vTexCoord; +varying float vDepth; + +void main() { + vec4 texColor = texture2D(u_texture, vTexCoord); + if(texColor == vec4(1, 0, 1, 1) || texColor == vec4(1, 0, 0, 1) || texColor.w == 0.0) { + discard; + } else { + gl_FragColor = texColor * vColor; + gl_FragColor = vec4(vDepth / 20.0, vDepth / 20.0, vDepth / 20.0, gl_FragColor.w); + } +} \ No newline at end of file diff --git a/res/shaders/flat.frag b/res/shaders/flat.frag index c87c603..753099c 100644 --- a/res/shaders/flat.frag +++ b/res/shaders/flat.frag @@ -4,6 +4,7 @@ uniform sampler2D u_texture; //"in" varyings from our vertex shader varying vec4 vColor; varying vec2 vTexCoord; +varying float vDepth; void main() { vec4 texColor = texture2D(u_texture, vTexCoord); diff --git a/src/main/java/xyz/valnet/engine/graphics/Drawing.java b/src/main/java/xyz/valnet/engine/graphics/Drawing.java index 00eacf7..aed730e 100644 --- a/src/main/java/xyz/valnet/engine/graphics/Drawing.java +++ b/src/main/java/xyz/valnet/engine/graphics/Drawing.java @@ -21,8 +21,8 @@ public class Drawing { public static void drawSprite(Sprite sprite, int x, int y, int width, int height) { // lazy texture binding if(bound != sprite.atlas) { - if(bound != null) bound.unbind(); - sprite.atlas.bind(); + if(bound != null) bound.unbind(); + sprite.atlas.bind(); } glBegin(GL_QUADS); diff --git a/src/main/java/xyz/valnet/engine/math/TileBox.java b/src/main/java/xyz/valnet/engine/math/TileBox.java index 0e4af53..07be471 100644 --- a/src/main/java/xyz/valnet/engine/math/TileBox.java +++ b/src/main/java/xyz/valnet/engine/math/TileBox.java @@ -2,9 +2,7 @@ package xyz.valnet.engine.math; import java.io.Serializable; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; -import java.util.Set; public class TileBox implements Serializable { public final int x, y; diff --git a/src/main/java/xyz/valnet/engine/scenegraph/GameObject.java b/src/main/java/xyz/valnet/engine/scenegraph/GameObject.java index c3a9578..9700dea 100644 --- a/src/main/java/xyz/valnet/engine/scenegraph/GameObject.java +++ b/src/main/java/xyz/valnet/engine/scenegraph/GameObject.java @@ -100,4 +100,8 @@ public class GameObject implements IRenderable, ITickable, Serializable { protected void onRemoveGameObject(GameObjectCallback listener) { scene.registerRemoveListener(listener); } + + protected void beforeRemoved() {} + + protected void afterRemoved() {} } diff --git a/src/main/java/xyz/valnet/engine/scenegraph/SceneGraph.java b/src/main/java/xyz/valnet/engine/scenegraph/SceneGraph.java index 48d0bf0..be63a48 100644 --- a/src/main/java/xyz/valnet/engine/scenegraph/SceneGraph.java +++ b/src/main/java/xyz/valnet/engine/scenegraph/SceneGraph.java @@ -216,9 +216,11 @@ public abstract class SceneGraph implements IScene { public void remove(GameObject obj) { removeObjects.add(obj); + obj.beforeRemoved(); for(GameObjectCallback listener : onRemoveListeners) { listener.apply(obj); } + obj.afterRemoved(); } public boolean inScene(GameObject gameObject) { @@ -332,7 +334,6 @@ public abstract class SceneGraph implements IScene { @Override public final void keyPress(int key) { - DebugTab.log("keyCode: " + key); keys.add(key); for(IKeyboardListener ikbl : getAll(IKeyboardListener.class)) { ikbl.keyPress(key); diff --git a/src/main/java/xyz/valnet/engine/shaders/Shader.java b/src/main/java/xyz/valnet/engine/shaders/Shader.java index a6c8f90..c7f2262 100644 --- a/src/main/java/xyz/valnet/engine/shaders/Shader.java +++ b/src/main/java/xyz/valnet/engine/shaders/Shader.java @@ -15,137 +15,137 @@ import xyz.valnet.engine.math.Vector3f; import xyz.valnet.engine.math.Vector4f; public class Shader { - - private boolean enabled = false; - - public final int handle; + + private boolean enabled = false; + + public final int handle; - public final static int POSITION = 0; + public final static int POSITION = 0; - private Map locationCache = new HashMap(); - - public Shader(String vertPath, String fragPath) { - handle = load(vertPath, fragPath); - } + private Map locationCache = new HashMap(); + + public Shader(String vertPath, String fragPath) { + handle = load(vertPath, fragPath); + } - private static String loadAsString(String file) { - StringBuilder result = new StringBuilder(); - try { - BufferedReader reader = new BufferedReader(new FileReader(file)); - String buffer = ""; - while ((buffer = reader.readLine()) != null) { - result.append(buffer + '\n'); - } - reader.close(); - } catch (IOException e) { - e.printStackTrace(); - } - return result.toString(); - } + private static String loadAsString(String file) { + StringBuilder result = new StringBuilder(); + try { + BufferedReader reader = new BufferedReader(new FileReader(file)); + String buffer = ""; + while ((buffer = reader.readLine()) != null) { + result.append(buffer + '\n'); + } + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return result.toString(); + } - public int load(String vertPath, String fragPath) { - String vert = Shader.loadAsString(vertPath); - String frag = Shader.loadAsString(fragPath); - return create(vert, frag); - } - - public int create(String vert, String frag) { - int program = glCreateProgram(); - int vertID = glCreateShader(GL_VERTEX_SHADER); - int fragID = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(vertID, vert); - glShaderSource(fragID, frag); - - glCompileShader(vertID); - if (glGetShaderi(vertID, GL_COMPILE_STATUS) == GL_FALSE) { - System.err.println("Failed to compile vertex shader!"); - System.err.println(glGetShaderInfoLog(vertID)); - return -1; - } - - glCompileShader(fragID); - if (glGetShaderi(fragID, GL_COMPILE_STATUS) == GL_FALSE) { - System.err.println("Failed to compile fragment shader!"); - System.err.println(glGetShaderInfoLog(fragID)); - return -1; - } - + public int load(String vertPath, String fragPath) { + String vert = Shader.loadAsString(vertPath); + String frag = Shader.loadAsString(fragPath); + return create(vert, frag); + } + + public int create(String vert, String frag) { + int program = glCreateProgram(); + int vertID = glCreateShader(GL_VERTEX_SHADER); + int fragID = glCreateShader(GL_FRAGMENT_SHADER); + glShaderSource(vertID, vert); + glShaderSource(fragID, frag); + + glCompileShader(vertID); + if (glGetShaderi(vertID, GL_COMPILE_STATUS) == GL_FALSE) { + System.err.println("Failed to compile vertex shader!"); + System.err.println(glGetShaderInfoLog(vertID)); + throw new Error("Failed to compile vertex shader!"); + } + + glCompileShader(fragID); + if (glGetShaderi(fragID, GL_COMPILE_STATUS) == GL_FALSE) { + System.err.println("Failed to compile fragment shader!"); + System.err.println(glGetShaderInfoLog(fragID)); + throw new Error("Failed to compile fragment shader!"); + } + bindAttributes(program); - glAttachShader(program, vertID); - glAttachShader(program, fragID); - glLinkProgram(program); - glValidateProgram(program); - - glDeleteShader(vertID); - glDeleteShader(fragID); - - return program; - } - - protected void bindAttributes(int program) { - glBindAttribLocation(program, POSITION, "Position"); + glAttachShader(program, vertID); + glAttachShader(program, fragID); + glLinkProgram(program); + glValidateProgram(program); + + glDeleteShader(vertID); + glDeleteShader(fragID); + + return program; + } + + protected void bindAttributes(int program) { + glBindAttribLocation(program, POSITION, "Position"); } public int getUniform(String name) { - if (locationCache.containsKey(name)) - return locationCache.get(name); - - int result = glGetUniformLocation(handle, name); - if (result == -1) - System.err.println("Could not find uniform variable '" + name + "'!"); - else - locationCache.put(name, result); - return result; - } - - public void setUniform1i(String name, int value) { - if (!enabled) enable(); - glUniform1i(getUniform(name), value); - } - - public void setUniform1f(String name, float value) { - if (!enabled) enable(); - glUniform1f(getUniform(name), value); - } - - public void setUniform2f(String name, float x, float y) { - if (!enabled) enable(); - glUniform2f(getUniform(name), x, y); - } - - public void setUniform3f(String name, Vector3f vector) { - if (!enabled) enable(); - glUniform3f(getUniform(name), vector.x, vector.y, vector.z); - } - - public void setUniform4f(String name, Vector4f vector) { - if (!enabled) enable(); - glUniform4f(getUniform(name), vector.x, vector.y, vector.z, vector.w); - } - - public void setUniform4f(String name, Color c) { - if (!enabled) enable(); - glUniform4f(getUniform(name), c.r, c.g, c.b, c.a); - } - - public void setUniformMat4f(String name, Matrix4f matrix) { - if (!enabled) enable(); - glUniformMatrix4fv(getUniform(name), false, matrix.toFloatBuffer()); - } + if (locationCache.containsKey(name)) + return locationCache.get(name); + + int result = glGetUniformLocation(handle, name); + if (result == -1) + System.err.println("Could not find uniform variable '" + name + "'!"); + else + locationCache.put(name, result); + return result; + } + + public void setUniform1i(String name, int value) { + if (!enabled) enable(); + glUniform1i(getUniform(name), value); + } + + public void setUniform1f(String name, float value) { + if (!enabled) enable(); + glUniform1f(getUniform(name), value); + } + + public void setUniform2f(String name, float x, float y) { + if (!enabled) enable(); + glUniform2f(getUniform(name), x, y); + } + + public void setUniform3f(String name, Vector3f v) { + if (!enabled) enable(); + glUniform3f(getUniform(name), v.x, v.y, v.z); + } + + public void setUniform4f(String name, Vector4f v) { + if (!enabled) enable(); + glUniform4f(getUniform(name), v.x, v.y, v.z, v.w); + } + + public void setUniform4f(String name, Color c) { + if (!enabled) enable(); + glUniform4f(getUniform(name), c.r, c.g, c.b, c.a); + } + + public void setUniformMat4f(String name, Matrix4f matrix) { + if (!enabled) enable(); + glUniformMatrix4fv(getUniform(name), false, matrix.toFloatBuffer()); + } public void setMatrices (Matrix4f projection) { setUniformMat4f("uProjection", projection); } - - public void enable() { - glUseProgram(handle); - enabled = true; - } - - public void disable() { - glUseProgram(0); - enabled = false; - } + + public void enable() { + glUseProgram(handle); + enabled = true; + } + + public void disable() { + glUseProgram(0); + enabled = false; + } } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/jobs/Job.java b/src/main/java/xyz/valnet/hadean/gameobjects/jobs/Job.java index 8a162a2..128ef88 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/jobs/Job.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/jobs/Job.java @@ -30,7 +30,7 @@ public class Job extends GameObject { // pickup and dropoff should be all in one step, as each step should // only need state tracked for the job, not the worker. - // workers can change between steps. + // workers can change between steps. @Deprecated public class PickupItem extends JobStep { public Item item; @@ -73,7 +73,7 @@ public class Job extends GameObject { // pickup and dropoff should be all in one step, as each step should // only need state tracked for the job, not the worker. - // workers can change between steps. + // workers can change between steps. @Deprecated public class PickupItemByPredicate extends JobStep { public IItemPredicate predicate; diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/terrain/Tile.java b/src/main/java/xyz/valnet/hadean/gameobjects/terrain/Tile.java index 25f6961..20fefee 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/terrain/Tile.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/terrain/Tile.java @@ -1,8 +1,6 @@ package xyz.valnet.hadean.gameobjects.terrain; -import java.util.ArrayList; import java.util.HashSet; -import java.util.List; import java.util.Set; import xyz.valnet.engine.graphics.Color; @@ -17,8 +15,8 @@ import xyz.valnet.hadean.gameobjects.worldobjects.items.Item; import xyz.valnet.hadean.gameobjects.worldobjects.zones.FarmPlot; import xyz.valnet.hadean.interfaces.IItemPredicate; import xyz.valnet.hadean.interfaces.IPingable; -import xyz.valnet.hadean.interfaces.ITileThing; import xyz.valnet.hadean.interfaces.IWorkable; +import xyz.valnet.hadean.interfaces.IWorldObject; import xyz.valnet.hadean.util.Assets; import xyz.valnet.hadean.util.Layers; @@ -32,11 +30,7 @@ public class Tile extends WorldObject implements IWorkable { private final int tileSelector = (int)Math.floor(Math.random() * 4); private boolean rocks = false; - private Set stuff = new HashSet(); - // TODO remove remove queue, cause like, we dont iterate over - // things? so why remove queue them? that just leads to unneccesary - // timing issues. you dumb fuck. - private List toRemove = new ArrayList(); + private Set stuff = new HashSet(); public Tile(int x, int y) { setPosition(x, y); @@ -75,14 +69,14 @@ public class Tile extends WorldObject implements IWorkable { public boolean isTileFree() { if(!isWalkable()) return false; - for(ITileThing thing : stuff) { + for(var thing : stuff) { if(thing instanceof Item) return false; } return true; } public Item pickupByItemPredicate(IItemPredicate itemPredicate) { - for(ITileThing thing : stuff) { + for(var thing : stuff) { if(thing instanceof Item) { Item item = (Item) thing; if(item.matches(itemPredicate)) { @@ -94,7 +88,9 @@ public class Tile extends WorldObject implements IWorkable { } public void pingThings() { - for(ITileThing thing : stuff) { + // TODO this is a quick lil workaround for a concurerncy issue. + // just clone the items + for(var thing : new HashSet(stuff)) { if(thing instanceof IPingable) { ((IPingable)thing).ping(); } @@ -113,12 +109,13 @@ public class Tile extends WorldObject implements IWorkable { if(west != null) west.pingThings(); } - public void placeThing(ITileThing thing) { + public void placeThing(IWorldObject thing) { + if(thing == this) return; + stuff.add(thing); if(thing instanceof GameObject) { add((GameObject)thing); } - thing.onPlaced(this); pingThings(); pingNeighbors(); @@ -128,11 +125,12 @@ public class Tile extends WorldObject implements IWorkable { } } - public T removeThing(T thing) { - if(!(stuff.contains(thing))) return null; - if(toRemove.contains(thing)) return null; + public T removeThing(T thing) { + if(thing == this) return null; - toRemove.add(thing); + if(!(stuff.contains(thing))) return null; + + stuff.remove(thing); pingThings(); pingNeighbors(); @@ -141,21 +139,7 @@ public class Tile extends WorldObject implements IWorkable { } @Override - public void update(float dTime) { - for(ITileThing thing : stuff) { - if(thing.shouldRemove()) { - toRemove.add(thing); - } - } - for(ITileThing thing : toRemove) { - stuff.remove(thing); - thing.onRemove(); - if(thing instanceof GameObject) { - remove((GameObject)thing); - } - } - toRemove.clear(); - } + public void update(float dTime) {} @Override public void render() { @@ -174,7 +158,7 @@ public class Tile extends WorldObject implements IWorkable { } public boolean isWalkable() { - for(ITileThing thing : stuff) { + for(var thing : stuff) { if(!thing.isWalkable()) return false; } return true; @@ -222,14 +206,14 @@ public class Tile extends WorldObject implements IWorkable { public String toThingsString() { if(stuff.size() == 0) return " - Nothing"; String str = ""; - for(ITileThing thing : stuff) { + for(var thing : stuff) { str += " - " + thing + "\n"; } return str.stripTrailing(); } public boolean has(Class clazz) { - for(ITileThing thing : stuff) { + for(var thing : stuff) { if(clazz.isInstance(thing)) { return true; } 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 31e7bde..d2e1d12 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 @@ -53,7 +53,7 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IBuildLay BuildTab.registerBuildable(Wall.class); BuildTab.registerBuildable(Quarry.class); - + BuildTab.registerBuildable(FarmPlot.class); BuildTab.registerBuildable(Stockpile.class); BuildTab.registerBuildable(MasonWorkshop.class); diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/DebugTab.java b/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/DebugTab.java index b8acf4a..3f210bc 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/DebugTab.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/DebugTab.java @@ -76,10 +76,20 @@ public class DebugTab extends Tab implements IKeyboardListener { log(obj.toString()); } + private boolean keyTest = false; + @Override public void keyPress(int code) { + if(keyTest) { + DebugTab.log("Key Code:" + code); + keyTest = false; + } if(code == 96) { // tilde evoke(); + } else if(code == 281) { // insert? top row second to last + keyTest = true; + } else if(code == 301) { // f12 + HadeanGame.debugView = !HadeanGame.debugView; } } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Buildable.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Buildable.java index da14980..3cf0a65 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Buildable.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Buildable.java @@ -1,31 +1,34 @@ package xyz.valnet.hadean.gameobjects.worldobjects; import xyz.valnet.engine.math.TileBox; -import xyz.valnet.hadean.gameobjects.terrain.Tile; +import xyz.valnet.hadean.gameobjects.ui.Popup; import xyz.valnet.hadean.interfaces.IBuildable; import xyz.valnet.hadean.interfaces.ISelectable; -import xyz.valnet.hadean.interfaces.ITileThing; import xyz.valnet.hadean.util.Action; import xyz.valnet.hadean.util.detail.Detail; -public abstract class Buildable extends WorldObject implements IBuildable, ITileThing, ISelectable { +// Buildable, means its in the build menu +public abstract class Buildable extends WorldObject implements IBuildable, ISelectable { + + public static Action CANCEL = new Action("Cancel"); @Override public void buildAt(TileBox box) { setPosition(box.asBox()); } - @Override - public void onPlaced(Tile tile) {} - @Override public Action[] getActions() { - return new Action[] {}; + return new Action[] { + CANCEL + }; } @Override public void runAction(Action action) { - + if(action == CANCEL) { + add(new Popup()); + } } @Override 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 e3f35ae..8966b69 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Tree.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Tree.java @@ -7,7 +7,6 @@ import xyz.valnet.hadean.gameobjects.jobs.JobBoard; import xyz.valnet.hadean.gameobjects.terrain.Tile; import xyz.valnet.hadean.gameobjects.worldobjects.items.Log; 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; @@ -16,7 +15,7 @@ import xyz.valnet.hadean.util.detail.BooleanDetail; import xyz.valnet.hadean.util.detail.Detail; import xyz.valnet.hadean.util.detail.PercentDetail; -public class Tree extends WorldObject implements ITileThing, ISelectable, IWorkable { +public class Tree extends WorldObject implements ISelectable, IWorkable { private Job chopJob = null; @@ -85,6 +84,7 @@ public class Tree extends WorldObject implements ITileThing, ISelectable, IWorka @Override public boolean doWork(float dTime) { choppage += dTime; + if(getProgress() >= 1.0) remove(this); return getProgress() >= 1; } @@ -110,12 +110,7 @@ public class Tree extends WorldObject implements ITileThing, ISelectable, IWorka } @Override - public boolean shouldRemove() { - return getProgress() >= 1.0; - } - - @Override - public void onRemove() { + protected void beforeRemoved() { Vector2i pos = getWorldPosition().xy(); add(new Log(pos.x, pos.y)); } @@ -129,7 +124,4 @@ public class Tree extends WorldObject implements ITileThing, ISelectable, IWorka public String getName() { return "Tree"; } - - @Override - public void onPlaced(Tile tile) {} } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/WorldObject.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/WorldObject.java index e6c18a1..b75bdc7 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/WorldObject.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/WorldObject.java @@ -10,11 +10,10 @@ import xyz.valnet.engine.scenegraph.GameObject; import xyz.valnet.hadean.gameobjects.Camera; import xyz.valnet.hadean.gameobjects.terrain.Terrain; import xyz.valnet.hadean.gameobjects.terrain.Tile; -import xyz.valnet.hadean.interfaces.ITileThing; import xyz.valnet.hadean.interfaces.IWorldObject; public abstract class WorldObject extends GameObject implements IWorldObject { - + // TODO make it just a box lawl private int x; private int y; @@ -40,11 +39,11 @@ public abstract class WorldObject extends GameObject implements IWorldObject { @Override protected void start() { setPosition(x, y, w, h); + getTile().placeThing(this); } private void updateTileLinks(Set tiles) { if(tiles == null || tiles.size() == 0) return; - if(!(this instanceof ITileThing)) return; Set removeTiles = new HashSet(); Set addTiles = new HashSet(); @@ -61,16 +60,12 @@ public abstract class WorldObject extends GameObject implements IWorldObject { for(Tile tile : removeTiles) { linkedTiles.remove(tile); - if(this instanceof ITileThing) { - tile.removeThing((ITileThing) this); - } + tile.removeThing(this); } for(Tile tile : addTiles) { linkedTiles.add(tile); - if(this instanceof ITileThing) { - tile.placeThing((ITileThing) this); - } + tile.placeThing(this); } if(linkedTiles.size() == 0 && inScene()) { diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/agents/pawn/Pawn.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/agents/pawn/Pawn.java index c740bed..136bd77 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/agents/pawn/Pawn.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/agents/pawn/Pawn.java @@ -236,4 +236,10 @@ public class Pawn extends Agent { } private List inventory = new ArrayList(); + + @Override + public boolean isWalkable() { + // TODO thiss could be an interesting mechanic, but it may be bad + return false; + } } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/constructions/Bed.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/constructions/Bed.java index a133da5..0c9eded 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/constructions/Bed.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/constructions/Bed.java @@ -23,16 +23,6 @@ public class Bed extends Construction { return false; } - @Override - public boolean shouldRemove() { - return false; - } - - @Override - public void onRemove() { - - } - @Override protected IItemPredicate getBuildingMaterial() { return Log.LOG_PREDICATE; diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/constructions/Construction.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/constructions/Construction.java index 207ab5e..ec3ce14 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/constructions/Construction.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/constructions/Construction.java @@ -103,16 +103,6 @@ public abstract class Construction extends Buildable { @Override public abstract boolean isWalkable(); - @Override - public boolean shouldRemove() { - return false; - } - - @Override - public void onRemove() { - - } - @Override public abstract String getName(); @@ -159,9 +149,6 @@ public abstract class Construction extends Buildable { @Override public Action[] getActions() { - return new Action[0]; + return super.getActions(); } - - @Override - public void runAction(Action action) {} } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/constructions/Quarry.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/constructions/Quarry.java index 5cbc557..9f1f91b 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/constructions/Quarry.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/constructions/Quarry.java @@ -54,15 +54,6 @@ public class Quarry extends Construction { return true; } - @Override - public boolean shouldRemove() { - return false; - } - - @Override - public void onRemove() { - } - @Override public String getName() { return "Quarry"; diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/constructions/Wall.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/constructions/Wall.java index 76df8a2..754cd46 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/constructions/Wall.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/constructions/Wall.java @@ -41,16 +41,6 @@ public class Wall extends Construction implements IPingable { return !isBuilt(); } - @Override - public boolean shouldRemove() { - return false; - } - - @Override - public void onRemove() { - - } - private EnumSet wallSides = EnumSet.noneOf(Direction.class); @Override diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/items/Boulder.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/items/Boulder.java index b1b4d67..3753029 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/items/Boulder.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/items/Boulder.java @@ -30,14 +30,6 @@ public class Boulder extends Item { return true; } - @Override - public boolean shouldRemove() { - return false; - } - - @Override - public void onRemove() {} - @Override public Detail[] getDetails() { return new Detail[] {}; 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 06d9da3..bbd6f70 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 @@ -4,16 +4,14 @@ import xyz.valnet.engine.math.Vector2i; import xyz.valnet.engine.math.Vector4i; import xyz.valnet.hadean.gameobjects.jobs.Job; import xyz.valnet.hadean.gameobjects.jobs.JobBoard; -import xyz.valnet.hadean.gameobjects.terrain.Tile; import xyz.valnet.hadean.gameobjects.worldobjects.WorldObject; import xyz.valnet.hadean.interfaces.IItemPredicate; 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; -public abstract class Item extends WorldObject implements ISelectable, ITileThing { +public abstract class Item extends WorldObject implements ISelectable { protected JobBoard jobboard; private Job haulJob = null; @@ -84,17 +82,10 @@ public abstract class Item extends WorldObject implements ISelectable, ITileThin jobboard.postJob(haulJob); } - @Override - public void onPlaced(Tile tile) { - setPosition(tile.getWorldPosition()); - } - public boolean matches(IItemPredicate itemPredicate) { return itemPredicate.matches(this); } - - public void setPosition(Vector4i vector) { super.setPosition(vector); } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/items/Log.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/items/Log.java index 2757d43..e36f4cd 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/items/Log.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/items/Log.java @@ -30,14 +30,6 @@ public class Log extends Item { return true; } - @Override - public boolean shouldRemove() { - return false; - } - - @Override - public void onRemove() {} - @Override public Detail[] getDetails() { return new Detail[] {}; diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/zones/FarmPlot.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/zones/FarmPlot.java index 6e6706e..b65c0ea 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/zones/FarmPlot.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/zones/FarmPlot.java @@ -46,24 +46,11 @@ public class FarmPlot extends Zone { return true; } - @Override - public boolean shouldRemove() { - return false; - } - - @Override - public void onRemove() { - - } - @Override public String getName() { return "Farm Plot"; } - @Override - public void onPlaced(Tile tile) {} - @Override public ISelectable.Priority getSelectPriority() { return ISelectable.Priority.LOW; diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/zones/Stockpile.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/zones/Stockpile.java index 2d5167c..d9c1156 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/zones/Stockpile.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/zones/Stockpile.java @@ -61,24 +61,11 @@ public class Stockpile extends Zone { return true; } - @Override - public boolean shouldRemove() { - return false; - } - - @Override - public void onRemove() { - - } - @Override public String getName() { return "Stockpile"; } - @Override - public void onPlaced(Tile tile) {} - @Override public ISelectable.Priority getSelectPriority() { return ISelectable.Priority.LOW; diff --git a/src/main/java/xyz/valnet/hadean/interfaces/ITileThing.java b/src/main/java/xyz/valnet/hadean/interfaces/ITileThing.java deleted file mode 100644 index def25ce..0000000 --- a/src/main/java/xyz/valnet/hadean/interfaces/ITileThing.java +++ /dev/null @@ -1,10 +0,0 @@ -package xyz.valnet.hadean.interfaces; - -import xyz.valnet.hadean.gameobjects.terrain.Tile; - -public interface ITileThing { - public boolean isWalkable(); - public boolean shouldRemove(); - public void onRemove(); - public void onPlaced(Tile tile); -} diff --git a/src/main/java/xyz/valnet/hadean/interfaces/IWorldObject.java b/src/main/java/xyz/valnet/hadean/interfaces/IWorldObject.java index 8c24db1..79bf9fa 100644 --- a/src/main/java/xyz/valnet/hadean/interfaces/IWorldObject.java +++ b/src/main/java/xyz/valnet/hadean/interfaces/IWorldObject.java @@ -4,4 +4,5 @@ import xyz.valnet.hadean.gameobjects.terrain.Tile; public interface IWorldObject { public Tile getTile(int x, int y); + public boolean isWalkable(); } diff --git a/src/main/java/xyz/valnet/hadean/util/Action.java b/src/main/java/xyz/valnet/hadean/util/Action.java index 436af16..f1e4d2e 100644 --- a/src/main/java/xyz/valnet/hadean/util/Action.java +++ b/src/main/java/xyz/valnet/hadean/util/Action.java @@ -1,5 +1,7 @@ package xyz.valnet.hadean.util; + +// TODO consider making this an enum? public class Action { public final String name; diff --git a/src/main/java/xyz/valnet/hadean/util/Assets.java b/src/main/java/xyz/valnet/hadean/util/Assets.java index 61a5e94..3d91235 100644 --- a/src/main/java/xyz/valnet/hadean/util/Assets.java +++ b/src/main/java/xyz/valnet/hadean/util/Assets.java @@ -57,10 +57,12 @@ public class Assets { public static final SimpleShader flat; + public static final SimpleShader depth; static { DebugTab.log("=== [ LOADING ASSETS ] ==="); - flat = new SimpleShader("res/shaders/flat.vert", "res/shaders/flat.frag"); + flat = new SimpleShader("res/shaders/base.vert", "res/shaders/flat.frag"); + depth = new SimpleShader("res/shaders/base.vert", "res/shaders/depth.frag"); atlas = new Texture("res/textures.png");