Реализован InputController

-В него можно удобно добавлять биндинги
This commit is contained in:
Сергей Бондарь 2026-06-10 12:30:03 +03:00
parent a4912f5151
commit 27f1884692
2 changed files with 79 additions and 0 deletions

View File

@ -0,0 +1,77 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class InputController : MonoBehaviour
{
public List<SignalBinding> Bindings;
private bool initialized = false;
private bool polling = false;
public void Init(bool startPolling)
{
if(Bindings == null)
{
Debug.LogError("Биндинги не назначены", this);
return;
}
polling = startPolling;
initialized = true;
}
public void StartPolling() => polling = true;
public void StopPolling() => polling = false;
private void Update()
{
if (!(initialized && polling)) return;
foreach (var binding in Bindings)
if (binding.IsTriggered()) binding.Perform();
}
[System.Serializable]
public class SignalBinding
{
private static readonly Dictionary<ButtonState, System.Func<InSignal, bool>> SignalChecks = new()
{
[ButtonState.Down] = s => In.GetButtonDown(s),
[ButtonState.Up] = s => In.GetButtonUp(s),
[ButtonState.Pressed] = s => In.GetButton(s),
};
private static readonly Dictionary<ButtonState, System.Func<KeyCode, bool>> KeyboardChecks = new()
{
[ButtonState.Down] = k => Input.GetKeyDown(k),
[ButtonState.Up] = k => Input.GetKeyUp(k),
[ButtonState.Pressed] = k => Input.GetKey(k),
};
public InputMode Mode;
public InSignal Signal;
public KeyCode KeyboardKey;
public ButtonState RequiredButtonState;
public UnityEvent Callback;
public bool IsTriggered()
{
bool signalActive = SignalChecks[RequiredButtonState](Signal);
bool keyboardActive = KeyboardChecks[RequiredButtonState](KeyboardKey);
return Mode switch
{
InputMode.OnlySignal => signalActive,
InputMode.OnlyKeyboard => keyboardActive,
InputMode.Both => signalActive || keyboardActive,
_ => false
};
}
public void Perform() => Callback?.Invoke();
}
public enum InputMode { OnlySignal, OnlyKeyboard, Both }
public enum ButtonState { Down, Up, Pressed }
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: e7daf9cad9d628e4690c6795a052b6d9