2026-07-14 11:14:13 +03:00

102 lines
5.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
/// <summary>
/// Статический фасад для унифицированного доступа к системе ввода.
/// Предоставляет глобальный интерфейс для работы с управлением независимо от выбранного источника.
/// </summary>
/// <remarks>
/// Этот класс является точкой входа для всей игровой логики, работающей с вводом.
/// Автоматически инициализирует выбранный источник управления (клавиатура или COM-порт)
/// и предоставляет статические методы для удобного доступа из любого места кода.
///
/// Использование:
/// 1. Настройте тип ввода в инспекторе
/// 2. Вызовите Initialize() при старте игры
/// 3. Используйте статические методы для проверки ввода
/// </remarks>
public class In : MonoBehaviour
{
[Header("Выбор источника управления")]
//[SerializeField] private InputSourceType inputType;
static InputSource source;
/// <summary>
/// Инициализирует систему ввода на основе выбранного типа.
/// Должен быть вызван один раз при запуске приложения.
/// </summary>
/// <remarks>
/// Создает соответствующий экземпляр InputSource:
/// - KeyboardInput для тестирования на клавиатуре
/// - COMinput для работы с периферийной платой
/// </remarks>
public void Initialize()
{
/* source = inputType switch
{
InputSourceType.Keyboard => new KeyboardInput(),
InputSourceType.COM => new COMinput(),
_ => throw new System.NotImplementedException()
};*/
//ТЕСТЫ
#if UNITY_EDITOR
source = new KeyboardInput();
#else
source = new COMinput();
#endif
//source = new COMinput();
var success = source.Initialize();
if (!success) Debug.LogWarning("Не удалось проинициалзировать источник управления.");
}
// ================================================================================
// СТАТИЧЕСКИЕ МЕТОДЫ ДЛЯ РАБОТЫ С ФИЗИЧЕСКИМИ ПИНАМИ
// ================================================================================
/// <summary>Проверяет состояние конкретной кнопки по её физическому пину</summary>
public static bool GetButton(ButtonPinMapping button) => source.GetButton(button);
/// <summary>Проверяет нажатие кнопки по пину в текущем кадре</summary>
public static bool GetButtonDown(ButtonPinMapping button) => source.GetButtonDown(button);
/// <summary>Проверяет отпускание кнопки по пину в текущем кадре</summary>
public static bool GetButtonUp(ButtonPinMapping button) => source.GetButtonUp(button);
/// <summary>Проверяет состояние кнопки по числовому индексу пина</summary>
public static bool GetButton(int pinindex) => source.GetButton(pinindex);
/// <summary>Проверяет нажатие кнопки по индексу пина в текущем кадре</summary>
public static bool GetButtonDown(int pinindex) => source.GetButtonDown(pinindex);
/// <summary>Проверяет отпускание кнопки по индексу пина в текущем кадре</summary>
public static bool GetButtonUp(int pinindex) => source.GetButtonUp(pinindex);
// ================================================================================
// СТАТИЧЕСКИЕ МЕТОДЫ ДЛЯ РАБОТЫ С АБСТРАКТНЫМИ ДЕЙСТВИЯМИ ИГРОКОВ
// ================================================================================
/// <summary>Проверяет состояние действия для любого из игроков</summary>
public static bool GetButtonAnyPlayer(PlayerAction button) => source.GetButtonAnyPlayer(button);
/// <summary>Проверяет начало действия любым игроком в текущем кадре</summary>
public static bool GetButtonDownAnyPlayer(PlayerAction button) => source.GetButtonDownAnyPlayer(button);
/// <summary>Проверяет завершение действия любым игроком в текущем кадре</summary>
public static bool GetButtonUpAnyPlayer(PlayerAction button) => source.GetButtonUpAnyPlayer(button);
/// <summary>Проверяет состояние действия для текущего активного игрока</summary>
public static bool GetButtonCurrentPlayer(PlayerAction button) => source.GetButtonCurrentPlayer(button);
/// <summary>Проверяет начало действия текущим игроком в текущем кадре</summary>
public static bool GetButtonDownCurrentPlayer(PlayerAction button) => source.GetButtonDownCurrentPlayer(button);
/// <summary>Проверяет завершение действия текущим игроком в текущем кадре</summary>
public static bool GetButtonUpCurrentPlayer(PlayerAction button) => source.GetButtonUpCurrentPlayer(button);
public static bool AnyButton() => source.AnyButton();
}