#navigation #system #path #nav-grid #nav-islands #nav-net #nav-free-grid

navmesh

NavMesh, NavNet, NavGrid, NavFreeGrid and NavIslands navigation system

10 releases (5 breaking)

0.12.1 Nov 30, 2021
0.11.0 Nov 28, 2021
0.8.3 May 20, 2021
0.8.2 Feb 17, 2020
0.7.0 Nov 23, 2019

#1427 in Game dev

Download history 13/week @ 2023-12-18 4/week @ 2023-12-25 18/week @ 2024-01-01 6/week @ 2024-01-08 8/week @ 2024-01-15 3/week @ 2024-01-22 20/week @ 2024-01-29 4/week @ 2024-02-05 9/week @ 2024-02-12 31/week @ 2024-02-19 38/week @ 2024-02-26 28/week @ 2024-03-04 57/week @ 2024-03-11 35/week @ 2024-03-18 38/week @ 2024-03-25 230/week @ 2024-04-01

367 downloads per month
Used in 5 crates (2 directly)

MIT/Apache

110KB
3K SLoC

NavMesh travis-ci status crates-io version

Nav-Mesh path finder for Rust

Installation

Cargo.toml

[dependencies]
navmesh = "0.8"

Example

use navmesh::*;

let vertices = vec![
    (0.0, 0.0, 0.0).into(), // 0
    (1.0, 0.0, 0.0).into(), // 1
    (2.0, 0.0, 1.0).into(), // 2
    (0.0, 1.0, 0.0).into(), // 3
    (1.0, 1.0, 0.0).into(), // 4
    (2.0, 1.0, 1.0).into(), // 5
];
let triangles = vec![
    (0, 1, 4).into(), // 0
    (4, 3, 0).into(), // 1
    (1, 2, 5).into(), // 2
    (5, 4, 1).into(), // 3
];

let mesh = NavMesh::new(vertices, triangles).unwrap();
let path = mesh
    .find_path(
        (0.0, 1.0, 0.0).into(),
        (1.5, 0.25, 0.5).into(),
        NavQuery::Accuracy,
        NavPathMode::MidPoints,
    )
    .unwrap();
assert_eq!(
    path.into_iter()
        .map(|v| (
            (v.x * 10.0) as i32,
            (v.y * 10.0) as i32,
            (v.z * 10.0) as i32,
        ))
        .collect::<Vec<_>>(),
    vec![(0, 10, 0), (10, 5, 0), (15, 2, 5),]
);

Dependencies

~8.5MB
~163K SLoC