diff options
Diffstat (limited to 'server/data/src/entities.rs')
-rw-r--r-- | server/data/src/entities.rs | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/server/data/src/entities.rs b/server/data/src/entities.rs new file mode 100644 index 00000000..68dbe479 --- /dev/null +++ b/server/data/src/entities.rs @@ -0,0 +1,99 @@ +/* + Hurry Curry! - a game about cooking + Copyright (C) 2025 Hurry Curry! Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, version 3 of the License only. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +*/ + +use hurrycurry_protocol::glam::{IVec2, Vec2}; +use serde::{Deserialize, Serialize}; + +use crate::ItemTileRegistry; + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "snake_case")] +pub enum EntityDecl { + Conveyor { + from: IVec2, + to: IVec2, + speed: Option<f32>, + }, + ItemPortal { + from: IVec2, + to: IVec2, + }, + PlayerPortal { + from: Vec2, + to: Vec2, + }, + Customers { + scaling_factor: Option<f32>, + }, + Map { + name: String, + pos: Vec2, + }, + EnvironmentEffect(EnvironmentEffect), + Environment(Vec<String>), + Gate { + condition: GateCondition, + pos: IVec2, + }, + Tram { + length: usize, + color: Option<i32>, + points: Vec<Vec2>, + spacing: f32, + smoothing: f32, + }, + Book { + pos: IVec2, + }, + Pedestrians { + spawn_delay: f32, + spawn_delay_stdev: Option<f32>, + speed: Option<f32>, + points: Vec<Vec2>, + }, +} + +impl EntityDecl { + pub(crate) fn run_register(&self, reg: &ItemTileRegistry) { + match self { + Self::Gate { .. } => drop(reg.register_tile("fence".into())), + Self::Customers { .. } => drop(reg.register_item("unknown-order".into())), + _ => (), + } + } +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "kebab-case")] +pub enum GateCondition { + All(Vec<GateCondition>), + Any(Vec<GateCondition>), + Stars(String, u8), +} + +#[derive(Clone, Debug, Deserialize, Serialize, Default)] +pub struct EnvironmentEffect { + pub name: String, + #[serde(default = "default_onoff")] + pub on: f32, + #[serde(default = "default_onoff")] + pub off: f32, +} +fn default_onoff() -> f32 { + 40. +} |