diff options
Diffstat (limited to 'core/src/ch/asynk')
| -rw-r--r-- | core/src/ch/asynk/tankontank/engine/Board.java | 50 | ||||
| -rw-r--r-- | core/src/ch/asynk/tankontank/engine/SearchBoard.java | 4 | 
2 files changed, 54 insertions, 0 deletions
| diff --git a/core/src/ch/asynk/tankontank/engine/Board.java b/core/src/ch/asynk/tankontank/engine/Board.java index d754883..9b05b9f 100644 --- a/core/src/ch/asynk/tankontank/engine/Board.java +++ b/core/src/ch/asynk/tankontank/engine/Board.java @@ -18,6 +18,7 @@ import com.badlogic.gdx.utils.Pool;  import com.badlogic.gdx.math.Vector2;  import com.badlogic.gdx.math.Vector3;  import com.badlogic.gdx.math.GridPoint2; +import com.badlogic.gdx.math.GridPoint3;  import com.badlogic.gdx.math.Matrix4;  import ch.asynk.tankontank.engine.gfx.Image; @@ -134,6 +135,13 @@ public abstract class Board implements Disposable          }      }; +    private final Pool<GridPoint3> gridPoint3Pool = new Pool<GridPoint3>() { +        @Override +        protected GridPoint3 newObject() { +            return new GridPoint3(); +        } +    }; +      protected Config cfg;      private Tile[] tiles;      protected SearchBoard searchBoard; @@ -393,6 +401,48 @@ public abstract class Board implements Disposable          return nodesToSet(paths, points);      } +    private Orientation getOrientation(SearchBoard.Node from, SearchBoard.Node to) +    { +        int dx = to.col - from .col; +        int dy = to.row - from.row; + +        if (dy == 0) { +            if (dx > 0) return Orientation.NORTH; +            return Orientation.SOUTH; +        } +        if (dy > 0) { +            if (dx > 0) return Orientation.NORTH_WEST; +            return Orientation.SOUTH_WEST; +        } else { +            if (dx > 0) return Orientation.NORTH_EAST; +            return Orientation.SOUTH_EAST; +        } +    } + +    public int getFinalPath(Vector<GridPoint3> path) +    { +        List<Vector<SearchBoard.Node>> paths = searchBoard.possiblePaths(); + +        for (GridPoint3 v : path) +            gridPoint3Pool.free(v); +        path.clear(); + +        if (paths.size() != 1) +            return 0; + +        Vector<SearchBoard.Node> nodes = paths.get(0); +        SearchBoard.Node prev = nodes.get(nodes.size() - 1); +        for (int i = (nodes.size() - 2); i >= 0; i--) { +            SearchBoard.Node node = nodes.get(i); +            GridPoint3 point = gridPoint3Pool.obtain(); +            point.set(node.col, node.row, getOrientation(prev, node).r); +            path.add(point); +            prev = node; +        } + +        return path.size(); +    } +      public boolean hasUnits(GridPoint2 hex)      {          return getTile(hex.x, hex.y).hasUnits(); diff --git a/core/src/ch/asynk/tankontank/engine/SearchBoard.java b/core/src/ch/asynk/tankontank/engine/SearchBoard.java index 6b5ef26..0fd21e1 100644 --- a/core/src/ch/asynk/tankontank/engine/SearchBoard.java +++ b/core/src/ch/asynk/tankontank/engine/SearchBoard.java @@ -504,7 +504,11 @@ public class SearchBoard              possiblePathsFilters.remove(n);          else              possiblePathsFilters.add(n); +        return possiblePaths(); +    } +    public List<Vector<Node>> possiblePaths() +    {          int s = possiblePathsFilters.size();          List<Vector<Node>> paths = new LinkedList<Vector<Node>>(); | 
