From ba748a738f09602909640bb816704971f69bb9ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Tue, 23 Mar 2021 10:05:40 +0100 Subject: [PATCH] Make AnimationManager shares common Mesh 1x1 among all animations --- .../animation/manager/AnimationManager.java | 3 +- .../manager/DefaultAnimationManager.java | 13 +++--- .../animation/model/DefaultAnimation.java | 42 +++++++++++++++++++ 3 files changed, 49 insertions(+), 9 deletions(-) diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/manager/AnimationManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/manager/AnimationManager.java index 894b5fd0..72e25300 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/manager/AnimationManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/manager/AnimationManager.java @@ -1,8 +1,9 @@ package com.bartlomiejpluta.base.engine.world.animation.manager; import com.bartlomiejpluta.base.api.animation.Animation; +import com.bartlomiejpluta.base.engine.common.init.Initianizable; import com.bartlomiejpluta.base.engine.common.manager.AssetManager; import com.bartlomiejpluta.base.engine.world.animation.asset.AnimationAsset; -public interface AnimationManager extends AssetManager { +public interface AnimationManager extends Initianizable, AssetManager { } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/manager/DefaultAnimationManager.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/manager/DefaultAnimationManager.java index 8b980e93..5788d95f 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/manager/DefaultAnimationManager.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/manager/DefaultAnimationManager.java @@ -28,7 +28,12 @@ public class DefaultAnimationManager implements AnimationManager { private final Map assets = new HashMap<>(); private final Map frames = new HashMap<>(); private final ProjectConfiguration configuration; + private Mesh mesh; + @Override + public void init() { + mesh = meshManager.createQuad(1, 1, 0.5f, 0.5f); + } @Override public void registerAsset(AnimationAsset asset) { @@ -51,7 +56,6 @@ public class DefaultAnimationManager implements AnimationManager { var source = configuration.projectFile("animations", asset.getSource()); var texture = textureManager.loadTexture(source, asset.getRows(), asset.getColumns()); var material = Material.textured(texture); - var mesh = buildMesh(material, asset.getRows(), asset.getColumns()); return new DefaultAnimation(mesh, material, animationFrames); } @@ -69,11 +73,4 @@ public class DefaultAnimationManager implements AnimationManager { return frames; } - - private Mesh buildMesh(Material material, int rows, int columns) { - var texture = material.getTexture(); - var spriteWidth = texture.getWidth() / columns; - var spriteHeight = texture.getHeight() / rows; - return meshManager.createQuad(spriteWidth, spriteHeight, spriteWidth / 2f, spriteHeight / 2f); - } } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/model/DefaultAnimation.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/model/DefaultAnimation.java index 474316b2..851f1953 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/model/DefaultAnimation.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/model/DefaultAnimation.java @@ -12,6 +12,7 @@ import com.bartlomiejpluta.base.util.path.PathExecutor; import lombok.Getter; import lombok.NonNull; import lombok.Setter; +import org.joml.Vector2f; import org.joml.Vector2fc; import static com.bartlomiejpluta.base.util.path.PathProgress.DONE; @@ -20,6 +21,8 @@ import static com.bartlomiejpluta.base.util.path.PathProgress.SEGMENT_FAILED; public class DefaultAnimation extends MovableSprite implements Animation { private final Vector2fc[] frames; private final int lastFrameIndex; + private final Vector2f animationScale = new Vector2f(1, 1); + private final Vector2fc animationSpriteSize; private int animationSpeed = 100; private int iteration = 0; @@ -42,6 +45,9 @@ public class DefaultAnimation extends MovableSprite implements Animation { super(mesh, material); this.frames = frames; this.lastFrameIndex = frames.length - 1; + + this.animationSpriteSize = material.getTexture().getSpriteSize(); + super.setScale(animationSpriteSize.x() * animationScale.x, animationSpriteSize.y() * animationScale.y); } @Override @@ -125,4 +131,40 @@ public class DefaultAnimation extends MovableSprite implements Animation { return iteration >= repeat; } + + @Override + public void setScaleX(float scaleX) { + this.animationScale.x = scaleX; + super.setScaleX(animationSpriteSize.x() * scaleX); + } + + @Override + public void setScaleY(float scaleY) { + this.animationScale.y = scaleY; + super.setScaleY(animationSpriteSize.y() * scaleY); + } + + @Override + public void setScale(float scale) { + this.animationScale.x = scale; + this.animationScale.y = scale; + super.setScale(animationSpriteSize.x() * scale, animationSpriteSize.y() * scale); + } + + @Override + public void setScale(float scaleX, float scaleY) { + this.animationScale.x = scaleX; + this.animationScale.y = scaleY; + super.setScale(animationSpriteSize.x() * scaleX, animationSpriteSize.y() * scaleY); + } + + @Override + public float getScaleX() { + return animationScale.x; + } + + @Override + public float getScaleY() { + return animationScale.y; + } }