diff options
Diffstat (limited to 'server/src/entity/conveyor.rs')
-rw-r--r-- | server/src/entity/conveyor.rs | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/server/src/entity/conveyor.rs b/server/src/entity/conveyor.rs index b370356c..f7f091c7 100644 --- a/server/src/entity/conveyor.rs +++ b/server/src/entity/conveyor.rs @@ -1,5 +1,3 @@ -use std::collections::VecDeque; - /* Hurry Curry! - a game about cooking Copyright 2024 metamuffin @@ -17,10 +15,10 @@ use std::collections::VecDeque; along with this program. If not, see <https://www.gnu.org/licenses/>. */ -use super::EntityT; -use crate::game::{interact_effect, Game}; +use super::{EntityContext, EntityT}; +use crate::server::interact_effect; use anyhow::{anyhow, Result}; -use hurrycurry_protocol::{glam::IVec2, ItemIndex, ItemLocation, PacketC}; +use hurrycurry_protocol::{glam::IVec2, ItemIndex, ItemLocation}; #[derive(Debug, Clone)] pub struct Conveyor { @@ -33,15 +31,17 @@ pub struct Conveyor { } impl EntityT for Conveyor { - fn tick(&mut self, game: &mut Game, packet_out: &mut VecDeque<PacketC>, dt: f32) -> Result<()> { - let from = game + fn tick(&mut self, c: EntityContext) -> Result<()> { + let from = c + .game .tiles .get(&self.from) .ok_or(anyhow!("conveyor from missing"))?; if let Some(from_item) = from.item.as_ref() { let filter = if let Some(t) = &self.filter_tile { - let filter_tile = game + let filter_tile = c + .game .tiles .get(t) .ok_or(anyhow!("conveyor filter missing"))?; @@ -56,28 +56,29 @@ impl EntityT for Conveyor { } } - self.cooldown += dt; + self.cooldown += c.dt; if self.cooldown < self.max_cooldown { return Ok(()); } self.cooldown = 0.; - let [from, to] = game + let [from, to] = c + .game .tiles .get_many_mut([&self.from, &self.to]) .ok_or(anyhow!("conveyor does ends in itself"))?; interact_effect( - &game.data, + &c.game.data, true, &mut to.item, ItemLocation::Tile(self.to), &mut from.item, ItemLocation::Tile(self.from), Some(to.kind), - packet_out, - &mut game.score, - &mut game.score_changed, + c.packet_out, + &mut c.game.score, + c.score_changed, true, ); } |