Various pathfinding tweaks.
This commit is contained in:
parent
74e66dbd59
commit
dc1c14fd23
|
@ -11,6 +11,7 @@ use bevy_rapier2d::{
|
||||||
};
|
};
|
||||||
use derive_more::{Deref, DerefMut};
|
use derive_more::{Deref, DerefMut};
|
||||||
use futures_lite::future;
|
use futures_lite::future;
|
||||||
|
use mapgen::Tile;
|
||||||
use pathfinding::prelude::*;
|
use pathfinding::prelude::*;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -45,9 +46,11 @@ pub fn find_path(
|
||||||
&start.into(),
|
&start.into(),
|
||||||
|p| {
|
|p| {
|
||||||
let mut successors: Vec<((i32, i32), u32)> = vec![];
|
let mut successors: Vec<((i32, i32), u32)> = vec![];
|
||||||
|
if map.at(p.0 as usize, p.1 as usize).is_walkable() {
|
||||||
for tile in map.get_available_exits(p.0 as usize, p.1 as usize) {
|
for tile in map.get_available_exits(p.0 as usize, p.1 as usize) {
|
||||||
successors.push(((tile.0 as i32, tile.1 as i32), (tile.2 * 100.) as u32));
|
successors.push(((tile.0 as i32, tile.1 as i32), (tile.2 * 100.) as u32));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
successors
|
successors
|
||||||
},
|
},
|
||||||
|p| (p.distance_squared(destination) * 100.) as u32,
|
|p| (p.distance_squared(destination) * 100.) as u32,
|
||||||
|
@ -147,6 +150,7 @@ fn find_path_for_shape(
|
||||||
&start.i32(),
|
&start.i32(),
|
||||||
|p| {
|
|p| {
|
||||||
let mut successors: Vec<((i32, i32), u32)> = vec![];
|
let mut successors: Vec<((i32, i32), u32)> = vec![];
|
||||||
|
if map.at(p.0 as usize, p.1 as usize).is_walkable() {
|
||||||
for tile in map.get_available_exits(p.0 as usize, p.1 as usize) {
|
for tile in map.get_available_exits(p.0 as usize, p.1 as usize) {
|
||||||
let mut should_push = true;
|
let mut should_push = true;
|
||||||
let shape_pos = Isometry::new(vector![tile.0 as f32, tile.1 as f32], 0.);
|
let shape_pos = Isometry::new(vector![tile.0 as f32, tile.1 as f32], 0.);
|
||||||
|
@ -165,6 +169,7 @@ fn find_path_for_shape(
|
||||||
successors.push(((tile.0 as i32, tile.1 as i32), (tile.2 * 100.) as u32));
|
successors.push(((tile.0 as i32, tile.1 as i32), (tile.2 * 100.) as u32));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
successors
|
successors
|
||||||
},
|
},
|
||||||
|p| (p.distance_squared(destination) * 100.) as u32,
|
|p| (p.distance_squared(destination) * 100.) as u32,
|
||||||
|
@ -193,7 +198,8 @@ fn calculate_path(
|
||||||
.remove::<Path>()
|
.remove::<Path>()
|
||||||
.remove::<NoPath>()
|
.remove::<NoPath>()
|
||||||
.remove::<Calculating>()
|
.remove::<Calculating>()
|
||||||
.remove::<Destination>();
|
.remove::<Destination>()
|
||||||
|
.remove::<Speed>();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for map in map.iter() {
|
for map in map.iter() {
|
||||||
|
@ -280,7 +286,8 @@ fn negotiate_path(
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
commands.entity(entity).remove::<Path>();
|
println!("Remove path1");
|
||||||
|
commands.entity(entity).remove::<Path>().remove::<Speed>();
|
||||||
velocity.linvel = Vec2::ZERO.into();
|
velocity.linvel = Vec2::ZERO.into();
|
||||||
}
|
}
|
||||||
**path = new_path;
|
**path = new_path;
|
||||||
|
@ -302,10 +309,13 @@ fn negotiate_path(
|
||||||
velocity.linvel = direction.into();
|
velocity.linvel = direction.into();
|
||||||
} else {
|
} else {
|
||||||
velocity.linvel = Vec2::ZERO.into();
|
velocity.linvel = Vec2::ZERO.into();
|
||||||
|
println!("Remove path2");
|
||||||
commands
|
commands
|
||||||
.entity(entity)
|
.entity(entity)
|
||||||
.remove::<Path>()
|
.remove::<Path>()
|
||||||
.remove::<Destination>();
|
.remove::<NoPath>()
|
||||||
|
.remove::<Destination>()
|
||||||
|
.remove::<Speed>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user