mirror of https://codeberg.org/topola/topola.git
feat(router/navmesh): Reduce number of navedges even further
This commit is contained in:
parent
1694227135
commit
50db79ebd3
|
|
@ -424,12 +424,23 @@ impl Navmesh {
|
||||||
from_prenavnode: PrenavmeshNodeIndex,
|
from_prenavnode: PrenavmeshNodeIndex,
|
||||||
to_prenavnode: PrenavmeshNodeIndex,
|
to_prenavnode: PrenavmeshNodeIndex,
|
||||||
) {
|
) {
|
||||||
for (from_navnode1, from_navnode2) in prenavnode_to_navnodes[&from_prenavnode].iter() {
|
let mut maybe_lowest_join: Option<(usize, usize)> = None;
|
||||||
|
|
||||||
|
for (from_index, (from_navnode1, from_navnode2)) in prenavnode_to_navnodes[&from_prenavnode]
|
||||||
|
.iter()
|
||||||
|
.rev()
|
||||||
|
.enumerate()
|
||||||
|
{
|
||||||
let from_binavnode = graph.node_weight(*from_navnode1).unwrap().binavnode;
|
let from_binavnode = graph.node_weight(*from_navnode1).unwrap().binavnode;
|
||||||
|
|
||||||
if let Some((to_navnode1, to_navnode2)) = prenavnode_to_navnodes[&to_prenavnode]
|
// If binavnodes are found to be joined, only add a single binavedge
|
||||||
|
// between them.
|
||||||
|
if let Some((to_index, (to_navnode1, to_navnode2))) = prenavnode_to_navnodes
|
||||||
|
[&to_prenavnode]
|
||||||
.iter()
|
.iter()
|
||||||
.find(|(to_navnode1, _)| {
|
.rev()
|
||||||
|
.enumerate()
|
||||||
|
.find(|(_, (to_navnode1, _))| {
|
||||||
let to_binavnode = graph.node_weight(*to_navnode1).unwrap().binavnode;
|
let to_binavnode = graph.node_weight(*to_navnode1).unwrap().binavnode;
|
||||||
|
|
||||||
Self::are_binavnodes_joined(layout, from_binavnode, to_binavnode)
|
Self::are_binavnodes_joined(layout, from_binavnode, to_binavnode)
|
||||||
|
|
@ -439,10 +450,23 @@ impl Navmesh {
|
||||||
graph.update_edge(*from_navnode1, *to_navnode1, ());
|
graph.update_edge(*from_navnode1, *to_navnode1, ());
|
||||||
graph.update_edge(*from_navnode2, *to_navnode2, ());
|
graph.update_edge(*from_navnode2, *to_navnode2, ());
|
||||||
|
|
||||||
|
maybe_lowest_join = Some((from_index, to_index));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (to_index, (to_navnode1, to_navnode2)) in prenavnode_to_navnodes[&to_prenavnode]
|
||||||
|
.iter()
|
||||||
|
.rev()
|
||||||
|
.enumerate()
|
||||||
|
{
|
||||||
|
// Don't create navedges that would cross through and thus
|
||||||
|
// infringe joins of navnodes outwards of them.
|
||||||
|
if maybe_lowest_join.is_some_and(|lowest_join| {
|
||||||
|
from_index >= lowest_join.0 || to_index >= lowest_join.1
|
||||||
|
}) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (to_navnode1, to_navnode2) in prenavnode_to_navnodes[&to_prenavnode].iter() {
|
|
||||||
// Add binavedge.
|
// Add binavedge.
|
||||||
graph.update_edge(*from_navnode1, *to_navnode1, ());
|
graph.update_edge(*from_navnode1, *to_navnode1, ());
|
||||||
graph.update_edge(*from_navnode2, *to_navnode2, ());
|
graph.update_edge(*from_navnode2, *to_navnode2, ());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue