refactor(runtime): own projectile simulation

Move projectile component identity, prediction invalidation, spatial worksets, authoritative corrections, and the retail physics step into AcDream.Runtime. Keep App as the DAT-shape and presentation adapter so ACE outcomes and visible behavior remain unchanged.
This commit is contained in:
Erik 2026-07-26 14:17:42 +02:00
parent fce8e7b18e
commit 2aee33569f
19 changed files with 1255 additions and 335 deletions

View file

@ -234,8 +234,8 @@ public sealed class LiveEntityAnimationSchedulerTests
var (live, record, animation) = BuildVisibleAnimatedWithPosFrames(
RemoteGuid,
rootOrigin: Vector3.Zero);
var physics = new PhysicsEngine();
var projectiles = new ProjectileController(live, physics);
PhysicsEngine physics = live.Physics.Engine;
var projectiles = new ProjectileController(live);
record.FinalPhysicsState = ProjectileState;
Assert.True(record.ObjectClock.IsActive);
Assert.True(projectiles.TryBind(
@ -287,8 +287,8 @@ public sealed class LiveEntityAnimationSchedulerTests
var (live, record, animation) = BuildVisibleAnimatedWithPosFrames(
RemoteGuid,
rootOrigin: Vector3.Zero);
var physics = new PhysicsEngine();
var projectiles = new ProjectileController(live, physics);
PhysicsEngine physics = live.Physics.Engine;
var projectiles = new ProjectileController(live);
record.FinalPhysicsState = ProjectileState;
var remote = new AcDream.Runtime.Physics.RemoteMotion
{
@ -642,7 +642,7 @@ public sealed class LiveEntityAnimationSchedulerTests
new AnimationHookRouter(),
poses))
: new TestAnimationHookCaptureSink(captureHooks);
projectiles ??= new ProjectileController(live, physics);
projectiles ??= new ProjectileController(live);
return new LiveEntityAnimationScheduler(
live,
identity,