98 lines
3.1 KiB
C#
98 lines
3.1 KiB
C#
using System.Threading.Tasks;
|
|
using Godot;
|
|
|
|
namespace Movementtests.tests;
|
|
|
|
using GdUnit4;
|
|
using static GdUnit4.Assertions;
|
|
|
|
[TestSuite, RequireGodotRuntime]
|
|
public class PlayerMovementTest
|
|
{
|
|
private ISceneRunner _runner;
|
|
private Node _scene;
|
|
private PlayerController _player;
|
|
|
|
private readonly float _tolerance = 0.01f;
|
|
private readonly Vector3 _vectorTolerance = new Vector3(0.01f, 0.01f, 0.01f);
|
|
|
|
[Before]
|
|
public void Setup() {}
|
|
[After]
|
|
public void Cleanup() {}
|
|
|
|
[BeforeTest]
|
|
public void SetupTest()
|
|
{
|
|
_runner = ISceneRunner.Load("res://tests/player_movement/player_movement_scene.tscn");
|
|
|
|
_scene = _runner.Scene()!;
|
|
var player = _scene.FindChild("Player") as PlayerController;
|
|
_player = player!;
|
|
}
|
|
[AfterTest]
|
|
public void CleanupTest() {}
|
|
|
|
[TestCase("BaseLocation")]
|
|
public async Task PlayerMoveForward(string markerName)
|
|
{
|
|
var marker = _scene.FindChild(markerName) as Marker3D;
|
|
AssertObject(marker).IsNotNull();
|
|
_player.GlobalPosition = marker!.GlobalPosition;
|
|
await _runner.AwaitIdleFrame();
|
|
|
|
var startPos = _player.GlobalPosition;
|
|
|
|
_runner.SimulateKeyPress(Key.W);
|
|
await _runner.AwaitMillis(300);
|
|
_runner.SimulateKeyRelease(Key.W);
|
|
|
|
var endPos = _player.GlobalPosition;
|
|
var direction = startPos.DirectionTo(endPos);
|
|
AssertVector(direction).IsEqualApprox(Vector3.Forward, _vectorTolerance);
|
|
}
|
|
|
|
[TestCase("BaseLocation")]
|
|
public async Task PlayerJump(string markerName)
|
|
{
|
|
var marker = _scene.FindChild(markerName) as Marker3D;
|
|
AssertObject(marker).IsNotNull();
|
|
_player.GlobalPosition = marker!.GlobalPosition;
|
|
await _runner.AwaitIdleFrame();
|
|
|
|
var startPos = _player.GlobalPosition;
|
|
|
|
_runner.SimulateKeyPress(Key.Space);
|
|
await _runner.AwaitMillis(100);
|
|
_runner.SimulateKeyRelease(Key.Space);
|
|
|
|
var endPos = _player.GlobalPosition;
|
|
var direction = startPos.DirectionTo(endPos);
|
|
AssertVector(direction).IsEqualApprox(Vector3.Up, _vectorTolerance);
|
|
AssertVector(_player.Velocity.Normalized()).IsEqualApprox(Vector3.Up, _vectorTolerance);
|
|
|
|
await _runner.AwaitMillis(500);
|
|
endPos = _player.GlobalPosition;
|
|
AssertVector(endPos - startPos).IsEqualApprox(Vector3.Zero, _vectorTolerance);
|
|
}
|
|
|
|
[TestCase("MantleLocation1")]
|
|
public async Task PlayerMantle(string markerName)
|
|
{
|
|
var marker = _scene.FindChild(markerName) as Marker3D;
|
|
AssertObject(marker).IsNotNull();
|
|
_player.GlobalPosition = marker!.GlobalPosition;
|
|
await _runner.AwaitMillis(100);
|
|
|
|
var startPos = _player.GlobalPosition;
|
|
|
|
_runner.SimulateKeyPress(Key.Space);
|
|
await _runner.AwaitMillis(100);
|
|
_runner.SimulateKeyRelease(Key.Space);
|
|
await _runner.AwaitMillis(300);
|
|
|
|
var endPos = _player.GlobalPosition;
|
|
AssertFloat((endPos - startPos).Length()).IsGreater(0.0f);
|
|
AssertFloat(endPos.Y).IsEqualApprox(1.0f, _tolerance);
|
|
}
|
|
} |