bevy_northstar
A 2d/3d hierarchical pathfinding crate for Bevy.
bevy_northstar works by dividing the map into chunks and then calculates nodes based on the entrances between chunks. The nodes are used in pathfinding to get a higher level path that is significantly faster to calculate over long distances. Once the high level path is determined between a start and goal position it's refined to get a more accurate path.
The crate provides:
Features
- Pathfinding Options - Choose between optimized HPA* algorithms or traditional A* per call. You can retrieve paths directly even when using the plugin systems.
- Supports 2D and 3D Tilemaps – Works with both 2D and 3D tilemaps.
- Neighbor Filtering and Caching - Precomputed, optionally filtered neighbors are cached to avoid redundant processing.
- Memory Efficient - Neighbors are stored in compact bitmasks, reduced memory on large maps.
- Gizmo Debug View – Visualize the HPA* grid and entity paths using debug components.
- Dynamic Collision & Avoidance – Optional collision avoidance system. Just the add the
Blockingcomponent to flag blockers. - Bevy Integration – Systems and components for pathfinding and collision avoidance. Pathfindng systems are able to stagger agents across multiple frames.
Demo
cargo run --example demo --features stats --release
Press P to switch between Refined HPA*, Coarse HPA*, and traditional A* Press C to disable/enable collision
Documentation
Feature Flags
This crate has the following Cargo features:
stats: Enables pathfinding benchmarks. Useful to get an idea of how much time it's using per frame.
Quick Start
Add required dependencies to your Cargo.toml file:
[]
= "0.16"
= "0.3"
The basic requirements to use the crate are to spawn an entity with a Grid component, adjust the grid cells, and then call Grid::build() so the neighbors, chunk entrances, and internal paths can be calculated.
To use the built-in pathfinding systems for the crate, insert the NorthstarPlugin specifying the Neighborhood to use.
The built-in neighborhoods are:
CardinalNeighborhood4 directions allowing no diagonal movement.CardinalNeighborhood3d6 directions, including up and down, allowing no diagonal movement.OrdinalNeighborhood8 directions allowing for diagonal movement.OrdinalNeighborhood3d26 directions which includes the base ordinal movements and their up/down directions.
use *;
use *;
Bevy Compatibility
| bevy | bevy_northstar |
|---|---|
| 0.16 | 0.2/0.3 |
Roadmap / TODO
- UP NEXT: Modify & Rebuild Grid Chunks Dynamically – Support updating the grid after it’s been built by only rebuilding the sections required.
- Pseudo-3D Tilemap Support – Add support for features like stairs and ramps without full 3D calculations.
- Parallelized Graph Building – Speed up grid/graph construction using parallelism.
- Add Support For Multiple HPA Levels – Implement multiple hierarchical levels for improved efficiency.
- Optimize 3D Performance – 3d grids appear to take a performance hit higher than expected currently.
Assets credits
- kenny-minimap-pack: an 8x8 tileset from Kenney, licensed under CC0 1.0
Thanks
Thanks to the following crates and blogs that have been used as references