From 2537e764a359328870c3eabb16ee5238becd3c73 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Thu, 11 Jul 2024 16:55:39 +0200 Subject: add conveyor filters --- server/src/entity/portal.rs | 46 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 server/src/entity/portal.rs (limited to 'server/src/entity/portal.rs') diff --git a/server/src/entity/portal.rs b/server/src/entity/portal.rs new file mode 100644 index 00000000..e0195b9f --- /dev/null +++ b/server/src/entity/portal.rs @@ -0,0 +1,46 @@ +use super::EntityT; +use crate::{ + data::Gamedata, + game::{interact_effect, Tile}, +}; +use anyhow::{anyhow, Result}; +use hurrycurry_protocol::{glam::IVec2, ItemLocation, PacketC}; +use std::collections::{HashMap, VecDeque}; + +#[derive(Debug, Default, Clone)] +pub struct Portal { + pub(super) from: IVec2, + pub(super) to: IVec2, +} + +impl EntityT for Portal { + fn tick( + &mut self, + data: &Gamedata, + points: &mut i64, + packet_out: &mut VecDeque, + tiles: &mut HashMap, + _dt: f32, + ) -> Result<()> { + let [from, to] = tiles + .get_many_mut([&self.from, &self.to]) + .ok_or(anyhow!("conveyor does ends in itself"))?; + + if from.item.is_some() { + interact_effect( + data, + true, + &mut to.item, + ItemLocation::Tile(self.to), + &mut from.item, + ItemLocation::Tile(self.from), + Some(to.kind), + packet_out, + points, + true, + ); + } + + Ok(()) + } +} -- cgit v1.2.3-70-g09d2