diff options
| author | metamuffin <metamuffin@disroot.org> | 2025-10-22 16:55:17 +0200 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2025-10-22 16:55:17 +0200 |
| commit | 04e212f3ac61e9af772d803271875e057e498072 (patch) | |
| tree | d58197e626869463b3e8d49b03135c2861551c66 /server | |
| parent | b34b2a5b8d118974502c015912e1ed67fa6965b0 (diff) | |
| download | hurrycurry-04e212f3ac61e9af772d803271875e057e498072.tar hurrycurry-04e212f3ac61e9af772d803271875e057e498072.tar.bz2 hurrycurry-04e212f3ac61e9af772d803271875e057e498072.tar.zst | |
Fix step is_busy and stop moving when interacting
Diffstat (limited to 'server')
| -rw-r--r-- | server/bot/src/pathfinding.rs | 1 | ||||
| -rw-r--r-- | server/bot/src/step.rs | 46 | ||||
| -rw-r--r-- | server/protocol/src/lib.rs | 1 |
3 files changed, 27 insertions, 21 deletions
diff --git a/server/bot/src/pathfinding.rs b/server/bot/src/pathfinding.rs index 936f99dd..4aa7c2ff 100644 --- a/server/bot/src/pathfinding.rs +++ b/server/bot/src/pathfinding.rs @@ -69,6 +69,7 @@ impl Path { display: DebugEventDisplay::Path { points: self.segments.clone(), }, + timeout: 0.1, } } } diff --git a/server/bot/src/step.rs b/server/bot/src/step.rs index 8ef9556d..f5f74f38 100644 --- a/server/bot/src/step.rs +++ b/server/bot/src/step.rs @@ -21,7 +21,10 @@ use crate::{ pathfinding::{Path, find_path_to_neighbour}, }; use hurrycurry_game_core::Game; -use hurrycurry_protocol::{Hand, ItemIndex, ItemLocation, PacketS, PlayerID, glam::IVec2}; +use hurrycurry_protocol::{ + Hand, ItemIndex, ItemLocation, PacketS, PlayerID, + glam::{IVec2, Vec2}, +}; pub struct StepState { path: Path, @@ -33,8 +36,6 @@ pub struct StepState { interact_start_pending: bool, interact_stop_pending: bool, me: PlayerID, - #[cfg(feature = "debug_events")] - init: bool, } impl StepState { @@ -43,17 +44,15 @@ impl StepState { } pub fn new_wait(me: PlayerID, timer: f32) -> Self { Self { - item_expected: None, - interact_position: IVec2::ZERO, + me, + path: Path::EMPTY, hand: Hand(0), + wait_timer: timer, interact_start_pending: false, interact_stop_pending: false, - me, + interact_position: IVec2::ZERO, + item_expected: None, item_current: None, - path: Path::EMPTY, - wait_timer: timer, - #[cfg(feature = "debug_events")] - init: false, } } pub fn new_segment( @@ -74,40 +73,39 @@ impl StepState { path, hand, wait_timer: interact, - interact_stop_pending: true, interact_start_pending: true, + interact_stop_pending: true, interact_position: pos, item_expected: destination_item, item_current: destination_item, - #[cfg(feature = "debug_events")] - init: false, }) } pub fn is_busy(&self) -> bool { - (self.wait_timer >= 0. || self.interact_stop_pending) + (self.wait_timer > 0. || self.interact_stop_pending) && !self.path.is_stuck(3.) && (self.path.is_done() || self.item_current == self.item_expected) } pub fn tick(&mut self, out: &mut PacketSink, game: &Game, dt: f32) { #[cfg(feature = "debug_events")] - if !self.init { + { use crate::debug_player_color; - use hurrycurry_protocol::{DebugEvent, DebugEventDisplay}; + use hurrycurry_protocol::{DebugEvent, DebugEventDisplay, glam::Vec2}; out.push(PacketS::Debug(DebugEvent { key: format!("step-{}", self.me), color: debug_player_color(self.me), display: DebugEventDisplay::Label { - pos: self.interact_position.as_vec2(), + pos: self.interact_position.as_vec2() + Vec2::splat(0.5), text: format!( - "done={} expected={}", - self.path.is_done(), - self.item_expected == self.item_current + "D={} E={} T={:.01}", + self.path.is_done() as u8, + (self.item_expected == self.item_current) as u8, + self.wait_timer ), }, + timeout: 1., })); - self.init = true; } if self.path.is_done() { if self.interact_start_pending { @@ -117,6 +115,12 @@ impl StepState { hand: self.hand, target: Some(ItemLocation::Tile(self.interact_position)), }); + out.push(PacketS::Movement { + player: self.me, + dir: Vec2::ZERO, + boost: false, + pos: None, + }); } else { if self.wait_timer > 0. { self.wait_timer -= dt; diff --git a/server/protocol/src/lib.rs b/server/protocol/src/lib.rs index 2d9aa0f0..09134a4f 100644 --- a/server/protocol/src/lib.rs +++ b/server/protocol/src/lib.rs @@ -384,6 +384,7 @@ pub struct DebugEvent { pub key: String, pub color: Vec3, pub display: DebugEventDisplay, + pub timeout: f32, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "snake_case", tag = "ty")] |