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