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}