summaryrefslogtreecommitdiffstats
path: root/core/src/ch/asynk/tankontank/engine/Pawn.java
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2014-09-21 10:04:46 +0200
committerJérémy Zurcher <jeremy@asynk.ch>2014-09-21 10:04:46 +0200
commit8d43e91dcf005cf076fb3cd571f6125df5837c8d (patch)
tree2dcf066b4cd50acd25140f865be4b07f375e484a /core/src/ch/asynk/tankontank/engine/Pawn.java
parente9f641b93dd669cc609c23b105acfaf6369a6e04 (diff)
downloadRustAndDust-8d43e91dcf005cf076fb3cd571f6125df5837c8d.zip
RustAndDust-8d43e91dcf005cf076fb3cd571f6125df5837c8d.tar.gz
MapNode->Board TileOverlays->Tile PawnImage->Pawn
Diffstat (limited to 'core/src/ch/asynk/tankontank/engine/Pawn.java')
-rw-r--r--core/src/ch/asynk/tankontank/engine/Pawn.java72
1 files changed, 61 insertions, 11 deletions
diff --git a/core/src/ch/asynk/tankontank/engine/Pawn.java b/core/src/ch/asynk/tankontank/engine/Pawn.java
index 0198302..204bc97 100644
--- a/core/src/ch/asynk/tankontank/engine/Pawn.java
+++ b/core/src/ch/asynk/tankontank/engine/Pawn.java
@@ -1,21 +1,20 @@
package ch.asynk.tankontank.engine;
-import com.badlogic.gdx.math.Vector3;
-import com.badlogic.gdx.utils.Disposable;
-
-import ch.asynk.tankontank.engine.gfx.Drawable;
-import ch.asynk.tankontank.engine.gfx.animations.AnimationSequence;
+import java.util.ArrayDeque;
-public interface Pawn extends Drawable, Disposable
-{
- public Vector3 getLastPosition();
+import com.badlogic.gdx.utils.Disposable;
- public void moveDone();
+import com.badlogic.gdx.graphics.g2d.TextureRegion;
- public void pushMove(float x, float y, Pawn.Orientation o);
+import com.badlogic.gdx.math.Vector3;
- public AnimationSequence getResetMovesAnimation();
+import ch.asynk.tankontank.engine.gfx.Image;
+import ch.asynk.tankontank.engine.gfx.animations.MoveToAnimation;
+import ch.asynk.tankontank.engine.gfx.animations.RunnableAnimation;
+import ch.asynk.tankontank.engine.gfx.animations.AnimationSequence;
+public abstract class Pawn extends Image implements Disposable
+{
public enum Orientation
{
KEEP(0),
@@ -29,4 +28,55 @@ public interface Pawn extends Drawable, Disposable
public final int v;
Orientation(int v) { this.v = v; }
}
+
+ private static final float MOVE_TIME = 0.3f;
+
+ private ArrayDeque<Vector3> path = new ArrayDeque<Vector3>();
+
+ public Pawn(TextureRegion region)
+ {
+ super(region);
+ }
+
+ public Vector3 getLastPosition()
+ {
+ if ((path == null) || (path.size() == 0)) return null;
+ return path.getFirst();
+ }
+
+ public void moveDone()
+ {
+ Vector3 v = path.pop();
+ path.clear();
+ path.push(v);
+ }
+
+ public void pushMove(float x, float y, Pawn.Orientation o)
+ {
+ float r = ((o == Pawn.Orientation.KEEP) ? getRotation() : o.v);
+ setPosition(x, y, r);
+ Vector3 v = new Vector3(x, y, r);
+ if ((path.size() == 0) || (!v.equals(path.getFirst())))
+ path.push(new Vector3(x, y, r));
+ }
+
+ public AnimationSequence getResetMovesAnimation()
+ {
+ final Vector3 finalPos = path.getLast();
+
+ AnimationSequence seq = AnimationSequence.get(path.size() + 1);
+
+ while(path.size() != 0) {
+ seq.addAnimation(MoveToAnimation.get(this, path.pop(), MOVE_TIME));
+ }
+
+ seq.addAnimation(RunnableAnimation.get(this, new Runnable() {
+ @Override
+ public void run() {
+ path.push(finalPos);
+ }
+ }));
+
+ return seq;
+ }
}