From 26ef6e40f1121e3ecf1338a8d47c510048158c08 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= <jeremy@asynk.ch>
Date: Thu, 30 Oct 2014 14:18:54 +0100
Subject: Board,SearchBoard: optimize collectPossibleTargets(Pawn,
 Iterator<Pawn>, PawnCollection)

---
 core/src/ch/asynk/tankontank/engine/Board.java       |  5 +----
 core/src/ch/asynk/tankontank/engine/SearchBoard.java | 11 +++++++----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/core/src/ch/asynk/tankontank/engine/Board.java b/core/src/ch/asynk/tankontank/engine/Board.java
index 7083f4a..6d1a2ab 100644
--- a/core/src/ch/asynk/tankontank/engine/Board.java
+++ b/core/src/ch/asynk/tankontank/engine/Board.java
@@ -267,13 +267,10 @@ public abstract class Board implements Disposable
 
     protected int collectPossibleTargets(Pawn pawn, Iterator<Pawn> units, PawnCollection targets)
     {
-        Tile from = pawn.getTile();
         targets.clear();
         while (units.hasNext()) {
             Pawn target = units.next();
-            if (!pawn.canAttack(target)) continue;
-            Tile to = target.getTile();
-            if (searchBoard.collectAttack(pawn, true, target, from.getCol(), from.getRow(), to.getCol(), to.getRow()))
+            if (pawn.canAttack(target) && searchBoard.collectAttacks(pawn, target, true))
                 targets.add(target);
         }
 
diff --git a/core/src/ch/asynk/tankontank/engine/SearchBoard.java b/core/src/ch/asynk/tankontank/engine/SearchBoard.java
index 44769df..5190829 100644
--- a/core/src/ch/asynk/tankontank/engine/SearchBoard.java
+++ b/core/src/ch/asynk/tankontank/engine/SearchBoard.java
@@ -362,18 +362,21 @@ public class SearchBoard
         return targets.size();
     }
 
-    public boolean collectAttack(Pawn pawn, boolean clearVisibility, Pawn target, int col0, int row0, int col1, int row1)
+    public boolean collectAttacks(Pawn pawn, Pawn target, boolean clearVisibility)
     {
+        Node from = getNode(pawn.getTile());
+        Node to = getNode(target.getTile());
+
         pawn.attack.isClear = false;
         pawn.attack.target = target;
-        pawn.attack.distance = distance(col0, row0, col1, row1);
+        pawn.attack.distance = distance(from.col, from.row, to.col, to.row);
 
         if (pawn.attack.distance > pawn.getAttackRangeFrom(pawn.getTile()))
             return false;
 
-        List<Node> los = lineOfSight(col0, row0, col1, row1, clearVisibility);
+        List<Node> los = lineOfSight(from.col, from.row, to.col, to.row, clearVisibility);
         Node last = los.get(los.size() -1);
-        if ((last.col != col1) || (last.row != row1))
+        if (last != to)
             return false;
 
         if (!validatePathAngle(pawn.getAngleOfAttack(), los))
-- 
cgit v1.1-2-g2b99