/* 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 crate::entity::{Entity, EntityContext}; use anyhow::Result; use hurrycurry_locale::TrError; use hurrycurry_protocol::{ItemLocation, PacketC, glam::IVec2}; pub struct DemandSink { pub pos: IVec2, } impl Entity for DemandSink { fn tick(&mut self, c: EntityContext<'_>) -> Result<(), TrError> { let Some(tile) = c.game.tiles.get(&self.pos) else { return Ok(()); }; let Some(item) = &tile.item else { return Ok(()); }; if let Some(demand) = c.game.data.demands.iter().find(|d| d.input == item.kind) { c.game.score.demands_completed += 1; c.game.score.points += demand.points; *c.score_changed = true; c.packet_out.push_back(PacketC::Effect2 { name: "satisfied".to_string(), location: ItemLocation::Tile(self.pos), }); } else { // No effect } c.game.set_item(self.pos, None); Ok(()) } }