From bf34bf9dd9f8667e7fc828dfeba851d415e22112 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Sat, 18 Jul 2026 09:24:45 +0400 Subject: feat(runtime): preserve mission object IDs in draws --- apps/fparkan-game/src/main.rs | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'apps/fparkan-game/src/main.rs') diff --git a/apps/fparkan-game/src/main.rs b/apps/fparkan-game/src/main.rs index 3549b11..b199805 100644 --- a/apps/fparkan-game/src/main.rs +++ b/apps/fparkan-game/src/main.rs @@ -35,6 +35,8 @@ use fparkan_runtime::{ MissionAssets, MissionObjectDraft, MissionRequest, }; use fparkan_vfs::DirectoryVfs; +#[cfg(test)] +use fparkan_world::OriginalObjectId; use fparkan_world::WorldSnapshot; use std::path::PathBuf; use std::sync::Arc; @@ -167,7 +169,9 @@ fn render_snapshot_with_assets( draws.push(RenderSnapshotDraw { id: DrawId(draw_id), phase: RenderPhase::Opaque, - object_id: None, + object_id: mission_drafts + .and_then(|drafts| drafts.get(index)) + .and_then(|draft| draft.original_id), mesh, material_slots: vec![material], material_index: 0, @@ -428,6 +432,36 @@ mod tests { ); } + #[test] + fn render_snapshot_preserves_mission_original_object_id() -> Result<(), String> { + let snapshot = WorldSnapshot { + tick: Tick(1), + objects: vec![ObjectHandle { + generation: 1, + slot: 0, + }], + events: Vec::new(), + hash: StateHash([0; 32]), + }; + let drafts = vec![MissionObjectDraft { + original_id: Some(OriginalObjectId(42)), + resource_name_raw: Vec::new(), + identity_or_clan_raw: 0, + position: [0.0; 3], + orientation_raw: [0.0; 3], + scale: [1.0; 3], + visual_ids: Vec::new(), + properties: Vec::new(), + }]; + + let commands = render_snapshot_commands_with_assets(&snapshot, None, Some(&drafts))?; + let RenderCommand::Draw(draw) = &commands.commands[1] else { + return Err("expected draw".to_string()); + }; + assert_eq!(draw.object_id, Some(OriginalObjectId(42))); + Ok(()) + } + fn prepared_visual(id: u64, material: u64) -> PreparedVisual { PreparedVisual { id: AssetId::new(id), -- cgit v1.2.3