feat(runtime): own initial create residence transaction

This commit is contained in:
Erik 2026-08-01 19:35:08 +02:00
parent 74103f75b5
commit 38fd4b8dc9
10 changed files with 3031 additions and 17 deletions

View file

@ -118,6 +118,35 @@ public class PhysicsTimestampGateTests
Assert.True(gate.TryAcceptMovementEvent(4, 0x9011, 2));
}
[Fact]
public void PreviewCreateObject_MatchesSeedDispositionWithoutMutation()
{
var gate = new PhysicsTimestampGate();
Assert.Equal(CreateObjectTimestampDisposition.InitialGeneration,
gate.PreviewCreateObject(instance: 7));
Assert.Equal(CreateObjectTimestampDisposition.InitialGeneration,
gate.SeedForCreateObject(10, 20, 30, 40, 50, 60, 70, 80, 7));
Assert.Equal(CreateObjectTimestampDisposition.ExistingGeneration,
gate.PreviewCreateObject(instance: 7));
Assert.Equal(CreateObjectTimestampDisposition.NewGeneration,
gate.PreviewCreateObject(instance: 8));
Assert.Equal(CreateObjectTimestampDisposition.StaleGeneration,
gate.PreviewCreateObject(instance: 6));
// Preview is observational: all timestamp channels still compare
// against the original instance-seven seed afterward.
Assert.True(gate.TryAcceptMovementEvent(
instance: 7,
movement: 21,
serverControlledMove: 60));
Assert.False(gate.TryAcceptMovementEvent(
instance: 8,
movement: 22,
serverControlledMove: 60));
}
[Fact]
public void SameGenerationCreateObject_MixedChannelsAreAcceptedIndependently()
{

File diff suppressed because it is too large Load diff

View file

@ -48,7 +48,7 @@ public sealed class RuntimeAuthoritativePositionRouteClassifierTests
[Theory]
[InlineData(RuntimeCreateResidenceKind.Parented)]
[InlineData(RuntimeCreateResidenceKind.PickedUp)]
internal void NewParentedOrPickedUpCreate_LeavesWorldAndAwaitsPosition(
internal void NewParentedOrPickedUpCreate_RemainsCelllessAndAwaitsPosition(
RuntimeCreateResidenceKind residence)
{
RuntimeAuthoritativePositionRoute route =
@ -62,7 +62,7 @@ public sealed class RuntimeAuthoritativePositionRouteClassifierTests
Assert.Equal(RuntimeAuthoritativePositionDisposition.AwaitFreshPosition,
route.Disposition);
Assert.True(route.LeaveWorld);
Assert.False(route.LeaveWorld);
Assert.False(route.PerformsSetPosition);
}
@ -294,7 +294,7 @@ public sealed class RuntimeAuthoritativePositionRouteClassifierTests
RuntimeAuthoritativePositionRoute route = ClassifyLocal(
Authority(ushort.MaxValue, 0));
Assert.Equal(RuntimeAuthoritativePositionDisposition.SetPosition,
Assert.Equal(RuntimeAuthoritativePositionDisposition.SetPositionSimple,
route.Disposition);
Assert.Equal(0x1012u, (uint)route.SetPositionFlags);
Assert.True(route.UnparentBeforeRouting);