properly add / remove things from tiles

world-object-unification-project
Ivory 2023-01-10 01:26:30 -05:00
parent e31a164871
commit 17171f4e6e
4 changed files with 47 additions and 13 deletions

View File

@ -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

View File

@ -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<Tile> tiles) {
if(tiles == null || tiles.size() == 0) return;
if(!(this instanceof ITileThing)) return;
boolean inScene = inScene();
Set<Tile> removeTiles = new HashSet<Tile>();
Set<Tile> addTiles = new HashSet<Tile>();
@ -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);
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;

View File

@ -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);
}
}

View File

@ -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);
}