using Godot; using GdUnit4; using static GdUnit4.Assertions; using Movementtests.systems; namespace Movementtests.tests; [TestSuite, RequireGodotRuntime] public class HeadSystemUnitTest { private HeadSystem _head; [BeforeTest] public void SetupTest() { _head = new HeadSystem(); _head._camera = new Camera3D(); _head.AddChild(_head._camera); _head._cameraAnchor = new Marker3D(); _head.AddChild(_head._cameraAnchor); _head._fpRig = new Node3D(); _head.AddChild(_head._fpRig); _head._fpDisplacedRig = new Node3D(); _head.AddChild(_head._fpDisplacedRig); } [AfterTest] public void CleanupTest() { _head?.Free(); } [TestCase] public void TestResetHeadBobbing() { _head._bobbingAccumulator = 10.0f; _head.ResetHeadBobbing(); AssertFloat(_head._bobbingAccumulator).IsEqual(0.0f); } [TestCase] public void TestComputeHowMuchInputForward() { Vector3 forwardInput = new Vector3(0, 0, -1); AssertFloat(_head.ComputeHowMuchInputForward(forwardInput)).IsEqual(1.0f); Vector3 backwardInput = new Vector3(0, 0, 1); AssertFloat(_head.ComputeHowMuchInputForward(backwardInput)).IsEqual(-1.0f); } [TestCase] public void TestComputeHowMuchInputSideways() { Vector3 rightInput = new Vector3(1, 0, 0); AssertFloat(_head.ComputeHowMuchInputSideways(rightInput)).IsEqual(1.0f); Vector3 leftInput = new Vector3(-1, 0, 0); AssertFloat(_head.ComputeHowMuchInputSideways(leftInput)).IsEqual(-1.0f); } [TestCase] public void TestGetForwardHorizontalVector() { Vector3 forward = _head.GetForwardHorizontalVector(); AssertVector(forward).IsEqualApprox(Vector3.Back, new Vector3(0.001f, 0.001f, 0.001f)); } [TestCase] public void TestLookAroundRotation() { var inputs = new HeadSystem.CameraParameters( Delta: 0.016, LookDir: new Vector2(1, 0), PlayerInput: Vector3.Zero, PlayerVelocity: Vector3.Zero, WallContactPoint: Vector3.Zero, SensitivitMultiplier: 1.0f, WithCameraJitter: false, WithCameraBobbing: false, BobbingMultiplier: 1.0f, FovMultiplier: 1.0f ); float initialY = _head.Rotation.Y; _head.LookAround(inputs); AssertFloat(_head.Rotation.Y).IsEqual(initialY + 1.0f); } }