From c56431eb8fcb1ec6758a5aa3cdbba3892989085f Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 6 Jul 2024 12:39:57 +0200 Subject: conveyors --- server/src/entity/mod.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 server/src/entity/mod.rs (limited to 'server/src/entity/mod.rs') diff --git a/server/src/entity/mod.rs b/server/src/entity/mod.rs new file mode 100644 index 00000000..089c60a5 --- /dev/null +++ b/server/src/entity/mod.rs @@ -0,0 +1,42 @@ +pub mod conveyor; + +use crate::{data::Gamedata, game::Tile, protocol::PacketC}; +use anyhow::Result; +use conveyor::Conveyor; +use glam::IVec2; +use serde::{Deserialize, Serialize}; +use std::collections::{HashMap, VecDeque}; + +pub type DynEntity = Box; + +pub trait Entity { + fn tick( + &mut self, + data: &Gamedata, + points: &mut i64, + packet_out: &mut VecDeque, + tiles: &mut HashMap, + dt: f32, + ) -> Result<()>; +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "snake_case")] +pub enum EntityDecl { + Conveyor { + from: IVec2, + to: IVec2, + speed: Option, + }, +} + +pub fn construct_entity(decl: &EntityDecl) -> DynEntity { + match decl.to_owned() { + EntityDecl::Conveyor { from, to, speed } => Box::new(Conveyor { + from, + to, + max_cooldown: 1. / speed.unwrap_or(2.), + ..Default::default() + }), + } +} -- cgit v1.2.3-70-g09d2