Enforce Entities exist on only one object layer at the same time
This commit is contained in:
@@ -22,6 +22,8 @@ public interface Entity extends Movable, Renderable, Updatable {
|
|||||||
|
|
||||||
Direction getDirectionTowards(Entity target);
|
Direction getDirectionTowards(Entity target);
|
||||||
|
|
||||||
|
ObjectLayer getLayer();
|
||||||
|
|
||||||
void onAdd(ObjectLayer layer);
|
void onAdd(ObjectLayer layer);
|
||||||
|
|
||||||
void onRemove(ObjectLayer layer);
|
void onRemove(ObjectLayer layer);
|
||||||
|
|||||||
@@ -32,4 +32,6 @@ public interface Movable extends Placeable {
|
|||||||
int manhattanDistance(Vector2ic coordinates);
|
int manhattanDistance(Vector2ic coordinates);
|
||||||
|
|
||||||
boolean move(Movement movement);
|
boolean move(Movement movement);
|
||||||
|
|
||||||
|
void abortMove();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,10 @@ public final class Movement {
|
|||||||
return object.move(this);
|
return object.move(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void abort() {
|
||||||
|
object.abortMove();
|
||||||
|
}
|
||||||
|
|
||||||
public Movement another() {
|
public Movement another() {
|
||||||
return object.prepareMovement(direction);
|
return object.prepareMovement(direction);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -200,6 +200,11 @@ public abstract class AnimationDelegate implements Animation {
|
|||||||
return animation.move(movement);
|
return animation.move(movement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void abortMove() {
|
||||||
|
animation.abortMove();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAdd(Layer layer) {
|
public void onAdd(Layer layer) {
|
||||||
animation.onAdd(layer);
|
animation.onAdd(layer);
|
||||||
|
|||||||
@@ -194,6 +194,11 @@ public abstract class EntityDelegate implements Entity {
|
|||||||
return entity.getModelMatrix();
|
return entity.getModelMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ObjectLayer getLayer() {
|
||||||
|
return entity.getLayer();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAdd(ObjectLayer layer) {
|
public void onAdd(ObjectLayer layer) {
|
||||||
entity.onAdd(layer);
|
entity.onAdd(layer);
|
||||||
@@ -234,6 +239,11 @@ public abstract class EntityDelegate implements Entity {
|
|||||||
return entity.move(movement);
|
return entity.move(movement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void abortMove() {
|
||||||
|
entity.abortMove();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(float dt) {
|
public void update(float dt) {
|
||||||
entity.update(dt);
|
entity.update(dt);
|
||||||
|
|||||||
@@ -40,6 +40,9 @@ public class DefaultEntity extends MovableSprite implements Entity {
|
|||||||
@Setter
|
@Setter
|
||||||
private boolean blocking;
|
private boolean blocking;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private ObjectLayer layer;
|
||||||
|
|
||||||
public DefaultEntity(Mesh mesh, EntitySetManager entitySetManager, Map<Direction, Integer> spriteDirectionRows, Map<Direction, Vector2fc> spriteDefaultRows, String entitySetUid) {
|
public DefaultEntity(Mesh mesh, EntitySetManager entitySetManager, Map<Direction, Integer> spriteDirectionRows, Map<Direction, Vector2fc> spriteDefaultRows, String entitySetUid) {
|
||||||
super(mesh, entitySetManager.loadObject(requireNonNull(entitySetUid)));
|
super(mesh, entitySetManager.loadObject(requireNonNull(entitySetUid)));
|
||||||
this.entitySetManager = entitySetManager;
|
this.entitySetManager = entitySetManager;
|
||||||
@@ -124,12 +127,12 @@ public class DefaultEntity extends MovableSprite implements Entity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAdd(ObjectLayer layer) {
|
public void onAdd(ObjectLayer layer) {
|
||||||
// Do nothing
|
this.layer = layer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRemove(ObjectLayer layer) {
|
public void onRemove(ObjectLayer layer) {
|
||||||
// Do nothing
|
this.layer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -68,6 +68,13 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addEntity(Entity entity) {
|
public void addEntity(Entity entity) {
|
||||||
|
var layer = (DefaultObjectLayer) entity.getLayer();
|
||||||
|
|
||||||
|
if (layer != null) {
|
||||||
|
layer.entities.remove(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
entity.setStepSize(stepSize.x(), stepSize.y());
|
||||||
entitiesToAdd.add(entity);
|
entitiesToAdd.add(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,7 +160,6 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
|||||||
if(!entitiesToAdd.isEmpty()) {
|
if(!entitiesToAdd.isEmpty()) {
|
||||||
for (var entity : entitiesToAdd) {
|
for (var entity : entitiesToAdd) {
|
||||||
entity.onAdd(this);
|
entity.onAdd(this);
|
||||||
entity.setStepSize(stepSize.x(), stepSize.y());
|
|
||||||
entities.add(entity);
|
entities.add(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -105,6 +105,14 @@ public abstract class MovableSprite extends AnimatedSprite implements Movable, U
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void abortMove() {
|
||||||
|
setCoordinates(movement.getFrom());
|
||||||
|
setDefaultAnimationFrame();
|
||||||
|
movementVector = null;
|
||||||
|
movement = null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCoordinates(int x, int y) {
|
public void setCoordinates(int x, int y) {
|
||||||
coordinates.x = x;
|
coordinates.x = x;
|
||||||
|
|||||||
Reference in New Issue
Block a user