Refactor AnimatedSprite | make animation stop when engine is paused

This commit is contained in:
2021-03-12 20:35:42 +01:00
parent 8e5e2da0f9
commit 30c8252dd2
2 changed files with 11 additions and 2 deletions

View File

@@ -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.camera.Camera;
import com.bartlomiejpluta.base.api.game.screen.Screen; 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.api.internal.render.ShaderManager;
import com.bartlomiejpluta.base.engine.core.gl.object.material.Material; import com.bartlomiejpluta.base.engine.core.gl.object.material.Material;
import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.base.engine.core.gl.object.mesh.Mesh;
@@ -10,7 +11,8 @@ import lombok.EqualsAndHashCode;
import org.joml.Vector2fc; import org.joml.Vector2fc;
@EqualsAndHashCode(callSuper = true) @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) { public AnimatedSprite(Mesh mesh, Material material) {
super(mesh, material); super(mesh, material);
@@ -23,6 +25,11 @@ public abstract class AnimatedSprite extends Sprite {
public abstract Vector2fc[] getSpriteAnimationFramesPositions(); public abstract Vector2fc[] getSpriteAnimationFramesPositions();
@Override
public void update(float dt) {
time += dt * 1000;
}
@Override @Override
public void render(Screen screen, Camera camera, ShaderManager shaderManager) { public void render(Screen screen, Camera camera, ShaderManager shaderManager) {
animate(); animate();
@@ -33,7 +40,7 @@ public abstract class AnimatedSprite extends Sprite {
if (shouldAnimate()) { if (shouldAnimate()) {
var positions = getSpriteAnimationFramesPositions(); var positions = getSpriteAnimationFramesPositions();
var delay = getAnimationSpeed(); var delay = getAnimationSpeed();
var currentPosition = (int) (System.currentTimeMillis() % (positions.length * delay)) / delay; var currentPosition = ((time % (positions.length * delay)) / delay);
var current = positions[currentPosition]; var current = positions[currentPosition];
material.setSpritePosition(current); material.setSpritePosition(current);
} }

View File

@@ -39,6 +39,8 @@ public abstract class MovableSprite extends AnimatedSprite implements Updatable
@Override @Override
public void update(float dt) { public void update(float dt) {
super.update(dt);
if (movement != null) { if (movement != null) {
if (moveTime > 0) { if (moveTime > 0) {
--moveTime; --moveTime;