From e33925677692b85d096d891b381bac62b2c9942b Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Sat, 18 Jul 2026 19:42:52 +0400 Subject: feat(runtime): add terrain-snapped reference movement --- crates/fparkan-world/src/lib.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'crates/fparkan-world') diff --git a/crates/fparkan-world/src/lib.rs b/crates/fparkan-world/src/lib.rs index 69cf67d..e14ac97 100644 --- a/crates/fparkan-world/src/lib.rs +++ b/crates/fparkan-world/src/lib.rs @@ -376,6 +376,20 @@ pub fn transform_state(world: &World, handle: ObjectHandle) -> Result Option { + world.slots.iter().enumerate().find_map(|(index, slot)| { + let index = u32::try_from(index).ok()?; + (slot.live && slot.registered && slot.original_id == Some(original_id)).then_some( + ObjectHandle { + generation: slot.generation, + slot: index, + }, + ) + }) +} + /// Requests deletion. /// /// # Errors @@ -814,10 +828,16 @@ mod tests { .expect("second"); register_object(&mut world, first).expect("register first"); register_object(&mut world, second).expect("register second"); + assert_eq!( + handle_by_original_id(&world, OriginalObjectId(7)), + Some(first) + ); + assert_eq!(handle_by_original_id(&world, OriginalObjectId(9)), None); assert_eq!(registration_sequence(&world, first), Ok(Some(0))); assert_eq!(registration_sequence(&world, second), Ok(Some(1))); request_delete(&mut world, first).expect("delete"); + assert_eq!(handle_by_original_id(&world, OriginalObjectId(7)), None); assert_eq!( register_object(&mut world, first), Err(WorldError::StaleHandle) -- cgit v1.2.3