aboutsummaryrefslogtreecommitdiff
path: root/server/src/entity/conveyor.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/entity/conveyor.rs')
-rw-r--r--server/src/entity/conveyor.rs31
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(())