54 lines
1.8 KiB
C#
54 lines
1.8 KiB
C#
using GameCore.Input.Interfaces;
|
|
using Godot;
|
|
using GameCoreMath = GameCore.Math.Vector3;
|
|
|
|
namespace CryptonymThunder.Code.Services;
|
|
|
|
public class GodotInputService : IInputService
|
|
{
|
|
private Vector2 _mouseDeltaAccumulator = Vector2.Zero;
|
|
private const float MouseSensitivity = 0.002f;
|
|
|
|
public bool IsFiring { get; private set; }
|
|
public bool IsInteracting { get; private set; }
|
|
public bool IsJumping { get; private set; }
|
|
public GameCoreMath MoveDirection { get; private set; }
|
|
public GameCoreMath LookDirection { get; private set; }
|
|
public bool IsSwapWeaponNext { get; private set; }
|
|
public bool IsSwapWeaponPrevious { get; private set; }
|
|
|
|
public void HandleInputEvent(InputEvent e)
|
|
{
|
|
if (e is InputEventMouseMotion mouseMotion)
|
|
{
|
|
_mouseDeltaAccumulator += mouseMotion.Relative;
|
|
}
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
var godotInputVector = Input.GetVector("left", "right", "forward", "backward");
|
|
MoveDirection = new GameCoreMath(godotInputVector.X, 0f, godotInputVector.Y);
|
|
|
|
LookDirection = new GameCoreMath(
|
|
-_mouseDeltaAccumulator.Y * MouseSensitivity,
|
|
-_mouseDeltaAccumulator.X * MouseSensitivity,
|
|
0f);
|
|
|
|
_mouseDeltaAccumulator = Vector2.Zero;
|
|
|
|
IsJumping = Input.IsActionJustPressed("jump");
|
|
IsFiring = Input.IsActionPressed("fire");
|
|
IsInteracting = Input.IsActionPressed("interact");
|
|
IsSwapWeaponNext = Input.IsActionJustPressed("swap_weapon_next");
|
|
IsSwapWeaponPrevious = Input.IsActionJustPressed("swap_weapon_previous");
|
|
}
|
|
|
|
public void LateUpdate()
|
|
{
|
|
LookDirection = GameCoreMath.Zero;
|
|
|
|
IsSwapWeaponNext = false;
|
|
IsSwapWeaponPrevious = false;
|
|
}
|
|
} |