diff options
author | metamuffin <metamuffin@disroot.org> | 2024-07-23 21:27:25 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-07-25 11:21:48 +0200 |
commit | 74fb8de441c68fff92680a48352f6b9b0f6e9271 (patch) | |
tree | 88e59c1043ac5de7379986eadc7f574e27f6c085 /server/src/entity/mod.rs | |
parent | 149c58d54bf9c0eda6e3d978984e5e0365b7395d (diff) | |
download | hurrycurry-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.rs | 31 |
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 { |