50 lines
1.4 KiB
C#
50 lines
1.4 KiB
C#
using System.Threading.Tasks;
|
|
using Godot;
|
|
using GodotStateCharts;
|
|
|
|
namespace Movementtests.tests;
|
|
|
|
using GdUnit4;
|
|
using static GdUnit4.Assertions;
|
|
|
|
[TestSuite, RequireGodotRuntime]
|
|
public class PlayerInteractionsTest
|
|
{
|
|
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);
|
|
|
|
[BeforeTest]
|
|
public void SetupTest()
|
|
{
|
|
_runner = ISceneRunner.Load("res://tests/player/interactions/player_interactions_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);
|
|
}
|
|
} |