mirror of
https://github.com/cyberarm/i-mic-rts.git
synced 2025-12-15 15:52:34 +00:00
Added support for diagonal paths
This commit is contained in:
@@ -57,7 +57,7 @@ class IMICRTS
|
|||||||
@players.find { |player| player.id == id }
|
@players.find { |player| player.id == id }
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_path(player:, entity:, goal:, travels_along: :ground, allow_diagonal: false, klass: IMICRTS::Pathfinder::BasePathfinder)
|
def find_path(player:, entity:, goal:, travels_along: :ground, allow_diagonal: true, klass: IMICRTS::Pathfinder::BasePathfinder)
|
||||||
if klass.cached_path(entity, goal, travels_along)
|
if klass.cached_path(entity, goal, travels_along)
|
||||||
puts "using a cached path!" if true#Setting.enabled?(:debug_mode)
|
puts "using a cached path!" if true#Setting.enabled?(:debug_mode)
|
||||||
return klass.cached_path(entity, goal, travels_along)
|
return klass.cached_path(entity, goal, travels_along)
|
||||||
|
|||||||
@@ -127,6 +127,22 @@ class IMICRTS
|
|||||||
|
|
||||||
# TODO: Add diagonal nodes, if requested
|
# TODO: Add diagonal nodes, if requested
|
||||||
if @allow_diagonal
|
if @allow_diagonal
|
||||||
|
# LEFT-UP
|
||||||
|
if node_above? && node_above_left?
|
||||||
|
add_node create_node(@current_node.tile.grid_position.x - 1, @current_node.tile.grid_position.y - 1, @current_node)
|
||||||
|
end
|
||||||
|
# LEFT-DOWN
|
||||||
|
if node_below? && node_below_left?
|
||||||
|
add_node create_node(@current_node.tile.grid_position.x - 1, @current_node.tile.grid_position.y + 1, @current_node)
|
||||||
|
end
|
||||||
|
# RIGHT-UP
|
||||||
|
if node_above? && node_above_right?
|
||||||
|
add_node create_node(@current_node.tile.grid_position.x + 1, @current_node.tile.grid_position.y - 1, @current_node)
|
||||||
|
end
|
||||||
|
# RIGHT-DOWN
|
||||||
|
if node_below? && node_below_right?
|
||||||
|
add_node create_node(@current_node.tile.grid_position.x + 1, @current_node.tile.grid_position.y + 1, @current_node)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@current_node = next_node
|
@current_node = next_node
|
||||||
@@ -184,6 +200,30 @@ class IMICRTS
|
|||||||
|
|
||||||
return fittest
|
return fittest
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def node_above?(node = @current_node)
|
||||||
|
node && @map.tiles.dig(node.tile.grid_position.x, node.tile.grid_position.y - 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
def node_below?(node = @current_node)
|
||||||
|
node && @map.tiles.dig(node.tile.grid_position.x, node.tile.grid_position.y + 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
def node_above_left?(node = @current_node)
|
||||||
|
node && @map.tiles.dig(node.tile.grid_position.x - 1, node.tile.grid_position.y - 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
def node_above_right?(node = @current_node)
|
||||||
|
node && @map.tiles.dig(node.tile.grid_position.x + 1, node.tile.grid_position.y - 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
def node_below_left?(node = @current_node)
|
||||||
|
node && @map.tiles.dig(node.tile.grid_position.x - 1, node.tile.grid_position.y + 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
def node_below_right?(node = @current_node)
|
||||||
|
node && @map.tiles.dig(node.tile.grid_position.x + 1, node.tile.grid_position.y + 1)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
Reference in New Issue
Block a user