Files
cryptonhym-thunder/Code/Services/GodotInputService.cs

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;
}
}