/* 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 . */ use hurrycurry_protocol::{ ItemIndex, TileIndex, glam::{IVec2, Vec2}, }; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Deserialize, Serialize)] #[serde(rename_all = "snake_case")] pub enum EntityDecl { Conveyor { from: IVec2, to: IVec2, speed: Option, }, ItemPortal { from: IVec2, to: IVec2, }, PlayerPortal { from: Vec2, to: Vec2, }, Customers { scaling_factor: Option, spawn_cooldown: Option, #[serde(default = "default_item")] unknown_order: ItemIndex, }, Map { name: String, pos: Vec2, }, EnvironmentEffect(EnvironmentEffect), Environment(Vec), Gate { condition: GateCondition, pos: IVec2, blocker_tile: TileIndex, }, Tram { length: usize, color: Option, points: Vec, spacing: f32, smoothing: f32, }, Book { pos: IVec2, }, Pedestrians { spawn_delay: f32, spawn_delay_stdev: Option, speed: Option, points: Vec, }, TagMinigame { #[serde(default = "default_item")] tag_item: ItemIndex, #[serde(default = "default_tile")] blocker_tile: TileIndex, }, DemandSink { pos: IVec2, }, } #[derive(Debug, Clone, Deserialize, Serialize)] #[serde(rename_all = "kebab-case")] pub enum GateCondition { All(Vec), Any(Vec), Stars(String, u8), } #[derive(Clone, Debug, Deserialize, Serialize, Default)] pub struct EnvironmentEffect { pub name: String, #[serde(default = "default_onoff")] pub on: f32, #[serde(default)] pub on_stdev: f32, #[serde(default = "default_onoff")] pub off: f32, #[serde(default)] pub off_stdev: f32, } fn default_onoff() -> f32 { 40. } fn default_item() -> ItemIndex { ItemIndex(usize::MAX) } fn default_tile() -> TileIndex { TileIndex(usize::MAX) }