diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2014-10-15 15:07:07 +0200 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2014-10-15 15:07:07 +0200 |
commit | 68de02c5a844c260be3223541f19ba3c2e5c46d3 (patch) | |
tree | b8a2e278a10ec78ca52458e40ef52b4b0913c79a | |
parent | ba559a8a0d13483e0b5a3f0751ca58fe78dfc356 (diff) | |
download | RustAndDust-68de02c5a844c260be3223541f19ba3c2e5c46d3.zip RustAndDust-68de02c5a844c260be3223541f19ba3c2e5c46d3.tar.gz |
add attack animation
-rw-r--r-- | core/src/ch/asynk/tankontank/game/Factory.java | 4 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/game/Map.java | 36 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/game/MapA.java | 5 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/game/MapB.java | 5 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/game/states/StateAttack.java | 6 |
5 files changed, 42 insertions, 14 deletions
diff --git a/core/src/ch/asynk/tankontank/game/Factory.java b/core/src/ch/asynk/tankontank/game/Factory.java index 5c70563..66c19c9 100644 --- a/core/src/ch/asynk/tankontank/game/Factory.java +++ b/core/src/ch/asynk/tankontank/game/Factory.java @@ -120,10 +120,10 @@ public class Factory implements Board.TileBuilder, Disposable Map m = null; switch(t) { case MAP_A: - m = new MapA(ctrl, this, config(), manager.get("data/map_a.png", Texture.class)); + m = new MapA(ctrl, this, config(), manager, "data/map_a.png"); break; case MAP_B: - m = new MapB(ctrl, this, config(), manager.get("data/map_b.png", Texture.class)); + m = new MapB(ctrl, this, config(), manager, "data/map_b.png"); break; } diff --git a/core/src/ch/asynk/tankontank/game/Map.java b/core/src/ch/asynk/tankontank/game/Map.java index e36b143..4df7077 100644 --- a/core/src/ch/asynk/tankontank/game/Map.java +++ b/core/src/ch/asynk/tankontank/game/Map.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; +import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.math.Vector2; @@ -14,6 +15,8 @@ import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import ch.asynk.tankontank.engine.Pawn; import ch.asynk.tankontank.engine.Board; import ch.asynk.tankontank.engine.Orientation; +import ch.asynk.tankontank.engine.gfx.animations.AnimationSequence; +import ch.asynk.tankontank.engine.gfx.animations.SpriteAnimation; import ch.asynk.tankontank.engine.gfx.animations.RunnableAnimation; public abstract class Map extends Board @@ -30,12 +33,17 @@ public abstract class Map extends Board private final ArrayList<Pawn> activablePawns = new ArrayList<Pawn>(7); private final ArrayList<Pawn> activatedPawns = new ArrayList<Pawn>(7); + private final SpriteAnimation explosion; + private final SpriteAnimation explosions; + protected abstract void setup(); - public Map(Ctrl ctrl, Factory factory, Board.Config cfg, Texture texture) + public Map(Ctrl ctrl, Factory factory, Board.Config cfg, AssetManager manager, String textureName) { - super(factory, cfg, texture); + super(factory, cfg, manager.get(textureName, Texture.class)); this.ctrl = ctrl; + this.explosion = new SpriteAnimation(manager.get("data/explosion.png", Texture.class), 10, 4, 40); + this.explosions = new SpriteAnimation(manager.get("data/explosions.png", Texture.class), 16, 8, 15); setup(); } @@ -275,13 +283,13 @@ public abstract class Map extends Board clearPointVector(possibleTargets); } - public boolean attackPawn(Pawn pawn, Pawn target, GridPoint2 from, GridPoint2 to, int dice) + public boolean attackPawn(Pawn pawn, final Pawn target, GridPoint2 from, GridPoint2 to, int dice) { Hex hex = getHex(to.x, to.y); int activatedUnits = activatedPawns.size(); - boolean success; + final boolean success; if (dice == 2) { success = false; } else if (dice == 12) { @@ -304,6 +312,26 @@ public abstract class Map extends Board activablePawns.clear(); activatedPawns.clear(); + AnimationSequence seq = AnimationSequence.get(2); + if (success) { + explosions.init(1, target.getCenter().x, target.getCenter().y); + seq.addAnimation(explosions); + } else { + explosion.init(1, target.getCenter().x, target.getCenter().y); + seq.addAnimation(explosion); + } + seq.addAnimation(RunnableAnimation.get(pawn, new Runnable() { + @Override + public void run() { + if (success) { + removePawn(target); + } + ctrl.animationDone(); + } + })); + + addAnimation(seq); + return success; } diff --git a/core/src/ch/asynk/tankontank/game/MapA.java b/core/src/ch/asynk/tankontank/game/MapA.java index ea3c964..3600079 100644 --- a/core/src/ch/asynk/tankontank/game/MapA.java +++ b/core/src/ch/asynk/tankontank/game/MapA.java @@ -1,5 +1,6 @@ package ch.asynk.tankontank.game; +import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; @@ -8,9 +9,9 @@ import ch.asynk.tankontank.engine.Orientation; public class MapA extends Map { - public MapA(Ctrl ctrl, Factory factory, Board.Config cfg, Texture texture) + public MapA(Ctrl ctrl, Factory factory, Board.Config cfg, AssetManager manager, String textureName) { - super(ctrl, factory, cfg, texture); + super(ctrl, factory, cfg, manager, textureName); } @Override diff --git a/core/src/ch/asynk/tankontank/game/MapB.java b/core/src/ch/asynk/tankontank/game/MapB.java index 34f8fe9..073f653 100644 --- a/core/src/ch/asynk/tankontank/game/MapB.java +++ b/core/src/ch/asynk/tankontank/game/MapB.java @@ -1,5 +1,6 @@ package ch.asynk.tankontank.game; +import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; @@ -8,9 +9,9 @@ import ch.asynk.tankontank.engine.Orientation; public class MapB extends Map { - public MapB(Ctrl ctrl, Factory factory, Board.Config cfg, Texture texture) + public MapB(Ctrl ctrl, Factory factory, Board.Config cfg, AssetManager manager, String textureName) { - super(ctrl, factory, cfg, texture); + super(ctrl, factory, cfg, manager, textureName); } @Override diff --git a/core/src/ch/asynk/tankontank/game/states/StateAttack.java b/core/src/ch/asynk/tankontank/game/states/StateAttack.java index 9005def..d68afe0 100644 --- a/core/src/ch/asynk/tankontank/game/states/StateAttack.java +++ b/core/src/ch/asynk/tankontank/game/states/StateAttack.java @@ -82,11 +82,9 @@ public class StateAttack extends StateCommon int d1 = ctrl.currentPlayer().d6(); int d2 = ctrl.currentPlayer().d6(); System.err.print(" attack (" + from.x + ";" + from.y + ") -> (" + to.x + ";" + to.y + ") : 2D6 -> (" + d1 + " + " + d2 + ")"); - if (map.attackPawn(selectedPawn, activePawn, from, to, d1 + d2)) { - map.removePawnFrom(activePawn, to); + if (map.attackPawn(selectedPawn, activePawn, from, to, d1 + d2)) ctrl.currentPlayer().casualty(activePawn); - // TODO free move for infantry - } + ctrl.setState(StateType.ANIMATION); super.done(); } |