summaryrefslogtreecommitdiffstats
path: root/core/src/ch/asynk/tankontank
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2014-10-30 14:10:44 +0100
committerJérémy Zurcher <jeremy@asynk.ch>2014-10-30 14:10:44 +0100
commitccda60ec75ad2808ef4b508ad86be17d8af22f0e (patch)
tree93d7495b039ffbb965218f8d86aa95c4cb6f8313 /core/src/ch/asynk/tankontank
parent0b6b0a4a3bcdc0741a06b724e0086160c3d0beae (diff)
downloadRustAndDust-ccda60ec75ad2808ef4b508ad86be17d8af22f0e.zip
RustAndDust-ccda60ec75ad2808ef4b508ad86be17d8af22f0e.tar.gz
Board,SearchBoard: optimize collectPossibleMoves(Pawn, Board.TileCollection)
Diffstat (limited to 'core/src/ch/asynk/tankontank')
-rw-r--r--core/src/ch/asynk/tankontank/engine/Board.java4
-rw-r--r--core/src/ch/asynk/tankontank/engine/SearchBoard.java18
2 files changed, 9 insertions, 13 deletions
diff --git a/core/src/ch/asynk/tankontank/engine/Board.java b/core/src/ch/asynk/tankontank/engine/Board.java
index 42b8f23..42fae2e 100644
--- a/core/src/ch/asynk/tankontank/engine/Board.java
+++ b/core/src/ch/asynk/tankontank/engine/Board.java
@@ -257,9 +257,7 @@ public abstract class Board implements Disposable
protected int collectPossibleMoves(Pawn pawn, TileCollection moves)
{
- Tile from = pawn.getTile();
- Set<SearchBoard.Node> nodes = searchBoard.possibleMovesFrom(pawn, from.getCol(), from.getRow());
- return moves.fromNodes(nodes);
+ return searchBoard.possibleMovesFrom(pawn, moves);
}
protected int collectPossibleTargets(Pawn pawn, PawnCollection targets)
diff --git a/core/src/ch/asynk/tankontank/engine/SearchBoard.java b/core/src/ch/asynk/tankontank/engine/SearchBoard.java
index a921d2a..e32f586 100644
--- a/core/src/ch/asynk/tankontank/engine/SearchBoard.java
+++ b/core/src/ch/asynk/tankontank/engine/SearchBoard.java
@@ -42,7 +42,6 @@ public class SearchBoard
private LinkedList<Node> queue;
private ArrayDeque<Node> roadMarch;
- private Set<Node> moves;
private List<Node> targets;
private List<Node> los;
@@ -76,7 +75,6 @@ public class SearchBoard
this.stack = new ArrayDeque<Node>(20);
this.roadMarch = new ArrayDeque<Node>(5);
- this.moves = new LinkedHashSet<Node>(40);
this.targets = new ArrayList<Node>(10);
this.los = new ArrayList<Node>(10);
@@ -152,10 +150,10 @@ public class SearchBoard
a[5] = getNode((src.col - 1), (src.row - 1));
}
- public Set<Node> possibleMovesFrom(Pawn pawn, int col, int row)
+ public int possibleMovesFrom(Pawn pawn, Board.TileCollection moves)
{
- searchCount += 1;
moves.clear();
+ searchCount += 1;
Node adjacents[] = new Node[6];
@@ -166,7 +164,7 @@ public class SearchBoard
from.roadMarch = true;
if (from.remaining <= 0)
- return moves;
+ return moves.size();
int roadMarchBonus = pawn.getRoadMarchBonus();
boolean first = true;
@@ -203,7 +201,7 @@ public class SearchBoard
dst.parent = src;
dst.roadMarch = roadMarch;
stack.push(dst);
- moves.add(dst);
+ moves.add(getTile(dst));
}
} else {
dst.search = searchCount;
@@ -212,7 +210,7 @@ public class SearchBoard
dst.remaining = r;
dst.roadMarch = roadMarch;
stack.push(dst);
- moves.add(dst);
+ moves.add(getTile(dst));
} else {
dst.parent = null;
dst.remaining = -1;
@@ -245,7 +243,7 @@ public class SearchBoard
dst.parent = src;
dst.roadMarch = true;
roadMarch.push(dst);
- moves.add(dst);
+ moves.add(getTile(dst));
}
} else {
dst.search = searchCount;
@@ -254,7 +252,7 @@ public class SearchBoard
dst.remaining = r;
dst.roadMarch = true;
roadMarch.push(dst);
- moves.add(dst);
+ moves.add(getTile(dst));
} else {
dst.parent = null;
dst.remaining = -1;
@@ -264,7 +262,7 @@ public class SearchBoard
}
}
- return moves;
+ return moves.size();
}
private void adjacentTargets(Node src, int angle, Node a[])