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 | 
