properly add / remove things from tiles
parent
e31a164871
commit
17171f4e6e
|
|
@ -120,8 +120,7 @@ public class Tree extends WorldObject implements ITileThing, ISelectable, IWorka
|
||||||
@Override
|
@Override
|
||||||
public void onRemove() {
|
public void onRemove() {
|
||||||
Vector2i pos = getWorldPosition().xy();
|
Vector2i pos = getWorldPosition().xy();
|
||||||
Log log = new Log(pos.x, pos.y);
|
add(new Log(pos.x, pos.y));
|
||||||
getTile().placeThing(log);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package xyz.valnet.hadean.gameobjects.worldobjects;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import xyz.valnet.engine.math.Vector2i;
|
||||||
import xyz.valnet.engine.math.Vector4f;
|
import xyz.valnet.engine.math.Vector4f;
|
||||||
import xyz.valnet.engine.math.Vector4i;
|
import xyz.valnet.engine.math.Vector4i;
|
||||||
import xyz.valnet.engine.scenegraph.GameObject;
|
import xyz.valnet.engine.scenegraph.GameObject;
|
||||||
|
|
@ -42,6 +43,7 @@ public abstract class WorldObject extends GameObject {
|
||||||
private void updateTileLinks(Set<Tile> tiles) {
|
private void updateTileLinks(Set<Tile> tiles) {
|
||||||
if(tiles == null || tiles.size() == 0) return;
|
if(tiles == null || tiles.size() == 0) return;
|
||||||
if(!(this instanceof ITileThing)) return;
|
if(!(this instanceof ITileThing)) return;
|
||||||
|
boolean inScene = inScene();
|
||||||
|
|
||||||
Set<Tile> removeTiles = new HashSet<Tile>();
|
Set<Tile> removeTiles = new HashSet<Tile>();
|
||||||
Set<Tile> addTiles = new HashSet<Tile>();
|
Set<Tile> addTiles = new HashSet<Tile>();
|
||||||
|
|
@ -58,25 +60,41 @@ public abstract class WorldObject extends GameObject {
|
||||||
|
|
||||||
for(Tile tile : removeTiles) {
|
for(Tile tile : removeTiles) {
|
||||||
linkedTiles.remove(tile);
|
linkedTiles.remove(tile);
|
||||||
tile.remove(this);
|
if(this instanceof ITileThing) {
|
||||||
|
tile.removeThing((ITileThing) this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(Tile tile : addTiles) {
|
for(Tile tile : addTiles) {
|
||||||
linkedTiles.add(tile);
|
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);
|
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);
|
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.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
this.w = w;
|
this.w = w;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package xyz.valnet.hadean.gameobjects.worldobjects.items;
|
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.Job;
|
||||||
import xyz.valnet.hadean.gameobjects.JobBoard;
|
import xyz.valnet.hadean.gameobjects.JobBoard;
|
||||||
import xyz.valnet.hadean.gameobjects.Tile;
|
import xyz.valnet.hadean.gameobjects.Tile;
|
||||||
|
|
@ -91,4 +92,22 @@ public abstract class Item extends WorldObject implements ISelectable, ITileThin
|
||||||
public boolean matches(IItemPredicate itemPredicate) {
|
public boolean matches(IItemPredicate itemPredicate) {
|
||||||
return itemPredicate.matches(this);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,9 +42,7 @@ public class Pawn extends Agent {
|
||||||
|
|
||||||
public void pickupItemByPredicate(IItemPredicate itemPredicate) {
|
public void pickupItemByPredicate(IItemPredicate itemPredicate) {
|
||||||
Item item = getTile().pickupByItemPredicate(itemPredicate);
|
Item item = getTile().pickupByItemPredicate(itemPredicate);
|
||||||
if(item == null) return;
|
dropoffItem(item);
|
||||||
remove(item);
|
|
||||||
inventory.add(item);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void pickupItem(Item i) {
|
public void pickupItem(Item i) {
|
||||||
|
|
@ -58,8 +56,8 @@ public class Pawn extends Agent {
|
||||||
if(!inventory.contains(item)) {
|
if(!inventory.contains(item)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
inventory.remove(item);
|
inventory.remove(add(item));
|
||||||
add(item);
|
item.setPosition(getWorldPosition().xy());
|
||||||
getTile().placeThing(item);
|
getTile().placeThing(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue