DroneSimulator/Assets/Scripts/Menu/Settings/SettingsPage.cs

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;
}
}
}