feat(runtime): commit dormant SetPosition activation
This commit is contained in:
parent
99f867f053
commit
5785a07b3e
13 changed files with 4674 additions and 111 deletions
|
|
@ -32,6 +32,8 @@ public readonly record struct RuntimePhysicsOwnershipSnapshot(
|
|||
int PendingCollisionReportCount,
|
||||
int LeavingCollisionReportOwnerCount,
|
||||
int CollisionReportAdmissionBlockedOwnerCount,
|
||||
int PendingCollisionSetPositionDispatchCount,
|
||||
int PendingShadowSetPositionDispatchCount,
|
||||
bool IsCollisionReportDispatching,
|
||||
int CollisionAdmissionCount,
|
||||
int CollisionGenerationCount,
|
||||
|
|
@ -66,6 +68,8 @@ public readonly record struct RuntimePhysicsOwnershipSnapshot(
|
|||
&& PendingCollisionReportCount == 0
|
||||
&& LeavingCollisionReportOwnerCount == 0
|
||||
&& CollisionReportAdmissionBlockedOwnerCount == 0
|
||||
&& PendingCollisionSetPositionDispatchCount == 0
|
||||
&& PendingShadowSetPositionDispatchCount == 0
|
||||
&& !IsCollisionReportDispatching
|
||||
&& CollisionAdmissionCount == 0
|
||||
&& CollisionGenerationCount == 0
|
||||
|
|
@ -1162,6 +1166,8 @@ public sealed class RuntimePhysicsState : IDisposable
|
|||
collisionReports.PendingReportCount,
|
||||
collisionReports.LeavingOwnerCount,
|
||||
collisionReports.AdmissionBlockedOwnerCount,
|
||||
collisionReports.PendingSetPositionDispatchCount,
|
||||
Engine.ShadowObjects.PendingSetPositionDispatchCount,
|
||||
collisionReports.IsDispatching,
|
||||
_collisionAdmissions.Count,
|
||||
_collisionGenerations.Count,
|
||||
|
|
@ -2529,6 +2535,18 @@ public sealed class RuntimePhysicsState : IDisposable
|
|||
TrimCollisionOwnerJournal();
|
||||
}
|
||||
|
||||
internal bool TryPrepareSpatialRootAdmission(RuntimeEntityRecord record)
|
||||
{
|
||||
EnsureNotDisposed();
|
||||
ArgumentNullException.ThrowIfNull(record);
|
||||
if (record.Key is null || !Entities.IsCurrent(record))
|
||||
return false;
|
||||
_spatialRoots.EnsureCapacity(_spatialRoots.Count + 1);
|
||||
_spatialRemotes.EnsureCapacity(_spatialRemotes.Count + 1);
|
||||
_spatialProjectiles.EnsureCapacity(_spatialProjectiles.Count + 1);
|
||||
return Entities.IsCurrent(record);
|
||||
}
|
||||
|
||||
internal ulong ExpectedCollisionGeneration(uint exactCellId)
|
||||
{
|
||||
uint landblockId = CanonicalLandblock(exactCellId);
|
||||
|
|
@ -2671,6 +2689,32 @@ public sealed class RuntimePhysicsState : IDisposable
|
|||
return true;
|
||||
}
|
||||
|
||||
internal bool IsCollisionEvaluationFatalAuthorityCurrent(
|
||||
in RuntimeCollisionEvaluationAuthority authority)
|
||||
{
|
||||
if (!authority.IsValid
|
||||
|| _collisionWorldAuthority != authority.CollisionWorldAuthority
|
||||
|| !ReferenceEquals(ObjectTable, authority.ObjectTable)
|
||||
|| ObjectTableBindingAuthority
|
||||
!= authority.ObjectTableBindingAuthority
|
||||
|| ObjectTableAuthority != authority.ObjectTableAuthority)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
foreach (RuntimeCollisionGenerationAuthority generation
|
||||
in authority.Generations)
|
||||
{
|
||||
if (generation.LandblockId == 0u
|
||||
|| _collisionAdmissions.ContainsKey(generation.LandblockId)
|
||||
|| CollisionGenerationAuthority(generation.LandblockId)
|
||||
!= generation.Generation)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
internal bool HandleSetPositionCollisions(
|
||||
RuntimeEntityRecord record,
|
||||
ulong positionAuthorityVersion,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue