refactor(app): key live projections by runtime identity
Move materialized live-object sidecars and presentation worksets to exact RuntimeEntityKey ownership. Runtime remains the only GUID/incarnation/local-ID authority while hydration, animation, effects, lights, equipped children, renderer resources, visibility, liveness, and teardown resolve exact projection identities. Preserve synchronous callbacks, local-ID allocation order, and current rendering behavior.
This commit is contained in:
parent
e18df84437
commit
420e5eea70
73 changed files with 2939 additions and 1715 deletions
|
|
@ -22,11 +22,6 @@ internal sealed class LiveEntityMotionRuntimeController
|
|||
private readonly SelectionState _selection;
|
||||
private readonly LiveWorldOriginState _origin;
|
||||
|
||||
private IReadOnlyDictionary<uint, WorldEntity> _entitiesByServerGuid =>
|
||||
_liveEntities.MaterializedWorldEntities;
|
||||
private IReadOnlyDictionary<uint, WorldEntity> _visibleEntitiesByServerGuid =>
|
||||
_liveEntities.WorldEntities;
|
||||
|
||||
public LiveEntityMotionRuntimeController(
|
||||
LiveEntityRuntime liveEntities,
|
||||
PhysicsDataCache physicsDataCache,
|
||||
|
|
@ -101,7 +96,7 @@ internal sealed class LiveEntityMotionRuntimeController
|
|||
// (own side) and StickyManager::adjust_offset's own-radius gap term.
|
||||
// Replaces the R4 `() => 0f` pins ("setup cylsphere radius lands with
|
||||
// R5-V3").
|
||||
if (!_entitiesByServerGuid.TryGetValue(serverGuid, out var selfEntity))
|
||||
if (!_liveEntities.TryGetWorldEntity(serverGuid, out var selfEntity))
|
||||
return rm.Sink;
|
||||
// R5-V2: forward-declared so the MoveToManager's target seams route
|
||||
// into the entity's TargetManager (retail CPhysicsObj::set_target →
|
||||
|
|
@ -237,7 +232,7 @@ internal sealed class LiveEntityMotionRuntimeController
|
|||
{
|
||||
Console.WriteLine(
|
||||
$"[autowalk-host-miss] object=0x{id:X8} "
|
||||
+ $"materialized={_entitiesByServerGuid.ContainsKey(id)} "
|
||||
+ $"materialized={_liveEntities.ContainsWorldEntity(id)} "
|
||||
+ $"registered={liveEntities.TryGetPhysicsHost(id, out _)} "
|
||||
+ $"hidden={liveEntities.IsHidden(id)}");
|
||||
}
|
||||
|
|
@ -454,7 +449,9 @@ internal sealed class LiveEntityMotionRuntimeController
|
|||
string target = turnPath.TargetGuid is { } targetGuid
|
||||
? $"0x{targetGuid:X8}" : "null";
|
||||
bool targetVisible = turnPath.TargetGuid is { } visibleGuid
|
||||
&& _visibleEntitiesByServerGuid.ContainsKey(visibleGuid);
|
||||
&& _liveEntities.TryGetInteractionEligibleEntity(
|
||||
visibleGuid,
|
||||
out _);
|
||||
bool targetHost = turnPath.TargetGuid is { } hostGuid
|
||||
&& _liveEntities?.TryGetPhysicsHost(hostGuid, out _) == true;
|
||||
var moveTo = movement.MoveTo;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue