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

#1902 in Game dev

Download history 37/week @ 2024-06-16 31/week @ 2024-06-23 6/week @ 2024-06-30 16/week @ 2024-07-07 40/week @ 2024-07-14 36/week @ 2024-07-21 70/week @ 2024-07-28 35/week @ 2024-08-04 25/week @ 2024-08-11 20/week @ 2024-08-18 31/week @ 2024-08-25 25/week @ 2024-09-01 22/week @ 2024-09-08 18/week @ 2024-09-15 45/week @ 2024-09-22 20/week @ 2024-09-29

107 downloads per month
Used in 6 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

~9MB
~164K SLoC