Restore the named-retail object update order across local, remote, static, projectile, animation, shadow, teleport, and effect lifetimes. Separate authoritative root commits from spatial rebucketing, preserve per-owner hook/FIFO ordering, and remove update-path allocations with exact lifecycle and residency gates. Add deterministic conformance, adversarial lifetime, GUID-reuse, pending-cell, quaternion, timestamp, and allocation coverage. Release build is warning-free and all 6,446 tests pass with five intentional skips; retail, architecture, and adversarial reviews are clean. Co-authored-by: OpenAI Codex <codex@openai.com>
62 lines
2 KiB
C#
62 lines
2 KiB
C#
namespace AcDream.Core.Physics;
|
|
|
|
/// <summary>
|
|
/// Executes the manager tail of retail
|
|
/// <c>CPhysicsObj::UpdateObjectInternal</c> (<c>0x005156B0</c>).
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// The order is observable. In particular, animation completion hooks have
|
|
/// already run when this tail begins, so MoveTo may react to a completion in
|
|
/// the same object quantum. A null callback represents an absent retail
|
|
/// manager; it is not a separate execution path.
|
|
/// </remarks>
|
|
public static class RetailObjectManagerTail
|
|
{
|
|
/// <summary>
|
|
/// Allocation-free production overload for the concrete retail manager
|
|
/// owners. DetectionManager is not ported, so its ordered slot is empty.
|
|
/// </summary>
|
|
public static void Run(
|
|
Motion.TargetManager? target,
|
|
Motion.MovementManager? movement,
|
|
Motion.MotionTableManager? partArray,
|
|
Motion.PositionManager? position)
|
|
{
|
|
target?.HandleTargetting();
|
|
movement?.UseTime();
|
|
partArray?.UseTime();
|
|
position?.UseTime();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Allocation-free local-player overload. Its target action and PartArray
|
|
/// completion action are cached ownership seams; the other managers are
|
|
/// passed as concrete objects rather than allocating bound delegates per
|
|
/// quantum.
|
|
/// </summary>
|
|
public static void Run(
|
|
Action? handleTargeting,
|
|
Motion.MovementManager? movement,
|
|
Action? partArrayHandleMovement,
|
|
Motion.PositionManager? position)
|
|
{
|
|
handleTargeting?.Invoke();
|
|
movement?.UseTime();
|
|
partArrayHandleMovement?.Invoke();
|
|
position?.UseTime();
|
|
}
|
|
|
|
public static void Run(
|
|
Action? checkDetection,
|
|
Action? handleTargeting,
|
|
Action? movementUseTime,
|
|
Action? partArrayHandleMovement,
|
|
Action? positionUseTime)
|
|
{
|
|
checkDetection?.Invoke();
|
|
handleTargeting?.Invoke();
|
|
movementUseTime?.Invoke();
|
|
partArrayHandleMovement?.Invoke();
|
|
positionUseTime?.Invoke();
|
|
}
|
|
}
|