92 lines
2.5 KiB
C#
92 lines
2.5 KiB
C#
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);
|
|
}
|
|
}
|