From 13fb44b129c8bdb263136997300121abbbff4aaf Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 27 Jul 2024 13:04:32 +0200 Subject: permanent effects --- server/src/entity/environment_effect.rs | 23 ++++++++++++++++++----- server/src/entity/mod.rs | 9 +++++++-- 2 files changed, 25 insertions(+), 7 deletions(-) (limited to 'server/src') diff --git a/server/src/entity/environment_effect.rs b/server/src/entity/environment_effect.rs index dcfc08c1..8888f253 100644 --- a/server/src/entity/environment_effect.rs +++ b/server/src/entity/environment_effect.rs @@ -32,7 +32,6 @@ pub struct EnvironmentEffect { on: f32, #[serde(default = "default_onoff")] off: f32, - exclusive: bool, } fn default_onoff() -> f32 { 40. @@ -70,10 +69,8 @@ impl EntityT for EnvironmentEffectController { } else { self.next_transition += Duration::from_secs_f32(self.config.off * (0.5 + random::())); - if game.environment_effects.is_empty() || !self.config.exclusive { - self.active = true; - game.environment_effects.insert(self.config.name.clone()); - } + self.active = true; + game.environment_effects.insert(self.config.name.clone()); } packet_out.push_back(PacketC::Environment { effects: game.environment_effects.clone(), @@ -82,3 +79,19 @@ impl EntityT for EnvironmentEffectController { Ok(()) } } + +#[derive(Debug, Clone)] +pub struct EnvironmentController(pub Vec); +impl EntityT for EnvironmentController { + fn tick( + &mut self, + game: &mut Game, + _packet_out: &mut VecDeque, + _dt: f32, + ) -> anyhow::Result<()> { + if game.environment_effects.is_empty() { + game.environment_effects.extend(self.0.clone()); + } + Ok(()) + } +} diff --git a/server/src/entity/mod.rs b/server/src/entity/mod.rs index 747dd6b7..81061bb5 100644 --- a/server/src/entity/mod.rs +++ b/server/src/entity/mod.rs @@ -25,7 +25,7 @@ use crate::{data::ItemTileRegistry, game::Game, interaction::Recipe}; use anyhow::{anyhow, Result}; use conveyor::Conveyor; use customers::{demands::generate_demands, Customers}; -use environment_effect::{EnvironmentEffect, EnvironmentEffectController}; +use environment_effect::{EnvironmentController, EnvironmentEffect, EnvironmentEffectController}; use hurrycurry_protocol::{ glam::{IVec2, Vec2}, ItemIndex, PacketC, TileIndex, @@ -56,7 +56,8 @@ entities!( ItemPortal, PlayerPortal, Customers, - EnvironmentEffectController + EnvironmentEffectController, + EnvironmentController ); #[derive(Debug, Clone, Deserialize, Serialize)] @@ -80,6 +81,7 @@ pub enum EntityDecl { }, Customers {}, EnvironmentEffect(EnvironmentEffect), + Environment(Vec), } pub fn construct_entity( @@ -137,5 +139,8 @@ pub fn construct_entity( EntityDecl::EnvironmentEffect(config) => { Entity::EnvironmentEffectController(EnvironmentEffectController::new(config)) } + EntityDecl::Environment(names) => { + Entity::EnvironmentController(EnvironmentController(names)) + } }) } -- cgit v1.2.3-70-g09d2