using System; using System.Collections.Generic; using System.Linq; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Layouts; using UnityEngine.InputSystem.LowLevel; using UnityEngine.InputSystem.Utilities; namespace Unity.RenderStreaming.InputSystem { using InputSystem = UnityEngine.InputSystem.InputSystem; /// /// /// public interface IInputManager { /// /// /// event Action onMessage; /// /// /// event Action onEvent; /// /// /// event Action onDeviceChange; /// /// /// event Action onLayoutChange; /// /// /// ReadOnlyArray devices { get; } /// /// /// IEnumerable layouts { get; } /// /// /// /// /// InputDevice GetDeviceById(int deviceId); /// /// /// /// /// /// /// InputDevice AddDevice(string layout, string name = null, string variants = null); /// /// /// /// void RemoveDevice(InputDevice device); /// /// /// /// /// void AddDeviceUsage(InputDevice device, string usage); /// /// /// /// /// void RemoveDeviceUsage(InputDevice device, string usage); /// /// /// /// /// InputControlLayout LoadLayout(string name); /// /// /// /// /// /// void RegisterControlLayout(string json, string name = null, bool isOverride = false); /// /// /// /// void RemoveLayout(string name); /// /// /// /// void QueueEvent(InputEventPtr eventPtr); } public abstract class InputManager : IInputManager { //todo(kazuki):: remove warning CS0067 #pragma warning disable 0067 public virtual event Action onMessage; public virtual event Action onEvent; public virtual event Action onDeviceChange; public virtual event Action onLayoutChange; #pragma warning restore 0067 public virtual ReadOnlyArray devices { get { return InputSystem.devices; } } public virtual IEnumerable layouts { get { return InputSystem.ListLayouts(); } } public virtual InputDevice GetDeviceById(int deviceId) { return InputSystem.GetDeviceById(deviceId); } public virtual InputDevice AddDevice(string layout, string name = null, string variants = null) { foreach (var device_ in InputSystem.devices.Where(device => device.enabled)) InputSystem.ResetDevice(device_); return InputSystem.AddDevice(layout, name, variants); } public virtual void RemoveDevice(InputDevice device) { foreach (var device_ in InputSystem.devices.Where(device => device.enabled)) InputSystem.ResetDevice(device_); InputSystem.RemoveDevice(device); } public virtual void AddDeviceUsage(InputDevice device, string usage) { InputSystem.AddDeviceUsage(device, usage); } public virtual void RemoveDeviceUsage(InputDevice device, string usage) { InputSystem.RemoveDeviceUsage(device, usage); } public virtual InputControlLayout LoadLayout(string name) { return InputSystem.LoadLayout(name); } public virtual void RegisterControlLayout(string json, string name = null, bool isOverride = false) { if(isOverride) InputSystem.RegisterLayoutOverride(json, name); else InputSystem.RegisterLayout(json, name); } public virtual void RemoveLayout(string name) { InputSystem.RemoveLayout(name); } public virtual void QueueEvent(InputEventPtr eventPtr) { InputSystem.QueueEvent(eventPtr); } } } // #endif