Enforce Entities exist on only one object layer at the same time
This commit is contained in:
@@ -40,6 +40,9 @@ public class DefaultEntity extends MovableSprite implements Entity {
|
||||
@Setter
|
||||
private boolean blocking;
|
||||
|
||||
@Getter
|
||||
private ObjectLayer layer;
|
||||
|
||||
public DefaultEntity(Mesh mesh, EntitySetManager entitySetManager, Map<Direction, Integer> spriteDirectionRows, Map<Direction, Vector2fc> spriteDefaultRows, String entitySetUid) {
|
||||
super(mesh, entitySetManager.loadObject(requireNonNull(entitySetUid)));
|
||||
this.entitySetManager = entitySetManager;
|
||||
@@ -124,12 +127,12 @@ public class DefaultEntity extends MovableSprite implements Entity {
|
||||
|
||||
@Override
|
||||
public void onAdd(ObjectLayer layer) {
|
||||
// Do nothing
|
||||
this.layer = layer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRemove(ObjectLayer layer) {
|
||||
// Do nothing
|
||||
this.layer = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -68,6 +68,13 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
||||
|
||||
@Override
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -153,7 +160,6 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer {
|
||||
if(!entitiesToAdd.isEmpty()) {
|
||||
for (var entity : entitiesToAdd) {
|
||||
entity.onAdd(this);
|
||||
entity.setStepSize(stepSize.x(), stepSize.y());
|
||||
entities.add(entity);
|
||||
}
|
||||
|
||||
|
||||
@@ -105,6 +105,14 @@ public abstract class MovableSprite extends AnimatedSprite implements Movable, U
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void abortMove() {
|
||||
setCoordinates(movement.getFrom());
|
||||
setDefaultAnimationFrame();
|
||||
movementVector = null;
|
||||
movement = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCoordinates(int x, int y) {
|
||||
coordinates.x = x;
|
||||
|
||||
Reference in New Issue
Block a user