mirror of
https://github.com/cyberarm/i-mic-rts.git
synced 2025-12-13 06:52:33 +00:00
Added support for diagonal paths
This commit is contained in:
@@ -57,7 +57,7 @@ class IMICRTS
|
||||
@players.find { |player| player.id == id }
|
||||
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)
|
||||
puts "using a cached path!" if true#Setting.enabled?(:debug_mode)
|
||||
return klass.cached_path(entity, goal, travels_along)
|
||||
|
||||
@@ -127,6 +127,22 @@ class IMICRTS
|
||||
|
||||
# TODO: Add diagonal nodes, if requested
|
||||
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
|
||||
|
||||
@current_node = next_node
|
||||
@@ -184,6 +200,30 @@ class IMICRTS
|
||||
|
||||
return fittest
|
||||
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
|
||||
Reference in New Issue
Block a user