diff options
Diffstat (limited to 'server/data')
| -rw-r--r-- | server/data/src/entities.rs | 8 | ||||
| -rw-r--r-- | server/data/src/lib.rs | 7 | ||||
| -rw-r--r-- | server/data/src/registry.rs | 31 |
3 files changed, 42 insertions, 4 deletions
diff --git a/server/data/src/entities.rs b/server/data/src/entities.rs index 1b0d4548..62947b05 100644 --- a/server/data/src/entities.rs +++ b/server/data/src/entities.rs @@ -38,6 +38,14 @@ pub enum EntityDecl { from: Vec2, to: Vec2, }, + PlayerPortalPair { + a: IVec2, + b: IVec2, + #[serde(default = "default_tile")] + in_tile: TileIndex, + #[serde(default = "default_tile")] + out_tile: TileIndex, + }, Customers { scaling_factor: Option<f32>, spawn_cooldown: Option<f32>, diff --git a/server/data/src/lib.rs b/server/data/src/lib.rs index a677bffd..d06aadd1 100644 --- a/server/data/src/lib.rs +++ b/server/data/src/lib.rs @@ -224,6 +224,13 @@ fn build_data( *blocker_tile = reg.register_tile("conveyor".to_owned()); exclusive_tiles.entry(*blocker_tile).or_default(); } + EntityDecl::PlayerPortalPair { + in_tile, out_tile, .. + } => { + *in_tile = reg.register_tile("black-hole".to_owned()); + *out_tile = reg.register_tile("white-hole".to_owned()); + tile_walkable.extend([*in_tile, *out_tile]); + } _ => (), } entities.push(e); diff --git a/server/data/src/registry.rs b/server/data/src/registry.rs index 6c92ecb5..372df653 100644 --- a/server/data/src/registry.rs +++ b/server/data/src/registry.rs @@ -83,16 +83,19 @@ pub(crate) fn filter_unused_tiles_and_items(data: &mut Gamedata, serverdata: &mu EntityDecl::Gate { blocker_tile: blocker, .. - } => used_tiles.insert(*blocker), - EntityDecl::Customers { unknown_order, .. } => used_items.insert(*unknown_order), + } => used_tiles.extend([*blocker]), + EntityDecl::Customers { unknown_order, .. } => used_items.extend([*unknown_order]), EntityDecl::TagMinigame { tag_item, blocker_tile, } => { used_items.insert(*tag_item); - used_tiles.insert(*blocker_tile) + used_tiles.insert(*blocker_tile); } - _ => false, + EntityDecl::PlayerPortalPair { + in_tile, out_tile, .. + } => used_tiles.extend([*in_tile, *out_tile]), + _ => (), }; } @@ -182,6 +185,26 @@ pub(crate) fn filter_unused_tiles_and_items(data: &mut Gamedata, serverdata: &mu *item = item_map[item] } } + for e in &mut serverdata.entity_decls { + match e { + EntityDecl::Gate { blocker_tile, .. } => *blocker_tile = tile_map[blocker_tile], + EntityDecl::Customers { unknown_order, .. } => *unknown_order = item_map[unknown_order], + EntityDecl::TagMinigame { + tag_item, + blocker_tile, + } => { + *tag_item = item_map[tag_item]; + *blocker_tile = tile_map[blocker_tile]; + } + EntityDecl::PlayerPortalPair { + in_tile, out_tile, .. + } => { + *in_tile = tile_map[in_tile]; + *out_tile = tile_map[out_tile]; + } + _ => (), + }; + } data.tile_walkable = data .tile_walkable .clone() |