diff options
Diffstat (limited to 'server/src/entity/conveyor.rs')
| -rw-r--r-- | server/src/entity/conveyor.rs | 31 |
1 files changed, 7 insertions, 24 deletions
diff --git a/server/src/entity/conveyor.rs b/server/src/entity/conveyor.rs index 9534b045..6757ed43 100644 --- a/server/src/entity/conveyor.rs +++ b/server/src/entity/conveyor.rs @@ -16,8 +16,8 @@ */ use super::{Entity, EntityContext}; -use crate::interaction::interact; -use anyhow::{Result, anyhow, bail}; +use anyhow::Result; +use hurrycurry_locale::TrError; use hurrycurry_protocol::{ItemLocation, glam::IVec2}; #[derive(Debug, Clone)] @@ -29,12 +29,12 @@ pub struct Conveyor { } impl Entity for Conveyor { - fn tick(&mut self, c: EntityContext) -> Result<()> { + fn tick(&mut self, c: EntityContext) -> Result<(), TrError> { let from = c .game .tiles .get(&self.from) - .ok_or(anyhow!("conveyor from missing"))?; + .ok_or(TrError::Plain("conveyor from missing".into()))?; if from.item.is_some() { self.cooldown += c.dt; @@ -43,28 +43,11 @@ impl Entity for Conveyor { } self.cooldown = 0.; - if self.from == self.to { - bail!("conveyor does ends in itself") - } - let [Some(from), Some(to)] = c.game.tiles.get_disjoint_mut([&self.from, &self.to]) - else { - bail!("at least one conveyor end not on map"); - }; - - interact( - &c.game.data, - true, - Some(to.kind), - None, - &mut to.item, - ItemLocation::Tile(self.to), - &mut from.item, + c.game.interact( ItemLocation::Tile(self.from), - &mut c.game.score, - c.score_changed, + ItemLocation::Tile(self.to), true, - c.packet_out, - ); + )?; } Ok(()) |