Nenhuma descrição
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

ForDeviceEventObservable.cs 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System;
  2. using UnityEngine.InputSystem.LowLevel;
  3. namespace UnityEngine.InputSystem.Utilities
  4. {
  5. internal class ForDeviceEventObservable : IObservable<InputEventPtr>
  6. {
  7. private IObservable<InputEventPtr> m_Source;
  8. private InputDevice m_Device;
  9. private Type m_DeviceType;
  10. public ForDeviceEventObservable(IObservable<InputEventPtr> source, Type deviceType, InputDevice device)
  11. {
  12. m_Source = source;
  13. m_DeviceType = deviceType;
  14. m_Device = device;
  15. }
  16. public IDisposable Subscribe(IObserver<InputEventPtr> observer)
  17. {
  18. return m_Source.Subscribe(new ForDevice(m_DeviceType, m_Device, observer));
  19. }
  20. private class ForDevice : IObserver<InputEventPtr>
  21. {
  22. private IObserver<InputEventPtr> m_Observer;
  23. private InputDevice m_Device;
  24. private Type m_DeviceType;
  25. public ForDevice(Type deviceType, InputDevice device, IObserver<InputEventPtr> observer)
  26. {
  27. m_Device = device;
  28. m_DeviceType = deviceType;
  29. m_Observer = observer;
  30. }
  31. public void OnCompleted()
  32. {
  33. }
  34. public void OnError(Exception error)
  35. {
  36. Debug.LogException(error);
  37. }
  38. public void OnNext(InputEventPtr value)
  39. {
  40. if (m_DeviceType != null)
  41. {
  42. var device = InputSystem.GetDeviceById(value.deviceId);
  43. if (device == null)
  44. return;
  45. if (!m_DeviceType.IsInstanceOfType(device))
  46. return;
  47. }
  48. if (m_Device != null && value.deviceId != m_Device.deviceId)
  49. return;
  50. m_Observer.OnNext(value);
  51. }
  52. }
  53. }
  54. }