154 lines
3.8 KiB
C#
154 lines
3.8 KiB
C#
using System.Collections.Generic;
|
|
using TMPro;
|
|
using Unity.VisualScripting;
|
|
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
using UnityEngine.InputSystem.HID;
|
|
|
|
public class SettingsPage : MonoBehaviour
|
|
{
|
|
private const string TextNoConnected = "Íå ïîäêëþ÷åíî";
|
|
|
|
[SerializeField] private TMP_Dropdown _dropdownDevices;
|
|
[SerializeField] private TMP_Text _textPreset;
|
|
|
|
[SerializeField] private ButtonSubmenu[] _buttonsSubmenu;
|
|
|
|
[SerializeField] private GameObject _submenuControlElement;
|
|
[SerializeField] private GameObject _submenuNetwork;
|
|
|
|
private List<InputDevice> _devices = new List<InputDevice>();
|
|
private TypeSubmenu _thisSubmenu;
|
|
|
|
private void OnEnable()
|
|
{
|
|
foreach (ButtonSubmenu buttonSubmenu in _buttonsSubmenu)
|
|
{
|
|
buttonSubmenu.OpenSubmenu += OpenSubmenu;
|
|
}
|
|
|
|
_dropdownDevices.onValueChanged.AddListener(SelectJoystick);
|
|
|
|
InputSystem.onDeviceChange += DeviceChange;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
foreach (ButtonSubmenu buttonSubmenu in _buttonsSubmenu)
|
|
{
|
|
buttonSubmenu.OpenSubmenu -= OpenSubmenu;
|
|
}
|
|
|
|
_dropdownDevices.onValueChanged.RemoveListener(SelectJoystick);
|
|
|
|
InputSystem.onDeviceChange -= DeviceChange;
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
ResetDevice();
|
|
}
|
|
|
|
private void DeviceChange(InputDevice device, InputDeviceChange change)
|
|
{
|
|
//Ïåðåïèøè ìåòîä!
|
|
switch (change)
|
|
{
|
|
case InputDeviceChange.Added:
|
|
ResetDevice();
|
|
break;
|
|
case InputDeviceChange.Removed:
|
|
ResetDevice();
|
|
break;
|
|
case InputDeviceChange.Disconnected:
|
|
ResetDevice();
|
|
break;
|
|
case InputDeviceChange.Reconnected:
|
|
ResetDevice();
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
private void ResetDevice()
|
|
{
|
|
//Ïåðåïèøè ìåòîä!
|
|
|
|
var devices = InputSystem.devices;
|
|
|
|
_devices.Clear();
|
|
|
|
foreach (var inputDevice in devices)
|
|
{
|
|
if (inputDevice.description.interfaceName == nameof(HID))
|
|
{
|
|
_devices.Add(inputDevice);
|
|
}
|
|
}
|
|
|
|
_dropdownDevices.ClearOptions();
|
|
|
|
List<TMP_Dropdown.OptionData> data = new List<TMP_Dropdown.OptionData>
|
|
{
|
|
new TMP_Dropdown.OptionData(TextNoConnected)
|
|
};
|
|
|
|
foreach (var device in _devices)
|
|
{
|
|
data.Add(new TMP_Dropdown.OptionData(device.name));
|
|
}
|
|
|
|
_dropdownDevices.AddOptions(data);
|
|
}
|
|
|
|
private void SelectJoystick(int index)
|
|
{
|
|
if (index == 0)
|
|
{
|
|
_textPreset.text = "Òèï:";
|
|
return;
|
|
}
|
|
|
|
InputController.SetDevice(_devices[index - 1]);
|
|
SetPreset(_devices[index - 1]);
|
|
}
|
|
|
|
private void SetPreset(InputDevice inputDevice)
|
|
{
|
|
byte[] bytes = (byte[])inputDevice.ReadValueAsObject();
|
|
|
|
switch (bytes.Length)
|
|
{
|
|
case 8:
|
|
InputController.SetPreset(new InputPreset8());
|
|
_textPreset.text = "Òèï: 8 áàéò";
|
|
break;
|
|
case 20:
|
|
InputController.SetPreset(new InputPreset20());
|
|
_textPreset.text = "Òèï: 20 áàéò";
|
|
break;
|
|
default:
|
|
_textPreset.text = "Òèï: Ìû òàêîå íå çíàåì";
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void OpenSubmenu(TypeSubmenu typeSubmenu)
|
|
{
|
|
|
|
}
|
|
|
|
private void SetActiveSubmenu(TypeSubmenu typeSubmenu, bool isActive)
|
|
{
|
|
switch (typeSubmenu)
|
|
{
|
|
case TypeSubmenu.ControlElement:
|
|
_submenuControlElement.SetActive(isActive);
|
|
break;
|
|
case TypeSubmenu.Network:
|
|
_submenuNetwork.SetActive(isActive);
|
|
break;
|
|
}
|
|
}
|
|
}
|