diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/entity/Entity.java b/api/src/main/java/com/bartlomiejpluta/base/api/entity/Entity.java index 44454c11..dd191ef2 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/api/entity/Entity.java +++ b/api/src/main/java/com/bartlomiejpluta/base/api/entity/Entity.java @@ -31,4 +31,8 @@ public interface Entity extends Movable, Renderable, Updatable { void setBlocking(boolean blocking); void changeEntitySet(String entitySetUid); + + int getZIndex(); + + void setZIndex(int zIndex); } diff --git a/api/src/main/java/com/bartlomiejpluta/base/lib/entity/EntityDelegate.java b/api/src/main/java/com/bartlomiejpluta/base/lib/entity/EntityDelegate.java index 9bc26abb..dfcee4b2 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/lib/entity/EntityDelegate.java +++ b/api/src/main/java/com/bartlomiejpluta/base/lib/entity/EntityDelegate.java @@ -219,6 +219,16 @@ public abstract class EntityDelegate implements Entity { entity.changeEntitySet(entitySetUid); } + @Override + public int getZIndex() { + return entity.getZIndex(); + } + + @Override + public void setZIndex(int zIndex) { + entity.setZIndex(zIndex); + } + @Override public void update(float dt) { entity.update(dt); diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/entity/model/DefaultEntity.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/entity/model/DefaultEntity.java index 256de7af..76ea6211 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/entity/model/DefaultEntity.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/entity/model/DefaultEntity.java @@ -27,6 +27,10 @@ public class DefaultEntity extends MovableSprite implements Entity { private final Vector2f entityScale = new Vector2f(1, 1); private Vector2fc entitySetSize; + @Getter + @Setter + private int zIndex = 0; + private int animationSpeed = 100; @Getter diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/object/DefaultObjectLayer.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/object/DefaultObjectLayer.java index 7e3b517e..1ca086e4 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/object/DefaultObjectLayer.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/map/layer/object/DefaultObjectLayer.java @@ -20,6 +20,9 @@ import java.util.LinkedList; import java.util.List; import java.util.Queue; +import static java.lang.Float.compare; +import static java.lang.Integer.compare; + public class DefaultObjectLayer extends BaseLayer implements ObjectLayer { @Getter @@ -190,6 +193,7 @@ public class DefaultObjectLayer extends BaseLayer implements ObjectLayer { } private int compareObjects(Entity a, Entity b) { - return Float.compare(a.getPosition().y(), b.getPosition().y()); + var z = compare(a.getZIndex(), b.getZIndex()); + return z == 0 ? compare(a.getPosition().y(), b.getPosition().y()) : z; } }