cgv
gamepad_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/window.h>
7 #include <cgv/signal/signal.h>
8 #include <cgv/signal/bool_signal.h>
9 #include <gamepad/gamepad.h>
10 
11 #include "lib_begin.h"
12 
13 namespace cgv {
14  namespace gui {
16  class CGV_API gamepad_key_event : public cgv::gui::key_event
17  {
18  protected:
23  public:
25  gamepad_key_event(void* _device_handle, const gamepad::gamepad_state& _state, unsigned short _key = 0, KeyAction _action = KA_PRESS, unsigned char _char = 0, double _time = 0);
27  void* get_device_handle() const { return device_handle; }
29  const gamepad::gamepad_state& get_state() const { return state; }
31  void stream_out(std::ostream& os) const;
32  };
33 
36  {
37  protected:
42  public:
44  gamepad_throttle_event(void* _device_handle, gamepad::gamepad_state& _state,
45  float _x, float _dx, unsigned _player_index = 0, unsigned _controller_index = 0, unsigned _throttle_index = 0, double _time = 0);
47  void* get_device_handle() const { return device_handle; }
49  const gamepad::gamepad_state& get_state() const { return state; }
51  void stream_out(std::ostream& os) const;
52  };
53 
56  {
57  protected:
62  public:
64  gamepad_stick_event(void* _device_handle, gamepad::gamepad_state& _state,
65  StickAction _action, float _x, float _y, float _dx, float _dy,
66  unsigned _player_index = 0, unsigned _controller_index = 0, unsigned _stick_index = 0, double _time = 0);
68  void* get_device_handle() const;
70  const gamepad::gamepad_state& get_state() const;
72  void stream_out(std::ostream& os) const;
73  };
74 
77  {
78  GPE_NONE = 0,
79  GPE_DEVICE = 1,
80  GPE_KEY = 2,
81  GPE_THROTTLE = 4,
82  GPE_STICK = 8,
83  GPE_STICK_KEY = 16, // whether stick touch and press actions should be translated to key events
84  GPE_ALL = 31
85  };
86 
87  class CGV_API gamepad_server
88  {
89  protected:
90  GamepadEventTypeFlags event_flags;
91  double last_device_scan;
92  double device_scan_interval;
93  std::vector<gamepad::gamepad_state> last_states;
94  std::vector<void*> device_handles;
95  public:
97  gamepad_server();
99  GamepadEventTypeFlags get_event_type_flags() const { return event_flags; }
101  void set_event_type_flags(GamepadEventTypeFlags flags);
103  void set_device_scan_interval(double duration);
105  void check_and_emit_events(double time);
107  cgv::signal::bool_signal<cgv::gui::event&> on_event;
109  cgv::signal::signal<void*, bool> on_device_change;
110  };
111 
113  extern CGV_API gamepad_server& ref_gamepad_server();
114 
117  }
118 }
119 
120 #include <cgv/config/lib_end.h>
cgv::gui::StickAction
StickAction
different actions that a stick can perform
Definition: stick_event.h:15
cgv::gui::gamepad_key_event::get_state
const gamepad::gamepad_state & get_state() const
access to current gamepad state
Definition: gamepad_server.h:29
cgv::gui::key_event
class to represent all possible keyboard events with the EID_KEY
Definition: key_event.h:23
cgv::gui::gamepad_throttle_event::device_handle
void * device_handle
store id of gamepad
Definition: gamepad_server.h:39
cgv::gui::throttle_event
class to represent events that inform on a change in a one axis controller with the EID_THROTTLE
Definition: throttle_event.h:15
cgv::gui::gamepad_stick_event
gamepad extension of stick events
Definition: gamepad_server.h:56
gamepad::gamepad_state
see https://upload.wikimedia.org/wikipedia/commons/2/2c/360_controller.svg for an explanation of the ...
Definition: gamepad.h:152
cgv::data::ref_ptr< window >
cgv::gui::gamepad_throttle_event
gamepad extension of throttle events
Definition: gamepad_server.h:36
cgv::gui::KeyAction
KeyAction
different actions that a key can perform
Definition: key_event.h:12
cgv::gui::gamepad_key_event::state
const gamepad::gamepad_state & state
public access to game state allows skipping of library dependency
Definition: gamepad_server.h:22
cgv::gui::gamepad_throttle_event::get_device_handle
void * get_device_handle() const
return the device id, by default returns 0
Definition: gamepad_server.h:47
cgv::gui::gamepad_throttle_event::state
const gamepad::gamepad_state & state
public access to game state allows skipping of library dependency
Definition: gamepad_server.h:41
cgv::gui::gamepad_stick_event::state
const gamepad::gamepad_state & state
public access to game state allows skipping of library dependency
Definition: gamepad_server.h:61
cgv::gui::connect_gamepad_server
void connect_gamepad_server(cgv::gui::window_ptr w)
connect the gamepad server to the given window or the first window of the application,...
Definition: gamepad_server.cxx:247
cgv::gui::KA_PRESS
@ KA_PRESS
key press action
Definition: key_event.h:14
cgv::gui::GamepadEventTypeFlags
GamepadEventTypeFlags
flags to define which events should be generated by server
Definition: gamepad_server.h:77
cgv::gui::gamepad_key_event::device_handle
void * device_handle
store id of gamepad
Definition: gamepad_server.h:20
cgv::gui::stick_event
class to represent stick events with the EID_STICK
Definition: stick_event.h:29
cgv::gui::gamepad_throttle_event::get_state
const gamepad::gamepad_state & get_state() const
access to current gamepad state
Definition: gamepad_server.h:49
cgv
the cgv namespace
Definition: vr_calib.cxx:9
cgv::gui::gamepad_key_event
gamepad key events use the key codes defined in gamepad::GamepadKeys
Definition: gamepad_server.h:17
cgv::gui::gamepad_stick_event::device_handle
void * device_handle
store id of gamepad
Definition: gamepad_server.h:59
cgv::gui::gamepad_key_event::get_device_handle
void * get_device_handle() const
return the device id, by default returns 0
Definition: gamepad_server.h:27
cgv::gui::ref_gamepad_server
gamepad_server & ref_gamepad_server()
return a reference to gamepad server singleton
Definition: gamepad_server.cxx:230