diff options
| -rwxr-xr-x | azalea-core/src/position.rs | 2 | ||||
| -rw-r--r-- | azalea/src/swarm/mod.rs | 13 |
2 files changed, 11 insertions, 4 deletions
diff --git a/azalea-core/src/position.rs b/azalea-core/src/position.rs index e61756b0..cc99b684 100755 --- a/azalea-core/src/position.rs +++ b/azalea-core/src/position.rs @@ -168,7 +168,7 @@ impl Vec3 { f64::sqrt(self.x * self.x + self.y * self.y + self.z * self.z) } - /// Get the squared distance from this position to another position. + /// Get the distance from this position to another position. /// Equivalent to `(self - other).length()`. pub fn distance_to(&self, other: &Self) -> f64 { (self - other).length() diff --git a/azalea/src/swarm/mod.rs b/azalea/src/swarm/mod.rs index 18c92438..af381c0b 100644 --- a/azalea/src/swarm/mod.rs +++ b/azalea/src/swarm/mod.rs @@ -387,12 +387,19 @@ where }); // bot events - while let Some((Some(event), bot)) = bots_rx.recv().await { + while let Some((Some(first_event), first_bot)) = bots_rx.recv().await { if let Some(handler) = &self.handler { - let state = bot.component::<S>(); - tokio::spawn((handler)(bot, event, state.clone())); + let first_bot_state = first_bot.component::<S>(); + let first_bot_entity = first_bot.entity; + tokio::spawn((handler)(first_bot, first_event, first_bot_state.clone())); + // this makes it not have to keep locking the ecs + let mut states = HashMap::new(); + states.insert(first_bot_entity, first_bot_state); while let Ok((Some(event), bot)) = bots_rx.try_recv() { + let state = states + .entry(bot.entity) + .or_insert_with(|| bot.component::<S>().clone()); tokio::spawn((handler)(bot, event, state.clone())); } } |
