summaryrefslogtreecommitdiffstats
path: root/core/src/ch/asynk/tankontank/engine/gfx
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/ch/asynk/tankontank/engine/gfx')
-rw-r--r--core/src/ch/asynk/tankontank/engine/gfx/animations/SpriteAnimation.java89
1 files changed, 89 insertions, 0 deletions
diff --git a/core/src/ch/asynk/tankontank/engine/gfx/animations/SpriteAnimation.java b/core/src/ch/asynk/tankontank/engine/gfx/animations/SpriteAnimation.java
new file mode 100644
index 0000000..ee498b3
--- /dev/null
+++ b/core/src/ch/asynk/tankontank/engine/gfx/animations/SpriteAnimation.java
@@ -0,0 +1,89 @@
+package ch.asynk.tankontank.engine.gfx.animations;
+
+import java.util.Random;
+
+import com.badlogic.gdx.utils.Disposable;
+
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.g2d.Batch;
+import com.badlogic.gdx.graphics.g2d.TextureRegion;
+import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
+
+import ch.asynk.tankontank.engine.gfx.Drawable;
+import ch.asynk.tankontank.engine.gfx.Animation;
+
+public class SpriteAnimation implements Disposable, Animation
+{
+ private static Random random = new Random();
+ private Texture texture;
+ private TextureRegion[] frames;
+ private float duration;
+ private float frameDuration;
+ private float elapsed;
+ private float x0;
+ private float y0;
+ private float x1;
+ private float y1;
+ private int w;
+ private int h;
+ private int randFreq;
+
+ public SpriteAnimation(Texture texture, int cols, int rows, int randFreq)
+ {
+ this.texture = texture;
+ this.randFreq = randFreq;
+ this.w = (texture.getWidth() / cols);
+ this.h = (texture.getHeight() / rows);
+ TextureRegion[][] tmp = TextureRegion.split(texture, w, h);
+ this.frames = new TextureRegion[cols * rows];
+ int idx = 0;
+ for (int i = 0; i < rows; i++) {
+ for (int j = 0; j < cols; j++) {
+ this.frames[idx++] = tmp[i][j];
+ }
+ }
+ }
+
+ @Override
+ public void dispose()
+ {
+ this.texture.dispose();
+ }
+
+ public void init(float duration, float x, float y)
+ {
+ this.duration = duration;
+ this.frameDuration = (duration / (float) frames.length);
+ this.x0 = x - (w/ 2);
+ this.y0 = y - (h / 2);
+ this.elapsed = 0f;
+ randPos();
+ }
+
+ private void randPos()
+ {
+ this.x1 = this.x0 + (random.nextInt(w / 1) - (w / 2));
+ this.y1 = this.y0 + (random.nextInt(h / 1) - (h / 2));
+ }
+
+ @Override
+ public boolean animate(float delta)
+ {
+ elapsed += delta;
+ return (elapsed >= duration);
+ }
+
+ @Override
+ public void draw(Batch batch)
+ {
+ int n = (((int)(elapsed / frameDuration)) % frames.length);
+ if ((n > 0) && (n % randFreq) == 0)
+ randPos();
+ batch.draw(frames[n], x1, y1, w, h);
+ }
+
+ @Override
+ public void drawDebug(ShapeRenderer debugShapes)
+ {
+ }
+}