InputManager.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using UnityEngine.InputSystem;
  5. using UnityEngine.InputSystem.Layouts;
  6. using UnityEngine.InputSystem.LowLevel;
  7. using UnityEngine.InputSystem.Utilities;
  8. namespace Unity.RenderStreaming.InputSystem
  9. {
  10. using InputSystem = UnityEngine.InputSystem.InputSystem;
  11. /// <summary>
  12. ///
  13. /// </summary>
  14. public interface IInputManager
  15. {
  16. /// <summary>
  17. ///
  18. /// </summary>
  19. event Action<InputRemoting.Message> onMessage;
  20. /// <summary>
  21. ///
  22. /// </summary>
  23. event Action<InputEventPtr, InputDevice> onEvent;
  24. /// <summary>
  25. ///
  26. /// </summary>
  27. event Action<InputDevice, InputDeviceChange> onDeviceChange;
  28. /// <summary>
  29. ///
  30. /// </summary>
  31. event Action<string, InputControlLayoutChange> onLayoutChange;
  32. /// <summary>
  33. ///
  34. /// </summary>
  35. ReadOnlyArray<InputDevice> devices { get; }
  36. /// <summary>
  37. ///
  38. /// </summary>
  39. IEnumerable<string> layouts { get; }
  40. /// <summary>
  41. ///
  42. /// </summary>
  43. /// <param name="deviceId"></param>
  44. /// <returns></returns>
  45. InputDevice GetDeviceById(int deviceId);
  46. /// <summary>
  47. ///
  48. /// </summary>
  49. /// <param name="layout"></param>
  50. /// <param name="name"></param>
  51. /// <param name="variants"></param>
  52. /// <returns></returns>
  53. InputDevice AddDevice(string layout, string name = null, string variants = null);
  54. /// <summary>
  55. ///
  56. /// </summary>
  57. /// <param name="device"></param>
  58. void RemoveDevice(InputDevice device);
  59. /// <summary>
  60. ///
  61. /// </summary>
  62. /// <param name="device"></param>
  63. /// <param name="usage"></param>
  64. void AddDeviceUsage(InputDevice device, string usage);
  65. /// <summary>
  66. ///
  67. /// </summary>
  68. /// <param name="device"></param>
  69. /// <param name="usage"></param>
  70. void RemoveDeviceUsage(InputDevice device, string usage);
  71. /// <summary>
  72. ///
  73. /// </summary>
  74. /// <param name="name"></param>
  75. /// <returns></returns>
  76. InputControlLayout LoadLayout(string name);
  77. /// <summary>
  78. ///
  79. /// </summary>
  80. /// <param name="json"></param>
  81. /// <param name="name"></param>
  82. /// <param name="matches"></param>
  83. void RegisterControlLayout(string json, string name = null, bool isOverride = false);
  84. /// <summary>
  85. ///
  86. /// </summary>
  87. /// <param name="name"></param>
  88. void RemoveLayout(string name);
  89. /// <summary>
  90. ///
  91. /// </summary>
  92. /// <param name="eventPtr"></param>
  93. void QueueEvent(InputEventPtr eventPtr);
  94. }
  95. public abstract class InputManager : IInputManager
  96. {
  97. //todo(kazuki):: remove warning CS0067
  98. #pragma warning disable 0067
  99. public virtual event Action<InputRemoting.Message> onMessage;
  100. public virtual event Action<InputEventPtr, InputDevice> onEvent;
  101. public virtual event Action<InputDevice, InputDeviceChange> onDeviceChange;
  102. public virtual event Action<string, InputControlLayoutChange> onLayoutChange;
  103. #pragma warning restore 0067
  104. public virtual ReadOnlyArray<InputDevice> devices
  105. {
  106. get
  107. {
  108. return InputSystem.devices;
  109. }
  110. }
  111. public virtual IEnumerable<string> layouts
  112. {
  113. get
  114. {
  115. return InputSystem.ListLayouts();
  116. }
  117. }
  118. public virtual InputDevice GetDeviceById(int deviceId)
  119. {
  120. return InputSystem.GetDeviceById(deviceId);
  121. }
  122. public virtual InputDevice AddDevice(string layout, string name = null, string variants = null)
  123. {
  124. foreach (var device_ in InputSystem.devices.Where(device => device.enabled))
  125. InputSystem.ResetDevice(device_);
  126. return InputSystem.AddDevice(layout, name, variants);
  127. }
  128. public virtual void RemoveDevice(InputDevice device)
  129. {
  130. foreach (var device_ in InputSystem.devices.Where(device => device.enabled))
  131. InputSystem.ResetDevice(device_);
  132. InputSystem.RemoveDevice(device);
  133. }
  134. public virtual void AddDeviceUsage(InputDevice device, string usage)
  135. {
  136. InputSystem.AddDeviceUsage(device, usage);
  137. }
  138. public virtual void RemoveDeviceUsage(InputDevice device, string usage)
  139. {
  140. InputSystem.RemoveDeviceUsage(device, usage);
  141. }
  142. public virtual InputControlLayout LoadLayout(string name)
  143. {
  144. return InputSystem.LoadLayout(name);
  145. }
  146. public virtual void RegisterControlLayout(string json, string name = null, bool isOverride = false)
  147. {
  148. if(isOverride)
  149. InputSystem.RegisterLayoutOverride(json, name);
  150. else
  151. InputSystem.RegisterLayout(json, name);
  152. }
  153. public virtual void RemoveLayout(string name)
  154. {
  155. InputSystem.RemoveLayout(name);
  156. }
  157. public virtual void QueueEvent(InputEventPtr eventPtr)
  158. {
  159. InputSystem.QueueEvent(eventPtr);
  160. }
  161. }
  162. }
  163. // #endif