aboutsummaryrefslogtreecommitdiff
path: root/server/src/entity/mod.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-07-06 12:39:57 +0200
committermetamuffin <metamuffin@disroot.org>2024-07-06 12:39:57 +0200
commitc56431eb8fcb1ec6758a5aa3cdbba3892989085f (patch)
treeef3d7b1e5420b231e85f89cb8437c9581bb81494 /server/src/entity/mod.rs
parent8360741499e11767aa3cbbec0fae43ddaab706f9 (diff)
downloadhurrycurry-c56431eb8fcb1ec6758a5aa3cdbba3892989085f.tar
hurrycurry-c56431eb8fcb1ec6758a5aa3cdbba3892989085f.tar.bz2
hurrycurry-c56431eb8fcb1ec6758a5aa3cdbba3892989085f.tar.zst
conveyors
Diffstat (limited to 'server/src/entity/mod.rs')
-rw-r--r--server/src/entity/mod.rs42
1 files changed, 42 insertions, 0 deletions
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<dyn Entity + Send + Sync + 'static>;
+
+pub trait Entity {
+ fn tick(
+ &mut self,
+ data: &Gamedata,
+ points: &mut i64,
+ packet_out: &mut VecDeque<PacketC>,
+ tiles: &mut HashMap<IVec2, Tile>,
+ dt: f32,
+ ) -> Result<()>;
+}
+
+#[derive(Debug, Clone, Deserialize, Serialize)]
+#[serde(rename_all = "snake_case")]
+pub enum EntityDecl {
+ Conveyor {
+ from: IVec2,
+ to: IVec2,
+ speed: Option<f32>,
+ },
+}
+
+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()
+ }),
+ }
+}