aboutsummaryrefslogtreecommitdiff
path: root/server/data/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-10-12 00:03:16 +0200
committermetamuffin <metamuffin@disroot.org>2025-10-12 00:03:16 +0200
commitbab30b167f8d81df92ee0f3dd6f1c1b3dfaeb9b0 (patch)
tree2d69741912aed51084df8b1b5f44d8fe1787639e /server/data/src
parent94fab766512de7b3be8123c4238a7902ce7b35c4 (diff)
downloadhurrycurry-bab30b167f8d81df92ee0f3dd6f1c1b3dfaeb9b0.tar
hurrycurry-bab30b167f8d81df92ee0f3dd6f1c1b3dfaeb9b0.tar.bz2
hurrycurry-bab30b167f8d81df92ee0f3dd6f1c1b3dfaeb9b0.tar.zst
Fix bug where unknown order item was optimized out
Diffstat (limited to 'server/data/src')
-rw-r--r--server/data/src/entities.rs23
-rw-r--r--server/data/src/lib.rs8
-rw-r--r--server/data/src/registry.rs9
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(&reg);
+ 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();