From 30c8252dd24b0298f127878c5323f28034f93de9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Fri, 12 Mar 2021 20:35:42 +0100 Subject: [PATCH] Refactor AnimatedSprite | make animation stop when engine is paused --- .../base/engine/world/animation/AnimatedSprite.java | 11 +++++++++-- .../base/engine/world/movement/MovableSprite.java | 2 ++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/AnimatedSprite.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/AnimatedSprite.java index 180618d0..b86ae53a 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/AnimatedSprite.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/AnimatedSprite.java @@ -2,6 +2,7 @@ package com.bartlomiejpluta.base.engine.world.animation; import com.bartlomiejpluta.base.api.game.camera.Camera; import com.bartlomiejpluta.base.api.game.screen.Screen; +import com.bartlomiejpluta.base.api.internal.logic.Updatable; import com.bartlomiejpluta.base.api.internal.render.ShaderManager; import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh; @@ -10,7 +11,8 @@ import lombok.EqualsAndHashCode; import org.joml.Vector2fc; @EqualsAndHashCode(callSuper = true) -public abstract class AnimatedSprite extends Sprite { +public abstract class AnimatedSprite extends Sprite implements Updatable { + private int time; public AnimatedSprite(Mesh mesh, Material material) { super(mesh, material); @@ -23,6 +25,11 @@ public abstract class AnimatedSprite extends Sprite { public abstract Vector2fc[] getSpriteAnimationFramesPositions(); + @Override + public void update(float dt) { + time += dt * 1000; + } + @Override public void render(Screen screen, Camera camera, ShaderManager shaderManager) { animate(); @@ -33,7 +40,7 @@ public abstract class AnimatedSprite extends Sprite { if (shouldAnimate()) { var positions = getSpriteAnimationFramesPositions(); var delay = getAnimationSpeed(); - var currentPosition = (int) (System.currentTimeMillis() % (positions.length * delay)) / delay; + var currentPosition = ((time % (positions.length * delay)) / delay); var current = positions[currentPosition]; material.setSpritePosition(current); } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/movement/MovableSprite.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/movement/MovableSprite.java index 8bb6667f..a4dab684 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/movement/MovableSprite.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/movement/MovableSprite.java @@ -39,6 +39,8 @@ public abstract class MovableSprite extends AnimatedSprite implements Updatable @Override public void update(float dt) { + super.update(dt); + if (movement != null) { if (moveTime > 0) { --moveTime;