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:
parent
fce8e7b18e
commit
2aee33569f
19 changed files with 1255 additions and 335 deletions
|
|
@ -355,6 +355,22 @@ public sealed class RuntimeEntityDirectory
|
|||
record.RemoteMotionBindingInProgress = value;
|
||||
}
|
||||
|
||||
public void SetProjectile(
|
||||
RuntimeEntityRecord record,
|
||||
IRuntimeProjectile? projectile)
|
||||
{
|
||||
EnsureKnown(record);
|
||||
record.Projectile = projectile;
|
||||
}
|
||||
|
||||
public void SetProjectileBindingInProgress(
|
||||
RuntimeEntityRecord record,
|
||||
bool value)
|
||||
{
|
||||
EnsureKnown(record);
|
||||
record.ProjectileBindingInProgress = value;
|
||||
}
|
||||
|
||||
public void SetRequiresRemotePlacementRuntime(
|
||||
RuntimeEntityRecord record,
|
||||
bool value)
|
||||
|
|
|
|||
|
|
@ -97,6 +97,20 @@ public sealed class RuntimeEntityObjectLifetime : IDisposable
|
|||
Events = new RuntimeEntityObjectEventStream(Entities, Objects);
|
||||
}
|
||||
|
||||
internal RuntimeEntityObjectLifetime(
|
||||
PhysicsEngine physicsEngine,
|
||||
uint firstLocalEntityId = RuntimeEntityDirectory.FirstLocalEntityId)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(physicsEngine);
|
||||
Entities = new RuntimeEntityDirectory(firstLocalEntityId);
|
||||
Physics = new RuntimePhysicsState(Entities, physicsEngine);
|
||||
Objects = new ClientObjectTable();
|
||||
var views = new RuntimeEntityObjectViews(Entities, Objects);
|
||||
EntityView = views.Entities;
|
||||
InventoryView = views.Inventory;
|
||||
Events = new RuntimeEntityObjectEventStream(Entities, Objects);
|
||||
}
|
||||
|
||||
public RuntimeEntityDirectory Entities { get; }
|
||||
public RuntimePhysicsState Physics { get; }
|
||||
public ClientObjectTable Objects { get; }
|
||||
|
|
@ -344,6 +358,8 @@ public sealed class RuntimeEntityObjectLifetime : IDisposable
|
|||
Physics.RemoveSpatialProjection(canonical);
|
||||
Entities.SetRemoteMotion(canonical, null);
|
||||
Entities.SetRemoteMotionBindingInProgress(canonical, false);
|
||||
Entities.SetProjectile(canonical, null);
|
||||
Entities.SetProjectileBindingInProgress(canonical, false);
|
||||
Entities.SetRequiresRemotePlacementRuntime(canonical, false);
|
||||
Entities.SetPhysicsHost(canonical, null);
|
||||
Entities.SetPhysicsBody(canonical, null);
|
||||
|
|
|
|||
|
|
@ -71,6 +71,8 @@ public sealed class RuntimeEntityRecord
|
|||
public bool PhysicsBodyAcquisitionInProgress { get; internal set; }
|
||||
public IRuntimeRemoteMotion? RemoteMotion { get; internal set; }
|
||||
public bool RemoteMotionBindingInProgress { get; internal set; }
|
||||
public IRuntimeProjectile? Projectile { get; internal set; }
|
||||
public bool ProjectileBindingInProgress { get; internal set; }
|
||||
public bool RequiresRemotePlacementRuntime { get; internal set; }
|
||||
public AcDream.Core.Physics.Motion.IPhysicsObjHost? PhysicsHost { get; internal set; }
|
||||
public ulong PositionAuthorityVersion { get; private set; }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue