#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

#2046 in Game dev

Download history 6/week @ 2024-11-13 17/week @ 2024-11-20 61/week @ 2024-11-27 29/week @ 2024-12-04 33/week @ 2024-12-11 6/week @ 2024-12-18 38/week @ 2025-01-01 9/week @ 2025-01-08 11/week @ 2025-01-15 10/week @ 2025-01-22 101/week @ 2025-01-29 3/week @ 2025-02-05 48/week @ 2025-02-12 14/week @ 2025-02-19 35/week @ 2025-02-26

118 downloads per month
Used in 6 crates (2 directly)

MIT/Apache

115KB
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

~9MB
~167K SLoC