acdream/tests/AcDream.Core.Tests/Physics/RetailPhysicsStateTransitionTests.cs
Erik 1e98d81448 feat(vfx): port retail hidden and teleport presentation
Preserve canonical live-object ownership across Hidden transitions and remote teleport placement so effects, collision, streaming, and targeting remain synchronized.
2026-07-14 14:59:48 +02:00

77 lines
3 KiB
C#

using AcDream.Core.Physics;
namespace AcDream.Core.Tests.Physics;
public sealed class RetailPhysicsStateTransitionTests
{
[Fact]
public void ConstructorState_MatchesRetailAndIsNotHidden()
{
Assert.Equal(0x00400C08u, (uint)RetailPhysicsStateTransitions.ConstructorState);
Assert.Equal(
PhysicsStateFlags.None,
RetailPhysicsStateTransitions.ConstructorState & PhysicsStateFlags.Hidden);
}
[Fact]
public void VisibleToHidden_PlaysHiddenShapeAndRewritesCollisionBits()
{
PhysicsStateFlags requested = PhysicsStateFlags.Hidden
| PhysicsStateFlags.ReportCollisions
| PhysicsStateFlags.Lighting;
RetailPhysicsStateTransition result = RetailPhysicsStateTransitions.Apply(
RetailPhysicsStateTransitions.ConstructorState,
requested);
Assert.Equal(RetailHiddenTransition.BecameHidden, result.HiddenTransition);
Assert.False(result.LightingChanged);
Assert.Equal(PhysicsStateFlags.None, result.FinalState & PhysicsStateFlags.ReportCollisions);
Assert.NotEqual(PhysicsStateFlags.None, result.FinalState & PhysicsStateFlags.IgnoreCollisions);
Assert.NotEqual(PhysicsStateFlags.None, result.FinalState & PhysicsStateFlags.Hidden);
}
[Fact]
public void HiddenToVisible_RestoresReportCollisionsEvenWhenWireOmitsIt()
{
PhysicsStateFlags hidden = PhysicsStateFlags.Hidden
| PhysicsStateFlags.IgnoreCollisions;
RetailPhysicsStateTransition result = RetailPhysicsStateTransitions.Apply(
hidden,
PhysicsStateFlags.None);
Assert.Equal(RetailHiddenTransition.BecameVisible, result.HiddenTransition);
Assert.Equal(PhysicsStateFlags.None, result.FinalState & PhysicsStateFlags.Hidden);
Assert.Equal(PhysicsStateFlags.None, result.FinalState & PhysicsStateFlags.IgnoreCollisions);
Assert.NotEqual(PhysicsStateFlags.None, result.FinalState & PhysicsStateFlags.ReportCollisions);
}
[Fact]
public void IdenticalHiddenState_DoesNotReplayTransition()
{
PhysicsStateFlags state = PhysicsStateFlags.Hidden
| PhysicsStateFlags.IgnoreCollisions;
RetailPhysicsStateTransition result = RetailPhysicsStateTransitions.Apply(state, state);
Assert.Equal(RetailHiddenTransition.None, result.HiddenTransition);
Assert.False(result.LightingChanged);
Assert.False(result.NoDrawChanged);
Assert.Equal(state, result.FinalState);
}
[Fact]
public void LightingNoDrawAndHiddenChangeFlags_AreDerivedFromLowWord()
{
RetailPhysicsStateTransition result = RetailPhysicsStateTransitions.Apply(
PhysicsStateFlags.None,
PhysicsStateFlags.Lighting
| PhysicsStateFlags.NoDraw
| PhysicsStateFlags.Hidden);
Assert.True(result.LightingChanged);
Assert.True(result.NoDrawChanged);
Assert.Equal(RetailHiddenTransition.BecameHidden, result.HiddenTransition);
}
}