diff options
| author | metamuffin <metamuffin@disroot.org> | 2025-12-12 15:23:02 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2025-12-12 15:23:05 +0100 |
| commit | 6c9e1480978e839692fa73f7e28639c3f95a36ee (patch) | |
| tree | fa9abe65eb77ba9d4a87d1c6e65d2bff3bdbc071 /server | |
| parent | bddafa18ad005cd68a413355a2d7b1952eb71ee6 (diff) | |
| download | hurrycurry-6c9e1480978e839692fa73f7e28639c3f95a36ee.tar hurrycurry-6c9e1480978e839692fa73f7e28639c3f95a36ee.tar.bz2 hurrycurry-6c9e1480978e839692fa73f7e28639c3f95a36ee.tar.zst | |
Customizable customer spawn delay (close #522)
Diffstat (limited to 'server')
| -rw-r--r-- | server/data/src/entities.rs | 1 | ||||
| -rw-r--r-- | server/protocol/src/movement.rs | 1 | ||||
| -rw-r--r-- | server/src/entity/customers.rs | 17 | ||||
| -rw-r--r-- | server/src/entity/mod.rs | 11 |
4 files changed, 19 insertions, 11 deletions
diff --git a/server/data/src/entities.rs b/server/data/src/entities.rs index 6dd0654a..586674cf 100644 --- a/server/data/src/entities.rs +++ b/server/data/src/entities.rs @@ -40,6 +40,7 @@ pub enum EntityDecl { }, Customers { scaling_factor: Option<f32>, + spawn_cooldown: Option<f32>, #[serde(default = "default_item")] unknown_order: ItemIndex, }, diff --git a/server/protocol/src/movement.rs b/server/protocol/src/movement.rs index daa8c421..6a07687f 100644 --- a/server/protocol/src/movement.rs +++ b/server/protocol/src/movement.rs @@ -112,7 +112,6 @@ impl MovementBase { let f = 100. / (1. + d); self.velocity += norm * f * dt } - pub fn get_interact_target(&self) -> IVec2 { (self.position + Vec2::new(self.rotation.sin(), self.rotation.cos())).as_ivec2() } diff --git a/server/src/entity/customers.rs b/server/src/entity/customers.rs index 148faf81..c1bfb525 100644 --- a/server/src/entity/customers.rs +++ b/server/src/entity/customers.rs @@ -25,16 +25,18 @@ use std::random::random; pub struct Customers { customers: Vec<BotDriver<Customer>>, + current_spawn_cooldown: f32, spawn_cooldown: f32, chair_count: Option<usize>, scaling_factor: f32, } impl Customers { - pub fn new(scaling_factor: f32) -> Self { + pub fn new(scaling_factor: f32, spawn_cooldown: f32) -> Self { Self { - customers: Default::default(), - spawn_cooldown: 0., + customers: Vec::new(), + current_spawn_cooldown: 0., + spawn_cooldown, chair_count: None, scaling_factor, } @@ -52,10 +54,11 @@ impl Entity for Customers { }); let max_count = (self.scaling_factor * chairs as f32).max(1.) as usize; - self.spawn_cooldown -= c.dt; - self.spawn_cooldown = self.spawn_cooldown.max(0.); - if self.customers.len() < max_count && self.spawn_cooldown <= 0. { - self.spawn_cooldown = 5. + random_float() * 5.; + self.current_spawn_cooldown -= c.dt; + self.current_spawn_cooldown = self.current_spawn_cooldown.max(0.); + if self.customers.len() < max_count && self.current_spawn_cooldown <= 0. { + self.current_spawn_cooldown = + self.spawn_cooldown + random_float() * self.spawn_cooldown; let bot = BotDriver::new( "".to_string(), Character { diff --git a/server/src/entity/mod.rs b/server/src/entity/mod.rs index 2c46a017..279826a9 100644 --- a/server/src/entity/mod.rs +++ b/server/src/entity/mod.rs @@ -126,9 +126,14 @@ pub fn construct_entity(decl: &EntityDecl) -> DynEntity { blocker_tile, active: true, }), - EntityDecl::Customers { scaling_factor, .. } => { - Box::new(Customers::new(scaling_factor.unwrap_or(0.5))) - } + EntityDecl::Customers { + scaling_factor, + spawn_cooldown, + .. + } => Box::new(Customers::new( + scaling_factor.unwrap_or(0.5), + spawn_cooldown.unwrap_or(5.), + )), EntityDecl::EnvironmentEffect(config) => Box::new(EnvironmentEffectController::new(config)), EntityDecl::Environment(names) => Box::new(EnvironmentController(names)), EntityDecl::Tram { |