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
|
|
@ -3,6 +3,7 @@ using AcDream.App.Rendering.Vfx;
|
|||
using AcDream.App.World;
|
||||
using AcDream.Core.Physics;
|
||||
using AcDream.Core.World;
|
||||
using AcDream.Runtime.Entities;
|
||||
|
||||
namespace AcDream.App.Rendering;
|
||||
|
||||
|
|
@ -84,7 +85,7 @@ internal sealed class LiveEntityAnimationPresenter
|
|||
}
|
||||
|
||||
public void Present(
|
||||
IReadOnlyDictionary<uint, LiveEntityAnimationSchedule> schedules)
|
||||
IReadOnlyDictionary<RuntimeEntityKey, LiveEntityAnimationSchedule> schedules)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(schedules);
|
||||
LiveEntityRuntime runtime = _liveEntities;
|
||||
|
|
@ -107,7 +108,9 @@ internal sealed class LiveEntityAnimationPresenter
|
|||
if (!TryGetCurrent(runtime, record, entity, animation))
|
||||
continue;
|
||||
|
||||
schedules.TryGetValue(entity.Id, out LiveEntityAnimationSchedule schedule);
|
||||
LiveEntityAnimationSchedule schedule = default;
|
||||
if (record.ProjectionKey is { } key)
|
||||
schedules.TryGetValue(key, out schedule);
|
||||
bool hasOrdinarySchedule = IsCurrentSchedule(runtime, schedule, record, entity, animation);
|
||||
IReadOnlyList<PartTransform>? sequenceFrames = hasOrdinarySchedule
|
||||
? schedule.SequenceFrames
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue