#nav-mesh #system #tell

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

#2125 in Game dev

Download history 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 3/week @ 2025-03-05 24/week @ 2025-03-12 31/week @ 2025-03-19 23/week @ 2025-03-26

84 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
~168K SLoC