Files
RebootKit/Runtime/Engine/Code/Input/InputService.cs
2025-07-11 14:40:42 +02:00

82 lines
2.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using RebootKit.Engine.Foundation;
using UnityEngine;
using UnityEngine.Assertions;
using UnityEngine.InputSystem;
using Logger = RebootKit.Engine.Foundation.Logger;
namespace RebootKit.Engine.Input {
public class InputState {
public string Name { get; private set; }
public bool HideCursor { get; private set; }
public bool LockCursor { get; private set; }
public InputState(string name, bool hideCursor = false, bool lockCursor = false) {
Name = name;
HideCursor = hideCursor;
LockCursor = lockCursor;
}
}
public class InputService : IService {
static readonly Logger s_Logger = new Logger(nameof(InputService));
readonly Config m_Config;
InputActionAsset m_InputActionAsset;
List<InputState> m_States = new List<InputState>(16);
public InputService(Config config) {
m_Config = config;
m_InputActionAsset = config.inputActionAsset;
}
public void Dispose() {
m_InputActionAsset = null;
}
public void AddState(InputState state) {
Assert.IsFalse(m_States.Contains(state), "State already exists in the input service.");
Assert.IsNotNull(state, "Input state cannot be null.");
Assert.IsNull(m_States.FirstOrDefault(t => t.Name.Equals(state.Name, StringComparison.Ordinal)),
$"State with name '{state.Name}' already exists in the input service.");
m_States.Add(state);
}
public void EnableControls() {
m_InputActionAsset.Enable();
}
public void DisableControls() {
m_InputActionAsset.Disable();
}
public bool AreControlsEnabled() {
return m_InputActionAsset.enabled;
}
public InputAction FindInputAction(string path) {
return m_InputActionAsset.FindAction(path);
}
public void LockCursor() {
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
public void UnlockCursor() {
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
}
[Serializable]
public class Config {
public InputActionAsset inputActionAsset;
}
}
}