/* Hurry Curry! - a game about cooking Copyright (C) 2025 Hurry Curry! Contributors This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License only. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ use super::{Entity, EntityContext}; use anyhow::Result; use hurrycurry_locale::TrError; use hurrycurry_protocol::{ItemLocation, glam::IVec2}; #[derive(Debug, Clone)] pub struct Conveyor { pub(super) from: IVec2, pub(super) to: IVec2, pub(super) cooldown: f32, pub(super) max_cooldown: f32, } impl Entity for Conveyor { fn tick(&mut self, c: EntityContext) -> Result<(), TrError> { let from = c .game .tiles .get(&self.from) .ok_or(TrError::Plain("conveyor from missing".into()))?; if from.item.is_some() { self.cooldown += c.dt; if self.cooldown < self.max_cooldown { return Ok(()); } self.cooldown = 0.; c.game.interact( ItemLocation::Tile(self.from), ItemLocation::Tile(self.to), true, )?; } Ok(()) } }