fix(interaction): bind selection to live incarnations

Carry local WorldEntity identity through render hits, lighting pulses, and deferred movement actions so GUID reuse cannot target a replacement. Reset all session-owned selection and ItemHolder state and prevent combat auto-target during teardown.
This commit is contained in:
Erik 2026-07-21 07:07:58 +02:00
parent c271383714
commit 047a4c83b5
19 changed files with 374 additions and 42 deletions

View file

@ -30,6 +30,7 @@ public sealed class RetailWorldPickerTests
Assert.NotNull(hit);
Assert.Equal(2u, hit.Value.ServerGuid);
Assert.Equal(1002u, hit.Value.LocalEntityId);
Assert.True(hit.Value.PolygonHit);
}
@ -72,6 +73,7 @@ public sealed class RetailWorldPickerTests
{
var front = new RetailSelectionPart(
1u,
1001u,
0,
Matrix4x4.Identity,
new RetailSelectionMesh(
@ -92,6 +94,7 @@ public sealed class RetailWorldPickerTests
* Matrix4x4.CreateTranslation(0f, 0f, -10f);
var part = new RetailSelectionPart(
3u,
1003u,
0,
transform,
new RetailSelectionMesh(Vector3.Zero, 1f, [SquareAtLocalZ(0f)]));
@ -152,6 +155,7 @@ public sealed class RetailWorldPickerTests
float sphereRadius = 2f)
=> new(
guid,
guid + 1000u,
0,
Matrix4x4.CreateTranslation(0f, 0f, z),
new RetailSelectionMesh(