Files
Car-Simulation/Car simulation/Inputs/CarInputHandler.cs
2026-02-16 18:32:48 +01:00

83 lines
2.8 KiB
C#

using SFML.Window;
namespace Car_simulation.Input
{
public class CarInputHandler
{
private Dictionary<Keyboard.Key, bool> _previousKeyStates = new();
private Dictionary<Keyboard.Key, bool> _currentKeyStates = new();
public CarInputState InputState { get; private set; } = new CarInputState();
public CarInputHandler()
{
InitializeTrackedKeys();
}
private void InitializeTrackedKeys()
{
var keys = new[] {
Keyboard.Key.W, Keyboard.Key.S,
Keyboard.Key.Down, Keyboard.Key.Up, Keyboard.Key.Space,
Keyboard.Key.Escape,
Keyboard.Key.Right, Keyboard.Key.Left
};
foreach (var key in keys)
{
_previousKeyStates[key] = false;
_currentKeyStates[key] = false;
}
}
public void OnKeyPressed(KeyEventArgs e)
{
if (_currentKeyStates.ContainsKey(e.Code))
_currentKeyStates[e.Code] = true;
}
public void OnKeyReleased(KeyEventArgs e)
{
if (_currentKeyStates.ContainsKey(e.Code))
_currentKeyStates[e.Code] = false;
}
public void ProcessInput(float deltaTime)
{
// Update input state based on key states
InputState.ThrottleChange = _currentKeyStates[Keyboard.Key.W] ? deltaTime * 4f : -deltaTime * 8f;
InputState.BrakeChange = _currentKeyStates[Keyboard.Key.S] ? deltaTime * 4f : -deltaTime * 8f;
InputState.ClutchUp = _currentKeyStates[Keyboard.Key.Up];
InputState.ClutchDown = _currentKeyStates[Keyboard.Key.Down];
InputState.GearUp = _currentKeyStates[Keyboard.Key.Right] && !_previousKeyStates[Keyboard.Key.Right];
InputState.GearDown = _currentKeyStates[Keyboard.Key.Left] && !_previousKeyStates[Keyboard.Key.Left];
InputState.ToggleForceClutch = _currentKeyStates[Keyboard.Key.Space] && !_previousKeyStates[Keyboard.Key.Space];
InputState.Quit = _currentKeyStates[Keyboard.Key.Escape];
UpdatePreviousKeyStates();
}
private void UpdatePreviousKeyStates()
{
foreach (var key in _currentKeyStates.Keys.ToList())
{
_previousKeyStates[key] = _currentKeyStates[key];
}
}
}
public class CarInputState
{
public float ThrottleChange { get; set; }
public float BrakeChange { get; set; }
public bool ClutchUp { get; set; }
public bool ClutchDown { get; set; }
public bool GearUp { get; set; }
public bool GearDown { get; set; }
public bool ToggleForceClutch { get; set; }
public bool Quit { get; set; }
}
}