refactor(runtime): close simulation ownership
Move remote-motion construction, CreateObject vector initialization, final simulation-component retirement, and the combined J5 ownership ledger into Runtime. Delete App compatibility views and moved-state reconstruction while preserving the existing graphical projection and retail update order.
This commit is contained in:
parent
c30a3efeb0
commit
cdee7a4b49
57 changed files with 1013 additions and 410 deletions
|
|
@ -105,11 +105,10 @@ public sealed class ProjectileControllerTests
|
|||
LiveEntityRecord record = fixture.Spawn(instance: 1);
|
||||
WorldEntity entity = record.WorldEntity!;
|
||||
Assert.Null(record.AnimationRuntime);
|
||||
var remote = new AcDream.Runtime.Physics.RemoteMotion();
|
||||
RemotePhysicsBodyInitializer.Initialize(remote.Body, record);
|
||||
var remote =
|
||||
fixture.Live.GetOrCreateRemoteMotionRuntime(Guid);
|
||||
remote.Body.Position = entity.Position;
|
||||
remote.Body.Orientation = entity.Rotation;
|
||||
fixture.Live.SetRemoteMotionRuntime(Guid, remote);
|
||||
Assert.True(fixture.Controller.TryBind(record, ProjectileSetup(), 1.0, 1, 1));
|
||||
Assert.Same(remote.Body, record.ProjectileRuntime!.Body);
|
||||
|
||||
|
|
@ -686,7 +685,9 @@ public sealed class ProjectileControllerTests
|
|||
LiveEntityRecord record = fixture.Spawn(instance: 1);
|
||||
Assert.True(fixture.Controller.TryBind(record, ProjectileSetup(), 1.0));
|
||||
PhysicsBody body = record.PhysicsBody!;
|
||||
fixture.Live.SetRemoteMotionRuntime(Guid, new AcDream.Runtime.Physics.RemoteMotion(body));
|
||||
Assert.Same(
|
||||
body,
|
||||
fixture.Live.GetOrCreateRemoteMotionRuntime(Guid).Body);
|
||||
record.FinalPhysicsState = PhysicsStateFlags.ReportCollisions;
|
||||
Assert.True(fixture.Controller.ApplyAuthoritativeState(
|
||||
record, record.FinalPhysicsState, 2.0, 1, 1));
|
||||
|
|
@ -710,7 +711,9 @@ public sealed class ProjectileControllerTests
|
|||
Assert.True(fixture.Controller.TryBind(record, ProjectileSetup(), 1.0));
|
||||
PhysicsBody body = record.PhysicsBody!;
|
||||
Vector3 position = body.Position;
|
||||
fixture.Live.SetRemoteMotionRuntime(Guid, new AcDream.Runtime.Physics.RemoteMotion(body));
|
||||
Assert.Same(
|
||||
body,
|
||||
fixture.Live.GetOrCreateRemoteMotionRuntime(Guid).Body);
|
||||
|
||||
record.FinalPhysicsState = PhysicsStateFlags.ReportCollisions;
|
||||
Assert.True(fixture.Controller.ApplyAuthoritativeState(
|
||||
|
|
@ -949,9 +952,8 @@ public sealed class ProjectileControllerTests
|
|||
var fixture = new Fixture();
|
||||
LiveEntityRecord record = fixture.Spawn(instance: 1);
|
||||
record.FinalPhysicsState = PhysicsStateFlags.ReportCollisions;
|
||||
var remote = new AcDream.Runtime.Physics.RemoteMotion();
|
||||
RemotePhysicsBodyInitializer.Initialize(remote.Body, record);
|
||||
fixture.Live.SetRemoteMotionRuntime(Guid, remote);
|
||||
var remote =
|
||||
fixture.Live.GetOrCreateRemoteMotionRuntime(Guid);
|
||||
|
||||
PhysicsStateFlags ordinaryState =
|
||||
PhysicsStateFlags.Gravity | PhysicsStateFlags.IgnoreCollisions;
|
||||
|
|
@ -1001,9 +1003,8 @@ public sealed class ProjectileControllerTests
|
|||
var fixture = new Fixture();
|
||||
LiveEntityRecord record = fixture.Spawn(instance: 1);
|
||||
record.FinalPhysicsState = PhysicsStateFlags.ReportCollisions;
|
||||
var remote = new AcDream.Runtime.Physics.RemoteMotion();
|
||||
RemotePhysicsBodyInitializer.Initialize(remote.Body, record);
|
||||
fixture.Live.SetRemoteMotionRuntime(Guid, remote);
|
||||
var remote =
|
||||
fixture.Live.GetOrCreateRemoteMotionRuntime(Guid);
|
||||
|
||||
record.FinalPhysicsState = MissileState;
|
||||
Assert.True(fixture.Controller.ApplyAuthoritativeState(
|
||||
|
|
@ -1073,15 +1074,14 @@ public sealed class ProjectileControllerTests
|
|||
seedCellId: startCell,
|
||||
isStatic: false);
|
||||
record.FinalPhysicsState = PhysicsStateFlags.ReportCollisions;
|
||||
var remote = new AcDream.Runtime.Physics.RemoteMotion();
|
||||
RemotePhysicsBodyInitializer.Initialize(remote.Body, record);
|
||||
var remote =
|
||||
fixture.Live.GetOrCreateRemoteMotionRuntime(Guid);
|
||||
Assert.Equal(new Vector3(40f, 0f, 0f), remote.Body.Velocity);
|
||||
Assert.Equal(new Vector3(0f, 0f, 2f), remote.Body.Omega);
|
||||
remote.Body.set_velocity(new Vector3(8f, 0f, 0f));
|
||||
remote.Body.Omega = new Vector3(0f, 0f, 3f);
|
||||
remote.Body.Position = entity.Position;
|
||||
remote.Body.State = record.FinalPhysicsState;
|
||||
fixture.Live.SetRemoteMotionRuntime(Guid, remote);
|
||||
PhysicsBody body = remote.Body;
|
||||
|
||||
record.FinalPhysicsState = MissileState;
|
||||
|
|
@ -1139,11 +1139,10 @@ public sealed class ProjectileControllerTests
|
|||
velocity: new Vector3(float.NaN, 0f, 0f));
|
||||
WorldEntity entity = record.WorldEntity!;
|
||||
record.FinalPhysicsState = PhysicsStateFlags.ReportCollisions;
|
||||
var remote = new AcDream.Runtime.Physics.RemoteMotion();
|
||||
RemotePhysicsBodyInitializer.Initialize(remote.Body, record);
|
||||
var remote =
|
||||
fixture.Live.GetOrCreateRemoteMotionRuntime(Guid);
|
||||
remote.Body.Position = entity.Position;
|
||||
remote.Body.Orientation = entity.Rotation;
|
||||
fixture.Live.SetRemoteMotionRuntime(Guid, remote);
|
||||
|
||||
Assert.True(float.IsNaN(record.Snapshot.Physics!.Value.Velocity!.Value.X));
|
||||
Assert.Equal(Vector3.Zero, remote.Body.Velocity);
|
||||
|
|
@ -1165,12 +1164,11 @@ public sealed class ProjectileControllerTests
|
|||
LiveEntityRecord record = fixture.Spawn(instance: 1);
|
||||
WorldEntity entity = record.WorldEntity!;
|
||||
record.FinalPhysicsState = PhysicsStateFlags.ReportCollisions;
|
||||
var remote = new AcDream.Runtime.Physics.RemoteMotion();
|
||||
RemotePhysicsBodyInitializer.Initialize(remote.Body, record);
|
||||
var remote =
|
||||
fixture.Live.GetOrCreateRemoteMotionRuntime(Guid);
|
||||
remote.Body.Position = entity.Position;
|
||||
remote.Body.Orientation = entity.Rotation;
|
||||
remote.Body.Velocity = new Vector3(float.PositiveInfinity, 0f, 0f);
|
||||
fixture.Live.SetRemoteMotionRuntime(Guid, remote);
|
||||
|
||||
record.FinalPhysicsState = MissileState;
|
||||
Assert.True(fixture.Controller.ApplyAuthoritativeState(
|
||||
|
|
@ -1189,8 +1187,9 @@ public sealed class ProjectileControllerTests
|
|||
LiveEntityRecord record = fixture.Spawn(instance: 1);
|
||||
Assert.True(fixture.Controller.TryBind(record, ProjectileSetup(), 1.0));
|
||||
PhysicsBody body = record.PhysicsBody!;
|
||||
var remote = new AcDream.Runtime.Physics.RemoteMotion(body);
|
||||
fixture.Live.SetRemoteMotionRuntime(Guid, remote);
|
||||
var remote =
|
||||
fixture.Live.GetOrCreateRemoteMotionRuntime(Guid);
|
||||
Assert.Same(body, remote.Body);
|
||||
|
||||
fixture.Live.RebucketLiveEntity(Guid, CellB);
|
||||
Assert.Equal(CellB, remote.CellId);
|
||||
|
|
|
|||
|
|
@ -19,12 +19,12 @@ public sealed class RemoteTeleportControllerTests
|
|||
public void Unregister(WorldEntity entity) { }
|
||||
}
|
||||
|
||||
private sealed class BodyOnlyRemote(PhysicsBody body) : ILiveEntityRemoteMotionRuntime
|
||||
private sealed class BodyOnlyRemote(PhysicsBody body) : IRuntimeRemoteMotion
|
||||
{
|
||||
public PhysicsBody Body { get; } = body;
|
||||
}
|
||||
|
||||
private sealed class MutablePlacementRemote(PhysicsBody body) : ILiveEntityRemotePlacementRuntime
|
||||
private sealed class MutablePlacementRemote(PhysicsBody body) : IRuntimeRemotePlacement
|
||||
{
|
||||
private uint _cellId;
|
||||
private Func<uint>? _readCell;
|
||||
|
|
@ -56,7 +56,7 @@ public sealed class RemoteTeleportControllerTests
|
|||
|
||||
private sealed class AlternatingBodyRemote(
|
||||
PhysicsBody first,
|
||||
PhysicsBody later) : ILiveEntityRemotePlacementRuntime
|
||||
PhysicsBody later) : IRuntimeRemotePlacement
|
||||
{
|
||||
private int _reads;
|
||||
public PhysicsBody Body => _reads++ == 0 ? first : later;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue