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 cbbff897..64b923a8 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 @@ -38,6 +38,4 @@ public interface Entity extends Movable, Animated, Renderable, Updatable { void setZIndex(int zIndex); CompletableFuture performInstantAnimation(); - - CompletableFuture performInstantAnimation(Direction targetFaceDirection); } 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 a50efb04..14beebda 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 @@ -272,11 +272,6 @@ public abstract class EntityDelegate implements Entity { return entity.performInstantAnimation(); } - @Override - public CompletableFuture performInstantAnimation(Direction targetFaceDirection) { - return entity.performInstantAnimation(targetFaceDirection); - } - @Override public boolean move(Movement movement) { return entity.move(movement); 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 66ec4a04..a03ae6c9 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 @@ -1,16 +1,13 @@ package com.bartlomiejpluta.base.engine.world.entity.model; -import com.bartlomiejpluta.base.api.camera.Camera; import com.bartlomiejpluta.base.api.entity.Entity; import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer; import com.bartlomiejpluta.base.api.move.Direction; import com.bartlomiejpluta.base.api.move.EntityMovement; import com.bartlomiejpluta.base.api.move.Movement; -import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.base.engine.world.entity.manager.EntitySetManager; import com.bartlomiejpluta.base.engine.world.movement.MovableSprite; -import com.bartlomiejpluta.base.internal.render.ShaderManager; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; @@ -127,14 +124,6 @@ public class DefaultEntity extends MovableSprite implements Entity { return animation.getFuture(); } - @Override - public CompletableFuture performInstantAnimation(Direction targetFaceDirection) { - var animation = new EntityInstantAnimation(this, defaultSpriteColumn, targetFaceDirection); - instantAnimations.add(animation); - - return animation.getFuture(); - } - @Override public Movement prepareMovement(Direction direction) { return new EntityMovement(this, direction); @@ -218,13 +207,13 @@ public class DefaultEntity extends MovableSprite implements Entity { } @Override - public void render(Screen screen, Camera camera, ShaderManager shaderManager) { + public void update(float dt) { + super.update(dt); + var instantAnimation = instantAnimations.peek(); - if (instantAnimation != null && instantAnimation.updateFrame()) { + if (instantAnimation != null && instantAnimation.update() == EntityInstantAnimation.State.COMPLETED) { instantAnimations.poll(); } - - super.render(screen, camera, shaderManager); } int currentFrame() { diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/entity/model/EntityInstantAnimation.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/entity/model/EntityInstantAnimation.java index 98004c36..6a124265 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/entity/model/EntityInstantAnimation.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/entity/model/EntityInstantAnimation.java @@ -1,48 +1,39 @@ package com.bartlomiejpluta.base.engine.world.entity.model; -import com.bartlomiejpluta.base.api.move.Direction; import lombok.Getter; import java.util.concurrent.CompletableFuture; public class EntityInstantAnimation { + public enum State {RUNNING, COMPLETED} private final DefaultEntity entity; private final int firstFrame; private final int lastFrame; - private final Direction faceDirectionOnFinish; + private boolean finished = false; @Getter private final CompletableFuture future = new CompletableFuture<>(); EntityInstantAnimation(DefaultEntity entity, int firstFrame) { - this(entity, firstFrame, null); - } - - EntityInstantAnimation(DefaultEntity entity, int firstFrame, Direction faceDirectionOnFinish) { this.entity = entity; this.firstFrame = firstFrame; this.lastFrame = entity.getMaterial().getTexture().getColumns() - 1; - this.faceDirectionOnFinish = faceDirectionOnFinish; } - public boolean updateFrame() { + public State update() { if (!finished && entity.currentFrame() == lastFrame) { finished = true; - return false; + return State.RUNNING; } if (finished && entity.currentFrame() == firstFrame) { - if (faceDirectionOnFinish != null) { - entity.setFaceDirection(faceDirectionOnFinish); - } - future.complete(null); - return true; + return State.COMPLETED; } - return false; + return State.RUNNING; } }