From c94ece5f5071d4d9fec46daa59db008aa3f6cf32 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Thu, 19 Sep 2024 18:00:11 +0200 Subject: untested customer collision --- server/bot/src/algos/customer.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'server/bot/src/algos') diff --git a/server/bot/src/algos/customer.rs b/server/bot/src/algos/customer.rs index 6ac4d599..c3d72d49 100644 --- a/server/bot/src/algos/customer.rs +++ b/server/bot/src/algos/customer.rs @@ -32,6 +32,7 @@ pub enum Customer { path: Path, chair: IVec2, origin: IVec2, + ticks: usize, }, Waiting { demand: DemandIndex, @@ -73,6 +74,7 @@ impl BotAlgo for Customer { path, chair, origin: pos.as_ivec2(), + ticks: 0, }; } } @@ -82,7 +84,10 @@ impl BotAlgo for Customer { path, chair, origin, + ticks, } => { + *ticks += 1; + let check = *ticks % 10 == 0; if path.is_done() { let demand = DemandIndex(random::() as usize % game.data.demands.len()); info!("{me:?} -> waiting"); @@ -101,6 +106,20 @@ impl BotAlgo for Customer { }], ..Default::default() } + } else if check + && path.remaining_segments() < 5 + && game + .players + .iter() + .find(|(id, p)| { + p.character < 0 + && **id != me + && p.movement.position.distance(chair.as_vec2() + 0.5) < 1. + }) + .is_some() + { + *self = Customer::New; + BotInput::default() } else if path.is_stuck() { if let Some(path) = find_path(&game.walkable, pos.as_ivec2(), *origin) { *self = Customer::Exiting { path }; -- cgit v1.2.3-70-g09d2