diff options
6 files changed, 34 insertions, 53 deletions
diff --git a/core/src/ch/asynk/tankontank/engine/Board.java b/core/src/ch/asynk/tankontank/engine/Board.java index e765ab0..1b621c0 100644 --- a/core/src/ch/asynk/tankontank/engine/Board.java +++ b/core/src/ch/asynk/tankontank/engine/Board.java @@ -344,38 +344,27 @@ public abstract class Board implements Disposable return assists.size(); } - public Orientation findBestEntry(Pawn pawn, Tile to, Orientation from) + public Orientation findBestEntry(Pawn pawn, Tile to, int allowedMoves) { - // FIXME board corners Orientation entry = Orientation.KEEP; int cost = Integer.MAX_VALUE; boolean road = false; - Orientation o = from.opposite().left(); - boolean r = to.road(o); - int c = to.costFrom(pawn, o); - if ((c < cost) || (r && (c == cost))) { - entry = o; - cost = c; - road = r; - } - - o = from.opposite(); - r = to.road(o); - c = to.costFrom(pawn, o); - if ((c < cost) || (r && (c == cost))) { - entry = o; - cost = c; - road = r; - } - - o = from.opposite().right(); - r = to.road(o); - c = to.costFrom(pawn, o); - if ((c < cost) || (r && (c == cost))) { - entry = o; - cost = c; - road = r; + setAdjacentTiles(to, neighbours); + for (int i = 0; i < 6; i++) { + Tile t = neighbours[i]; + if (t.isOffMap()) { + Orientation o = Orientation.fromAdj(t.col, t.row, to.col, to.row); + if (o.isInSides(allowedMoves)) { + boolean r = to.road(o); + int c = to.costFrom(pawn, o); + if ((c < cost) || (r && (c == cost))) { + entry = o; + cost = c; + road = r; + } + } + } } return entry; diff --git a/core/src/ch/asynk/tankontank/game/Battle.java b/core/src/ch/asynk/tankontank/game/Battle.java index 4970df6..507a13a 100644 --- a/core/src/ch/asynk/tankontank/game/Battle.java +++ b/core/src/ch/asynk/tankontank/game/Battle.java @@ -1,7 +1,6 @@ package ch.asynk.tankontank.game; -import ch.asynk.tankontank.engine.TileSet; -import ch.asynk.tankontank.engine.Orientation; +import ch.asynk.tankontank.engine.EntryPoint; import ch.asynk.tankontank.game.Unit; import ch.asynk.tankontank.game.Player; import ch.asynk.tankontank.game.hud.Position; @@ -22,9 +21,7 @@ public interface Battle public Player checkVictory(Ctrl ctrl); - public TileSet getEntryPoint(Unit unit); - - public Orientation getEntryOrientation(Player player); + public EntryPoint getEntryPoint(Unit unit); public Position getHudPosition(Player player); } diff --git a/core/src/ch/asynk/tankontank/game/Map.java b/core/src/ch/asynk/tankontank/game/Map.java index 8e5f893..526b1e4 100644 --- a/core/src/ch/asynk/tankontank/game/Map.java +++ b/core/src/ch/asynk/tankontank/game/Map.java @@ -167,11 +167,14 @@ public abstract class Map extends Board // ACTIONS - public void enterBoard(Pawn pawn, Hex to, Orientation o) + public boolean enterBoard(Pawn pawn, Hex to, int allowedMoves) { - Orientation entry = findBestEntry(pawn, to, o); + Orientation entry = findBestEntry(pawn, to, allowedMoves); + if (entry == Orientation.KEEP) + return false; pawn.enterBoard(to, entry); - setPawnOnto(pawn, to, o); + setPawnOnto(pawn, to, entry.opposite()); + return true; } public void leaveBoard(Pawn pawn) diff --git a/core/src/ch/asynk/tankontank/game/battles/BattleCommon.java b/core/src/ch/asynk/tankontank/game/battles/BattleCommon.java index 8d2c5fc..c39b2b4 100644 --- a/core/src/ch/asynk/tankontank/game/battles/BattleCommon.java +++ b/core/src/ch/asynk/tankontank/game/battles/BattleCommon.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.ArrayList; import ch.asynk.tankontank.engine.TileSet; +import ch.asynk.tankontank.engine.EntryPoint; import ch.asynk.tankontank.game.Army; import ch.asynk.tankontank.game.Battle; import ch.asynk.tankontank.game.Player; @@ -20,8 +21,8 @@ public abstract class BattleCommon implements Battle protected Army firstArmy; protected Army secondArmy; protected Factory factory; - protected ArrayList<TileSet> entryPoints = new ArrayList<TileSet>(); - protected HashMap<Unit, TileSet> pawnEntry = new HashMap<Unit, TileSet>(); + protected ArrayList<EntryPoint> entryPoints = new ArrayList<EntryPoint>(); + protected HashMap<Unit, EntryPoint> pawnEntry = new HashMap<Unit, EntryPoint>(); protected TileSet objectives; public BattleCommon(Factory factory) @@ -50,19 +51,19 @@ public abstract class BattleCommon implements Battle } } - public void addEntryPoint(TileSet tiles) + public void addEntryPoint(EntryPoint entry) { - entryPoints.add(tiles); + entryPoints.add(entry); } - public void addReinforcement(Player player, TileSet entryPoint, UnitId unitId) + public void addReinforcement(Player player, EntryPoint entryPoint, UnitId unitId) { Unit unit = factory.getUnit(unitId); player.addReinforcement(unit); pawnEntry.put(unit, entryPoint); } - public TileSet getEntryPoint(Unit unit) + public EntryPoint getEntryPoint(Unit unit) { return pawnEntry.get(unit); } diff --git a/core/src/ch/asynk/tankontank/game/battles/BattleHeadToHead.java b/core/src/ch/asynk/tankontank/game/battles/BattleHeadToHead.java index ab3e5fb..ae35df2 100644 --- a/core/src/ch/asynk/tankontank/game/battles/BattleHeadToHead.java +++ b/core/src/ch/asynk/tankontank/game/battles/BattleHeadToHead.java @@ -79,14 +79,6 @@ public class BattleHeadToHead extends BattleCommon } @Override - public Orientation getEntryOrientation(Player player) - { - if (player.isEnemy(Army.GE)) - return Orientation.SOUTH; - return Orientation.NORTH; - } - - @Override public void setup(Map map, Player a, Player b) { Player gePlayer; diff --git a/core/src/ch/asynk/tankontank/game/states/StateReinforcement.java b/core/src/ch/asynk/tankontank/game/states/StateReinforcement.java index a66973e..c8cb901 100644 --- a/core/src/ch/asynk/tankontank/game/states/StateReinforcement.java +++ b/core/src/ch/asynk/tankontank/game/states/StateReinforcement.java @@ -2,15 +2,14 @@ package ch.asynk.tankontank.game.states; import com.badlogic.gdx.math.Vector3; -import ch.asynk.tankontank.engine.TileSet; -import ch.asynk.tankontank.engine.Orientation; +import ch.asynk.tankontank.engine.EntryPoint; import ch.asynk.tankontank.game.Hex; import ch.asynk.tankontank.game.Unit; import ch.asynk.tankontank.game.hud.ActionButtons.Buttons; public class StateReinforcement extends StateCommon { - private TileSet entryPoint; + private EntryPoint entryPoint; @Override public void enter(boolean fromSelect) @@ -75,7 +74,7 @@ public class StateReinforcement extends StateCommon map.selectHex(selectedHex); entryPoint.enable(Hex.AREA, false); ctrl.player.unitEntry(unit); - map.enterBoard(unit, upHex, ctrl.battle.getEntryOrientation(ctrl.player)); + map.enterBoard(unit, upHex, entryPoint.allowedMoves); if (unit.getMovementPoints() > 0) ctrl.setState(StateType.MOVE, true); else |