Enforce Entities exist on only one object layer at the same time

This commit is contained in:
2021-03-30 22:15:38 +02:00
parent 08694e4e02
commit 56dedb1b5b
8 changed files with 43 additions and 3 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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