diff options
| author | metamuffin <metamuffin@disroot.org> | 2025-10-12 00:03:16 +0200 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2025-10-12 00:03:16 +0200 |
| commit | bab30b167f8d81df92ee0f3dd6f1c1b3dfaeb9b0 (patch) | |
| tree | 2d69741912aed51084df8b1b5f44d8fe1787639e /server/data | |
| parent | 94fab766512de7b3be8123c4238a7902ce7b35c4 (diff) | |
| download | hurrycurry-bab30b167f8d81df92ee0f3dd6f1c1b3dfaeb9b0.tar hurrycurry-bab30b167f8d81df92ee0f3dd6f1c1b3dfaeb9b0.tar.bz2 hurrycurry-bab30b167f8d81df92ee0f3dd6f1c1b3dfaeb9b0.tar.zst | |
Fix bug where unknown order item was optimized out
Diffstat (limited to 'server/data')
| -rw-r--r-- | server/data/src/entities.rs | 23 | ||||
| -rw-r--r-- | server/data/src/lib.rs | 8 | ||||
| -rw-r--r-- | server/data/src/registry.rs | 9 |
3 files changed, 23 insertions, 17 deletions
diff --git a/server/data/src/entities.rs b/server/data/src/entities.rs index 68dbe479..04d4e1c5 100644 --- a/server/data/src/entities.rs +++ b/server/data/src/entities.rs @@ -16,11 +16,12 @@ */ -use hurrycurry_protocol::glam::{IVec2, Vec2}; +use hurrycurry_protocol::{ + ItemIndex, TileIndex, + glam::{IVec2, Vec2}, +}; use serde::{Deserialize, Serialize}; -use crate::ItemTileRegistry; - #[derive(Debug, Clone, Deserialize, Serialize)] #[serde(rename_all = "snake_case")] pub enum EntityDecl { @@ -39,6 +40,8 @@ pub enum EntityDecl { }, Customers { scaling_factor: Option<f32>, + #[serde(default = "default_item")] + unknown_order: ItemIndex, }, Map { name: String, @@ -49,6 +52,7 @@ pub enum EntityDecl { Gate { condition: GateCondition, pos: IVec2, + blocker_tile: TileIndex, }, Tram { length: usize, @@ -68,16 +72,6 @@ pub enum EntityDecl { }, } -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 { @@ -97,3 +91,6 @@ pub struct EnvironmentEffect { fn default_onoff() -> f32 { 40. } +fn default_item() -> ItemIndex { + ItemIndex(usize::MAX) +} diff --git a/server/data/src/lib.rs b/server/data/src/lib.rs index dd462e3b..ed1d03da 100644 --- a/server/data/src/lib.rs +++ b/server/data/src/lib.rs @@ -210,9 +210,11 @@ fn build_data( } } - entities.extend(map_in.entities.clone()); - for e in &entities { - e.run_register(®); + for mut e in map_in.entities.clone() { + if let EntityDecl::Customers { unknown_order, .. } = &mut e { + *unknown_order = reg.register_item("unknown-order".to_owned()) + } + entities.push(e); } debug!("{} entites created", entities.len()); diff --git a/server/data/src/registry.rs b/server/data/src/registry.rs index 952a2e29..e7dc7f77 100644 --- a/server/data/src/registry.rs +++ b/server/data/src/registry.rs @@ -23,7 +23,7 @@ use std::{ sync::RwLock, }; -use crate::Serverdata; +use crate::{Serverdata, entities::EntityDecl}; #[derive(Default)] pub(crate) struct ItemTileRegistry { @@ -78,6 +78,13 @@ pub(crate) fn filter_unused_tiles_and_items(data: &mut Gamedata, serverdata: &mu used_tiles.insert(tile); used_items.extend(item); } + for e in &serverdata.entity_decls { + match e { + EntityDecl::Gate { blocker_tile: blocker, .. } => used_tiles.insert(*blocker), + EntityDecl::Customers { unknown_order, .. } => used_items.insert(*unknown_order), + _ => false, + }; + } let mut item_names = Vec::new(); let mut item_map = HashMap::new(); |