#if ENABLE_INPUT_SYSTEM using System.Collections.Generic; using IP = UnityEngine.InputSystem.InputSystem; using IPDevice = UnityEngine.InputSystem.InputDevice; using IPKeyboard = UnityEngine.InputSystem.Keyboard; namespace AxibugEmuOnline.Client.InputDevices { /// <summary> InputSystemå¯¹æ¥ </summary> public class InputSystemResolver : InputResolver { DualWayDictionary<IPDevice, InputDevice> m_devices = new DualWayDictionary<IPDevice, InputDevice>(); protected override void OnInit() { foreach (var device in IP.devices) { AddDevice(device); } IP.onDeviceChange += IP_onDeviceChange; } private void AddDevice(IPDevice ipdev) { InputDevice newDevice = null; if (ipdev is IPKeyboard) newDevice = new KeyBoard(this); if (newDevice != null) { m_devices.Add(ipdev, newDevice); RaiseDeviceConnected(newDevice); } } private void RemoveDevice(IPDevice ipdev) { if (m_devices.TryGetValue(ipdev, out var device)) { m_devices.Remove(ipdev); RaiseDeviceLost(device); } } public override bool CheckOnline(InputDevice device) { return m_devices.TryGetKey(device, out var _); } private void IP_onDeviceChange(IPDevice device, UnityEngine.InputSystem.InputDeviceChange changeType) { switch (changeType) { case UnityEngine.InputSystem.InputDeviceChange.Added: AddDevice(device); break; case UnityEngine.InputSystem.InputDeviceChange.Removed: RemoveDevice(device); break; } } public override IEnumerable<InputDevice> GetDevices() { return m_devices.Values; } } } #endif