Manual Pathfinding
You don't need to use the pathfinding systems in the NorthstarPlugin
in order to take advantage of this crate.
You can use both, or choose to not add the NorthstarPlugin
and call the pathfinding functions completely manually.
If you don't use NorthstarPlugin
you'll need to maintain your own BlockingMap
or HashMap<UVec3, Entity>
to pass to the pathfind
function to provide it a list of blocked positions.
All of the pathfinding calls can be done on the Grid
component.
#![allow(unused)] fn main() { fn manual_pathfind( mut commands: Commands, player: Single<(Entity, &AgentPos, &MoveAction), With<Player>>, grid: Single<&CardinalGrid>, // If using the plugin you can use the BlockingMap resource for an auto-updated blocking list. blocking: Res<BlockingMap>, ) { let grid = grid.into_inner(); let (player, grid_pos, move_action) = player.into_inner(); let path = grid.pathfind(grid_pos.0, move_action.0, blocking, false); // Setting use_partial to true will allow the pathfinding to return a partial path if a complete path isn't found. // If you're not using collision you can pass an empty hashmap for the blocking map. let path = grid.pathfind(grid_pos.0, move_action.0, HashMap::new(), true); // There are also Coarse and AStar methods let path = grid.pathfind_coarse(grid_pos.0, move_action.0, blocking, false); let path = grid.pathfind_astar(grid_pos.0, move_action.0, blocking, false); } }
The Grid
pathfinding methods return an Option<Path>
. None
will be returned if no viable path is found.