diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2014-09-21 10:04:46 +0200 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2014-09-21 10:04:46 +0200 |
commit | 8d43e91dcf005cf076fb3cd571f6125df5837c8d (patch) | |
tree | 2dcf066b4cd50acd25140f865be4b07f375e484a /core/src/ch/asynk/tankontank/engine/Pawn.java | |
parent | e9f641b93dd669cc609c23b105acfaf6369a6e04 (diff) | |
download | RustAndDust-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.java | 72 |
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; + } } |