1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//! Online and prepared navmesh solvers owned by this crate.
//!
//! # Choose a family
//!
//! - **Static pathfinders** ([`NavmeshPathfinder`](crate::NavmeshPathfinder)) —
//! one validated [`Navmesh`](crate::Navmesh) per call, no preprocess, no shared
//! cache:
//! - [`channel_search`] — cell-corridor BFS + portal-midpoint funnel
//! - [`ta_star`] — same corridor, then local portal-endpoint refinement
//! - optional crate-root [`Polyanya`](crate::Polyanya) (feature-gated) —
//! external mesh adapt + funnel
//!
//! - **Prepared TRA*** ([`tra_star`]) — implement
//! [`PreparedNavmeshBuilder`](crate::PreparedNavmeshBuilder): preprocess once
//! into an immutable map, then `search` many queries. Variants differ only in
//! how portal-midpoint seeds are cached (none, eager static, lazy, LRU,
//! policy-profile). They do **not** apply dynamic availability; materialize a
//! static snapshot first when cells/portals toggle.
//!
//! All public solvers share the same continuous outcome shape
//! ([`NavmeshSearchResult`](crate::NavmeshSearchResult)) and post-corridor
//! funnel ([`navmesh::funnel`](crate::navmesh::funnel)). Private candidates may
//! live beside these modules without a separate experiment crate.
/// Static corridor BFS + portal-midpoint funnel navmesh pathfinder.
/// Static TA* tactical navmesh route search.
/// Prepared TRA* builders and waypoint-DB policy variants.
// Candidate code is deliberately private: it shares the normal navmesh crate
// and validation route, but is not yet part of the supported solver surface.