From 73842a2d224623dde69c1a2a1aac6443d110c9ad Mon Sep 17 00:00:00 2001 From: Matrefeytontias Date: Thu, 6 Aug 2015 18:14:19 +0200 Subject: [PATCH 1/2] Discard diagonals that cross two walls with touching vertices When allowing diagonals, entities were able to cross through walls that have touching vertices. Moreover, the code allowed for entities to enter halfway into a wall. --- com/haxepunk/ai/path/NodeGraph.hx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/com/haxepunk/ai/path/NodeGraph.hx b/com/haxepunk/ai/path/NodeGraph.hx index 62d913d..cee13cf 100644 --- a/com/haxepunk/ai/path/NodeGraph.hx +++ b/com/haxepunk/ai/path/NodeGraph.hx @@ -108,10 +108,16 @@ class NodeGraph if (allowDiagonal) { - node.addNeighbor(getNode(x - 1, y - 1), DIAGONAL_COST); - node.addNeighbor(getNode(x + 1, y - 1), DIAGONAL_COST); - node.addNeighbor(getNode(x - 1, y + 1), DIAGONAL_COST); - node.addNeighbor(getNode(x + 1, y + 1), DIAGONAL_COST); + if(!grid.getTile(x, y - 1)) + { + if(!grid.getTile(x - 1, y)) node.addNeighbor(getNode(x - 1, y - 1), DIAGONAL_COST); + if(!grid.getTile(x + 1, y)) node.addNeighbor(getNode(x + 1, y - 1), DIAGONAL_COST); + } + if(!grid.getTile(x, y + 1)) + { + if(!grid.getTile(x - 1, y)) node.addNeighbor(getNode(x - 1, y + 1), DIAGONAL_COST); + if(!grid.getTile(x + 1, y)) node.addNeighbor(getNode(x + 1, y + 1), DIAGONAL_COST); + } } addNode(node); } From f80feeffe33b2f037d3bfeea86b70279f24096f5 Mon Sep 17 00:00:00 2001 From: Matrefeytontias Date: Thu, 6 Aug 2015 18:18:00 +0200 Subject: [PATCH 2/2] Fix formatting --- com/haxepunk/ai/path/NodeGraph.hx | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/com/haxepunk/ai/path/NodeGraph.hx b/com/haxepunk/ai/path/NodeGraph.hx index cee13cf..4253793 100644 --- a/com/haxepunk/ai/path/NodeGraph.hx +++ b/com/haxepunk/ai/path/NodeGraph.hx @@ -108,16 +108,16 @@ class NodeGraph if (allowDiagonal) { - if(!grid.getTile(x, y - 1)) - { - if(!grid.getTile(x - 1, y)) node.addNeighbor(getNode(x - 1, y - 1), DIAGONAL_COST); - if(!grid.getTile(x + 1, y)) node.addNeighbor(getNode(x + 1, y - 1), DIAGONAL_COST); - } - if(!grid.getTile(x, y + 1)) - { - if(!grid.getTile(x - 1, y)) node.addNeighbor(getNode(x - 1, y + 1), DIAGONAL_COST); - if(!grid.getTile(x + 1, y)) node.addNeighbor(getNode(x + 1, y + 1), DIAGONAL_COST); - } + if(!grid.getTile(x, y - 1)) + { + if(!grid.getTile(x - 1, y)) node.addNeighbor(getNode(x - 1, y - 1), DIAGONAL_COST); + if(!grid.getTile(x + 1, y)) node.addNeighbor(getNode(x + 1, y - 1), DIAGONAL_COST); + } + if(!grid.getTile(x, y + 1)) + { + if(!grid.getTile(x - 1, y)) node.addNeighbor(getNode(x - 1, y + 1), DIAGONAL_COST); + if(!grid.getTile(x + 1, y)) node.addNeighbor(getNode(x + 1, y + 1), DIAGONAL_COST); + } } addNode(node); }