cgv
Loading...
Searching...
No Matches
vr_server.h
1#pragma once
2
3#include <cgv/gui/key_event.h>
4#include <cgv/gui/throttle_event.h>
5#include <cgv/gui/stick_event.h>
6#include <cgv/gui/pose_event.h>
7#include <cgv/gui/event_handler.h>
8#include <vr/vr_kit.h>
9#include <cgv/gui/window.h>
10#include <cgv/signal/signal.h>
11#include <cgv/signal/bool_signal.h>
12#include <vr/vr_log.h>
13#include <fstream>
14
15#include "lib_begin.h"
16
19
21namespace cgv {
23 namespace gui {
24
39
42 {
43 VRF_RELEASED = 0,
44 VRF_GRAB = 1,
45 VRF_EXCLUSIVE = 2,
46 VRF_GRAB_EXCLUSIVE = 3,
47 VRF_PERMANENT = 4,
48 VRF_GRAB_PERMANENT = 5,
49 VRF_GRAB_PERMANENT_AND_EXCLUSIVE = 7
50 };
51
53
135 class CGV_API vr_server
136 {
137 protected:
138 double last_device_scan;
139 double device_scan_interval;
140 std::vector<void*> vr_kit_handles;
141 std::vector<vr::vr_kit_state> last_states;
142 std::vector<unsigned> last_time_stamps;
143 VREventTypeFlags event_type_flags;
144 VRFocus focus_type;
145 event_handler* focus;
146 std::unordered_map<int, cgv::data::ref_ptr<vr::vr_log>> log_data;
148 void emit_events_and_update_state(void* kit_handle, const vr::vr_kit_state& new_state, int kit_index, VREventTypeFlags flags, double time);
150 float correct_deadzone_and_precision(float value, const vr::controller_input_config& IC);
152 vec2 correct_deadzone_and_precision(const vec2& position, const vr::controller_input_config& IC);
153 public:
155 vr_server();
157 VREventTypeFlags get_event_type_flags() const;
159 void set_event_type_flags(VREventTypeFlags flags);
161 void set_device_scan_interval(double duration);
163 double get_device_scan_interval() const { return device_scan_interval; }
165 void check_device_changes(double time);
167 void check_and_emit_events(double time);
169 bool check_new_state(void* kit_handle, const vr::vr_kit_state& new_state, double time);
171 bool check_new_state(void* kit_handle, const vr::vr_kit_state& new_state, double time, VREventTypeFlags flags);
173 bool grab_focus(VRFocus focus, event_handler* handler);
175 bool release_focus(event_handler* handler);
177 bool dispatch(cgv::gui::event& e);
179 cgv::signal::bool_signal<cgv::gui::event&> on_event;
181 cgv::signal::signal<void*, bool> on_device_change;
183 cgv::signal::signal<void*, int, vr::VRStatus, vr::VRStatus> on_status_change;
186 void enable_log(const std::string fn="", const bool in_memory_log = true, const int filter=vr::vr_log::F_ALL, const int kit_index = 0);
188 void disable_log(const int kit_index=0);
190 vr::vr_log& ref_log(const int kit_index=0);
192 cgv::data::ref_ptr<vr::vr_log> get_log(const int kit_index=0);
193 };
194
196 extern CGV_API vr_server& ref_vr_server();
197
199
202 extern CGV_API void connect_vr_server(bool connect_only_device_change_to_animation_trigger = true, cgv::gui::window_ptr w = cgv::gui::window_ptr());
203 }
204}
205
207
208#include <cgv/config/lib_end.h>
reference counted pointer, which can work together with types that are derived from ref_counted,...
Definition ref_ptr.h:160
interface for all classes that want to receive events
server for vr events
Definition vr_server.h:136
cgv::signal::signal< void *, int, vr::VRStatus, vr::VRStatus > on_status_change
signal emitted to notify about status changes of trackables, first argument is handle,...
Definition vr_server.h:183
cgv::signal::signal< void *, bool > on_device_change
signal emitted to notify about device changes, first argument is handle and second a flag telling whe...
Definition vr_server.h:181
double get_device_scan_interval() const
return the time interval in seconds to check for device connection changes
Definition vr_server.h:163
cgv::signal::bool_signal< cgv::gui::event & > on_event
signal emitted to dispatch events
Definition vr_server.h:179
helper struct for logging vr events
Definition vr_log.h:19
vr_server & ref_vr_server()
return a reference to gamepad server singleton
VRFocus
different types of event focus grabbing
Definition vr_server.h:42
VREventTypeFlags
flags to define which events should be generated by server
Definition vr_server.h:27
@ VRE_POSE
pose events
Definition vr_server.h:36
@ VRE_ONE_AXIS_GENERATES_KEY
whether one axis events should generate a key event when passing inputs threshold value
Definition vr_server.h:34
@ VRE_TWO_AXES
pad / stick events
Definition vr_server.h:33
@ VRE_ALL
all event types
Definition vr_server.h:37
@ VRE_ONE_AXIS
trigger / throttle / pedal events
Definition vr_server.h:32
@ VRE_KEY
key events
Definition vr_server.h:31
@ VRE_STATUS
status change events
Definition vr_server.h:30
@ VRE_TWO_AXES_GENERATES_DPAD
whether two axes input generates direction pad keys when presses
Definition vr_server.h:35
@ VRE_DEVICE
device change events
Definition vr_server.h:29
@ VRE_NONE
no events
Definition vr_server.h:28
void connect_vr_server(bool connect_device_change_only_to_animation_trigger, cgv::gui::window_ptr w)
connect the gamepad server to the given window or the first window of the application,...
the cgv namespace
Definition print.h:11
configuration of a controller input axis
Definition vr_kit.h:20
structure that stores all information describing the state of a VR kit
Definition vr_state.h:139