From 17171f4e6ef7f62861c0ec97fff359732a5432c6 Mon Sep 17 00:00:00 2001 From: Ivory Date: Tue, 10 Jan 2023 01:26:30 -0500 Subject: [PATCH] properly add / remove things from tiles --- .../hadean/gameobjects/worldobjects/Tree.java | 3 +- .../gameobjects/worldobjects/WorldObject.java | 28 +++++++++++++++---- .../gameobjects/worldobjects/items/Item.java | 21 +++++++++++++- .../gameobjects/worldobjects/pawn/Pawn.java | 8 ++---- 4 files changed, 47 insertions(+), 13 deletions(-) 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 e8de3b6..9a79062 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Tree.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/Tree.java @@ -120,8 +120,7 @@ public class Tree extends WorldObject implements ITileThing, ISelectable, IWorka @Override public void onRemove() { Vector2i pos = getWorldPosition().xy(); - Log log = new Log(pos.x, pos.y); - getTile().placeThing(log); + add(new Log(pos.x, pos.y)); } @Override 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 9bc5d71..394e4f4 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/WorldObject.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/WorldObject.java @@ -3,6 +3,7 @@ package xyz.valnet.hadean.gameobjects.worldobjects; import java.util.HashSet; import java.util.Set; +import xyz.valnet.engine.math.Vector2i; import xyz.valnet.engine.math.Vector4f; import xyz.valnet.engine.math.Vector4i; import xyz.valnet.engine.scenegraph.GameObject; @@ -42,6 +43,7 @@ public abstract class WorldObject extends GameObject { private void updateTileLinks(Set tiles) { if(tiles == null || tiles.size() == 0) return; if(!(this instanceof ITileThing)) return; + boolean inScene = inScene(); Set removeTiles = new HashSet(); Set addTiles = new HashSet(); @@ -58,25 +60,41 @@ public abstract class WorldObject extends GameObject { for(Tile tile : removeTiles) { linkedTiles.remove(tile); - tile.remove(this); + if(this instanceof ITileThing) { + tile.removeThing((ITileThing) this); + } } for(Tile tile : addTiles) { linkedTiles.add(tile); - tile.placeThing((ITileThing) this); + if(this instanceof ITileThing) { + tile.placeThing((ITileThing) this); + } + } + + if(linkedTiles.size() == 0 && inScene()) { + remove(this); + } + + if(linkedTiles.size() != 0 && !inScene()) { + add(this); } } - public void setPosition(Vector4i vector) { + protected void setPosition(Vector4i vector) { setPosition(vector.x, vector.y, vector.z, vector.w); } - public void setPosition(int x, int y) { + protected void setPosition(Vector2i vector) { + setPosition(vector.x, vector.y); + } + + protected void setPosition(int x, int y) { setPosition(x, y, 1, 1); } - public void setPosition(int x, int y, int w, int h) { + protected void setPosition(int x, int y, int w, int h) { this.x = x; this.y = y; this.w = w; 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 65cecaa..d49010a 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 @@ -1,6 +1,7 @@ package xyz.valnet.hadean.gameobjects.worldobjects.items; -import xyz.valnet.engine.math.Vector4f; +import xyz.valnet.engine.math.Vector2i; +import xyz.valnet.engine.math.Vector4i; import xyz.valnet.hadean.gameobjects.Job; import xyz.valnet.hadean.gameobjects.JobBoard; import xyz.valnet.hadean.gameobjects.Tile; @@ -91,4 +92,22 @@ public abstract class Item extends WorldObject implements ISelectable, ITileThin public boolean matches(IItemPredicate itemPredicate) { return itemPredicate.matches(this); } + + + + public void setPosition(Vector4i vector) { + super.setPosition(vector); + } + + public void setPosition(Vector2i vector) { + super.setPosition(vector); + } + + public void setPosition(int x, int y) { + super.setPosition(x, y); + } + + public void setPosition(int x, int y, int w, int h) { + super.setPosition(x, y, w, h); + } } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/pawn/Pawn.java b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/pawn/Pawn.java index 8a80bca..d73a903 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/pawn/Pawn.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/worldobjects/pawn/Pawn.java @@ -42,9 +42,7 @@ public class Pawn extends Agent { public void pickupItemByPredicate(IItemPredicate itemPredicate) { Item item = getTile().pickupByItemPredicate(itemPredicate); - if(item == null) return; - remove(item); - inventory.add(item); + dropoffItem(item); } public void pickupItem(Item i) { @@ -58,8 +56,8 @@ public class Pawn extends Agent { if(!inventory.contains(item)) { return; } - inventory.remove(item); - add(item); + inventory.remove(add(item)); + item.setPosition(getWorldPosition().xy()); getTile().placeThing(item); }