public OpenVRInputObservable(CVRSystem hmd) { this.hmd = hmd; var eventLauncher = new OpenVREventLauncher(hmd); InputEvents = from evt in Observable.FromEventPattern<OpenVREventArgs>(eventLauncher, nameof(eventLauncher.OpenVREvent)) let evtType = evt.EventArgs.EventType let data = evt.EventArgs.EventData where ControllerEvents.Contains(evtType) where evtType == EVREventType.VREvent_ButtonPress || evtType == EVREventType.VREvent_ButtonUnpress select new OpenVRControllerInput(hmd, evt.EventArgs.DeviceIndex, evtType, data.controller); }