aboutsummaryrefslogtreecommitdiff
path: root/server/src/entity/mod.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-07-23 21:27:25 +0200
committermetamuffin <metamuffin@disroot.org>2024-07-25 11:21:48 +0200
commit74fb8de441c68fff92680a48352f6b9b0f6e9271 (patch)
tree88e59c1043ac5de7379986eadc7f574e27f6c085 /server/src/entity/mod.rs
parent149c58d54bf9c0eda6e3d978984e5e0365b7395d (diff)
downloadhurrycurry-74fb8de441c68fff92680a48352f6b9b0f6e9271.tar
hurrycurry-74fb8de441c68fff92680a48352f6b9b0f6e9271.tar.bz2
hurrycurry-74fb8de441c68fff92680a48352f6b9b0f6e9271.tar.zst
add player portals
Diffstat (limited to 'server/src/entity/mod.rs')
-rw-r--r--server/src/entity/mod.rs31
1 files changed, 23 insertions, 8 deletions
diff --git a/server/src/entity/mod.rs b/server/src/entity/mod.rs
index 95172ed0..ad0bde6f 100644
--- a/server/src/entity/mod.rs
+++ b/server/src/entity/mod.rs
@@ -17,16 +17,21 @@
*/
pub mod conveyor;
pub mod customers;
-pub mod portal;
-use std::collections::{HashMap, HashSet, VecDeque};
+pub mod item_portal;
+pub mod player_portal;
use crate::{data::ItemTileRegistry, game::Game, interaction::Recipe};
use anyhow::{anyhow, Result};
use conveyor::Conveyor;
use customers::{demands::generate_demands, Customers};
-use hurrycurry_protocol::{glam::IVec2, ItemIndex, PacketC, TileIndex};
-use portal::Portal;
+use hurrycurry_protocol::{
+ glam::{IVec2, Vec2},
+ ItemIndex, PacketC, TileIndex,
+};
+use item_portal::ItemPortal;
+use player_portal::PlayerPortal;
use serde::{Deserialize, Serialize};
+use std::collections::{HashMap, HashSet, VecDeque};
pub trait EntityT: Clone {
fn tick(&mut self, game: &mut Game, packet_out: &mut VecDeque<PacketC>, dt: f32) -> Result<()>;
@@ -44,7 +49,7 @@ macro_rules! entities {
};
}
-entities!(Conveyor, Portal, Customers);
+entities!(Conveyor, ItemPortal, PlayerPortal, Customers);
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
@@ -57,10 +62,14 @@ pub enum EntityDecl {
dir: Option<IVec2>,
speed: Option<f32>,
},
- Portal {
+ ItemPortal {
from: Option<IVec2>,
to: IVec2,
},
+ PlayerPortal {
+ from: Option<Vec2>,
+ to: Vec2,
+ },
Customers {},
}
@@ -75,8 +84,14 @@ pub fn construct_entity(
initial_map: &HashMap<IVec2, (TileIndex, Option<ItemIndex>)>,
) -> Result<Entity> {
Ok(match decl.to_owned() {
- EntityDecl::Portal { from, to } => Entity::Portal(Portal {
- from: from.or(pos).ok_or(anyhow!("no portla start"))?,
+ EntityDecl::ItemPortal { from, to } => Entity::ItemPortal(ItemPortal {
+ from: from.or(pos).ok_or(anyhow!("no item portal start"))?,
+ to,
+ }),
+ EntityDecl::PlayerPortal { from, to } => Entity::PlayerPortal(PlayerPortal {
+ from: from
+ .or(pos.map(|v| v.as_vec2()))
+ .ok_or(anyhow!("no player portal start"))?,
to,
}),
EntityDecl::Conveyor {