aboutsummaryrefslogtreecommitdiff
path: root/apps/fparkan-game/src/main.rs
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-07-18 08:24:45 +0300
committerValentin Popov <valentin@popov.link>2026-07-18 08:24:45 +0300
commitbf34bf9dd9f8667e7fc828dfeba851d415e22112 (patch)
tree902fa29b1b7b9627890134e60694a3bf13b95c7a /apps/fparkan-game/src/main.rs
parente0c86561462933523adf9007845a367f9431c8b0 (diff)
downloadfparkan-bf34bf9dd9f8667e7fc828dfeba851d415e22112.tar.xz
fparkan-bf34bf9dd9f8667e7fc828dfeba851d415e22112.zip
feat(runtime): preserve mission object IDs in draws
Diffstat (limited to 'apps/fparkan-game/src/main.rs')
-rw-r--r--apps/fparkan-game/src/main.rs36
1 files changed, 35 insertions, 1 deletions
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),