aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-12-12 15:23:02 +0100
committermetamuffin <metamuffin@disroot.org>2025-12-12 15:23:05 +0100
commit6c9e1480978e839692fa73f7e28639c3f95a36ee (patch)
treefa9abe65eb77ba9d4a87d1c6e65d2bff3bdbc071 /server
parentbddafa18ad005cd68a413355a2d7b1952eb71ee6 (diff)
downloadhurrycurry-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.rs1
-rw-r--r--server/protocol/src/movement.rs1
-rw-r--r--server/src/entity/customers.rs17
-rw-r--r--server/src/entity/mod.rs11
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 {