Resolve comments

This commit is contained in:
Louis Pearson 2021-04-02 22:43:26 -06:00
parent 3c7898fe8e
commit 99c6e57c1f
2 changed files with 21 additions and 24 deletions

View File

@ -34,7 +34,6 @@ impl Entity {
pub fn get_body(&self) -> comp::Body { pub fn get_body(&self) -> comp::Body {
match self.rng(PERM_GENUS).gen::<f32>() { match self.rng(PERM_GENUS).gen::<f32>() {
// we want 5% airships, 45% birds, 50% humans // we want 5% airships, 45% birds, 50% humans
// HUMANS TEMPORARILY DISABLED UNTIL PATHFINDING FIXED
x if x < 0.05 => comp::Body::Ship(comp::ship::Body::DefaultAirship), x if x < 0.05 => comp::Body::Ship(comp::ship::Body::DefaultAirship),
x if x < 0.50 => { x if x < 0.50 => {
let species = *(&comp::bird_medium::ALL_SPECIES) let species = *(&comp::bird_medium::ALL_SPECIES)
@ -133,17 +132,6 @@ impl Entity {
} }
pub fn tick(&mut self, time: &Time, terrain: &TerrainGrid, world: &World, index: &IndexRef) { pub fn tick(&mut self, time: &Time, terrain: &TerrainGrid, world: &World, index: &IndexRef) {
// TODO: Make travellers travel smarter
// This is mainly for humanoids
// 1. If they have a track, follow that
// - if the next point is too far away:
// - if progress is 0, attempt to reverse it
// - otherwise, clear the track
// 2. If they have a target site and no track, attempt to go there directly
// 3. If there is no target site or track, check if they are currently at a
// site
// - If they are at site, calculate a new target site
// - If they aren't go to the nearest site
let mut next_pos_calculated = false; let mut next_pos_calculated = false;
let tgt_site = self.brain.tgt.or_else(|| { let tgt_site = self.brain.tgt.or_else(|| {
world world
@ -213,22 +201,26 @@ impl Entity {
let destination_name = site let destination_name = site
.site_tmp .site_tmp
.map_or("".to_string(), |id| index.sites[id].name().to_string()); .map_or("".to_string(), |id| index.sites[id].name().to_string());
if let Some(sim_pos) = track.path.iter().nth(self.brain.track_progress) { if let Some(sim_pos) = track.path().iter().nth(self.brain.track_progress) {
let chunkpos = sim_pos * TerrainChunk::RECT_SIZE.map(|e| e as i32); let chunkpos = sim_pos * TerrainChunk::RECT_SIZE.map(|e| e as i32);
let mut wpos = chunkpos; let wpos = if let Some(pathdata) = world.sim().get_nearest_path(chunkpos) {
if let Some(pathdata) = world.sim().get_nearest_path(chunkpos) { pathdata.1.map(|e| e as i32)
wpos = pathdata.1.map(|e| e as i32); } else {
} chunkpos
};
let dist = wpos.map(|e| e as f32).distance(self.pos.xy()) as u32; let dist = wpos.map(|e| e as f32).distance(self.pos.xy()) as u32;
if dist < 32 && !self.brain.track_reversed { if dist < 32 {
self.brain.track_progress += 1; if !self.brain.track_reversed {
if self.brain.track_progress > track.path.len() { self.brain.track_progress += 1;
self.brain.track = None; if self.brain.track_progress > track.path().len() {
self.brain.track = None;
self.brain.track_reversed = false;
}
} }
} else if dist < 32 && self.brain.track_reversed {
if self.brain.track_progress == 0 { if self.brain.track_progress == 0 {
self.brain.track = None; self.brain.track = None;
self.brain.track_reversed = false;
} else { } else {
self.brain.track_progress -= 1; self.brain.track_progress -= 1;
} }
@ -239,6 +231,7 @@ impl Entity {
self.brain.track_reversed = true; self.brain.track_reversed = true;
} else { } else {
self.brain.track = None; self.brain.track = None;
self.brain.track_reversed = false;
} }
} }
@ -301,9 +294,9 @@ impl Entity {
)) ))
.map(|e| e as f32) .map(|e| e as f32)
+ Vec3::new(0.5, 0.5, 0.0); + Vec3::new(0.5, 0.5, 0.0);
self.controller.travel_to = Some((travel_to, destination_name)); self.controller.travel_to = Some((travel_to, destination_name));
self.controller.speed_factor = 0.70; self.controller.speed_factor = 0.70;
// next_pos_calculated = true;
} }
// Forget old memories // Forget old memories

View File

@ -686,7 +686,11 @@ pub struct Track {
/// arbitrary unit and doesn't make sense unless compared to other track /// arbitrary unit and doesn't make sense unless compared to other track
/// costs. /// costs.
cost: f32, cost: f32,
pub path: Path<Vec2<i32>>, path: Path<Vec2<i32>>,
}
impl Track {
pub fn path(&self) -> &Path<Vec2<i32>> { &self.path }
} }
#[derive(Debug)] #[derive(Debug)]