* @return The nodes.
*/
private static List<Node> Successors(final Node t) {
final LinkedList<Node> tiles = new LinkedList<Node>();
final int x = t.x, y = t.y;
final RSTile here = t.toRSTile();
if (!Flag(here, RSTile.Flag.W_S) &&
!Flag(here.getX(), here.getY() - 1, here.getZ(), RSTile.Flag.BLOCKED | RSTile.Flag.WATER)) {
tiles.add(new Node(x, y - 1, here.getZ()));
}
if (!Flag(here, RSTile.Flag.W_W) &&
!Flag(here.getX() - 1, here.getY(), here.getZ(), RSTile.Flag.BLOCKED | RSTile.Flag.WATER)) {
tiles.add(new Node(x - 1, y, here.getZ()));
}
if (!Flag(here, RSTile.Flag.W_N) &&
!Flag(here.getX(), here.getY() + 1, here.getZ(), RSTile.Flag.BLOCKED | RSTile.Flag.WATER)) {
tiles.add(new Node(x, y + 1, here.getZ()));
}
if (!Flag(here, RSTile.Flag.W_E) &&
!Flag(here.getX() + 1, here.getY(), here.getZ(), RSTile.Flag.BLOCKED | RSTile.Flag.WATER)) {
tiles.add(new Node(x + 1, y, here.getZ()));
}
if (!Flag(here, RSTile.Flag.W_SW | RSTile.Flag.W_S | RSTile.Flag.W_W) &&
!Flag(here.getX() - 1, here.getY() - 1, here.getZ(), RSTile.Flag.BLOCKED | RSTile.Flag.WATER) &&
!Flag(here.getX(), here.getY() - 1, here.getZ(), RSTile.Flag.BLOCKED | RSTile.Flag.WATER | RSTile.Flag.W_W) &&
!Flag(here.getX() - 1, here.getY(), here.getZ(), RSTile.Flag.BLOCKED | RSTile.Flag.WATER | RSTile.Flag.W_S)) {
tiles.add(new Node(x - 1, y - 1, here.getZ()));
}
if (!Flag(here, RSTile.Flag.W_NW | RSTile.Flag.W_N | RSTile.Flag.W_W) &&
!Flag(here.getX() - 1, here.getY() + 1, here.getZ(), RSTile.Flag.BLOCKED | RSTile.Flag.WATER) &&
!Flag(here.getX(), here.getY() + 1, here.getZ(), RSTile.Flag.BLOCKED | RSTile.Flag.WATER | RSTile.Flag.W_W) &&
!Flag(here.getX() - 1, here.getY(), here.getZ(), RSTile.Flag.BLOCKED | RSTile.Flag.WATER | RSTile.Flag.W_N)) {
tiles.add(new Node(x - 1, y + 1, here.getZ()));
}
if (!Flag(here, RSTile.Flag.W_SE | RSTile.Flag.W_S | RSTile.Flag.W_E) &&
!Flag(here.getX() + 1, here.getY() - 1, here.getZ(), RSTile.Flag.BLOCKED | RSTile.Flag.WATER) &&
!Flag(here.getX(), here.getY() - 1, here.getZ(), RSTile.Flag.BLOCKED | RSTile.Flag.WATER | RSTile.Flag.W_E) &&
!Flag(here.getX() + 1, here.getY(), here.getZ(), RSTile.Flag.BLOCKED | RSTile.Flag.WATER | RSTile.Flag.W_S)) {
tiles.add(new Node(x + 1, y - 1, here.getZ()));
}
if (!Flag(here, RSTile.Flag.W_NE | RSTile.Flag.W_N | RSTile.Flag.W_E) &&
!Flag(here.getX() + 1, here.getY() + 1, here.getZ(), RSTile.Flag.BLOCKED | RSTile.Flag.WATER) &&
!Flag(here.getX(), here.getY() + 1, here.getZ(), RSTile.Flag.BLOCKED | RSTile.Flag.WATER | RSTile.Flag.W_E) &&
!Flag(here.getX() + 1, here.getY(), here.getZ(), RSTile.Flag.BLOCKED | RSTile.Flag.WATER | RSTile.Flag.W_N)) {
tiles.add(new Node(x + 1, y + 1, here.getZ()));
}
return tiles;
}