Foray Library
rapid prototyping framework for crossplatform development of vulkan hardware ray tracing applications
Loading...
Searching...
No Matches
foray_inputdevice.hpp
Go to the documentation of this file.
1#pragma once
2#include "foray_helpers.hpp"
3#include "foray_input.hpp"
5#include <memory>
6#include <sdl2/SDL.h>
7#include <string>
8#include <vector>
9
10namespace foray::osi {
13 {
14 public:
15 enum class EType : uint8_t
16 {
17 Unknown = 0,
18 Mouse,
21 };
22
23 using AxisPtr = const InputAnalogue*;
24
26 {
27 public:
28 SDL_Joystick* Joystick;
29
31 AxisJoystick(InputDevice* device, int32_t id, std::string_view name, SDL_Joystick* joystick) : InputAnalogue(device, id, name, (EAxis)id), Joystick(joystick) {}
32
33 // Inherited via Axis
34 virtual int16_t State() const override;
35 };
36
38 {
39 public:
40 SDL_Joystick* Joystick;
41
43 ButtonJoystick(InputDevice* device, int32_t id, std::string_view name, EButton button, SDL_Joystick* joystick)
44 : InputBinary(device, id, name, button), Joystick(joystick)
45 {
46 }
47
48 // Inherited via InputBinary
49 virtual bool State() const override;
50 };
51
52 class ButtonMouse : public InputBinary
53 {
54 public:
56 ButtonMouse(InputDevice* device, int32_t id, std::string_view name, EButton button) : InputBinary(device, id, name, button) {}
57
58 // Inherited via InputBinary
59 virtual bool State() const override;
60 };
61
63 {
64 public:
66 ButtonKeyboard(InputDevice* device, int32_t id, std::string_view name, EButton button) : InputBinary(device, id, name, button) {}
67
68 // Inherited via InputBinary
69 virtual bool State() const override;
70 };
71
73 {
74 public:
76 inline DirectionalMouseScroll(InputDevice* device, int32_t id, std::string_view name, EDirectional directional) : InputDirectional(device, id, name, directional) {}
77 };
78
79 inline SDL_JoystickGUID Guid() { return mGuid; }
80 inline SDL_Joystick* Joystick() { return mJoystick; }
81 inline const SDL_Joystick* Joystick() const { return mJoystick; }
82 inline SDL_JoystickID JoystickId() { return mJoystickId; }
83
88 InputDevice(const InputDevice& other) = delete;
89 InputDevice(const InputDevice&& other) = delete;
90 InputDevice& operator=(const InputDevice& other) = delete;
91
92 const std::vector<AxisPtr>& Axes() const { return mAxes; }
93 const std::vector<InputBinary*>& Buttons() const { return mButtons; }
94 const std::vector<InputDirectional*>& Directionals() const { return mDirectionals; }
95
96 const std::string& Name() const { return mName; }
97 EType Type() const { return mType; }
98
102 const InputBinary* FindButton(EButton button) const;
103
104 std::string BuildDebugPrint() const;
105
106 static InputDevice* InitKeyboard(std::vector<std::unique_ptr<InputDevice>>& out);
107 static InputDevice* InitMouse(std::vector<std::unique_ptr<InputDevice>>& out);
108 static InputDevice* InitJoystick(std::vector<std::unique_ptr<InputDevice>>& out, SDL_Joystick* joystick);
109
110 virtual ~InputDevice();
111
112 protected:
113 SDL_JoystickGUID mGuid;
114 SDL_Joystick* mJoystick;
115 SDL_JoystickID mJoystickId;
116
122
123 std::string mName;
125
126 std::vector<AxisPtr> mAxes;
127 std::vector<InputBinary*> mButtons;
128 std::vector<InputDirectional*> mDirectionals;
129 };
130
131} // namespace foray
Represents a single input with a state represented by a signed 16bit integer.
Definition foray_input.hpp:28
Represents a single input with a state represented by a boolean value.
Definition foray_input.hpp:45
Definition foray_inputdevice.hpp:26
virtual int16_t State() const override
Axis id of the input.
AxisJoystick(InputDevice *device, int32_t id, std::string_view name, SDL_Joystick *joystick)
Definition foray_inputdevice.hpp:31
SDL_Joystick * Joystick
Definition foray_inputdevice.hpp:28
AxisJoystick()
Definition foray_inputdevice.hpp:30
Definition foray_inputdevice.hpp:38
ButtonJoystick(InputDevice *device, int32_t id, std::string_view name, EButton button, SDL_Joystick *joystick)
Definition foray_inputdevice.hpp:43
SDL_Joystick * Joystick
Definition foray_inputdevice.hpp:40
virtual bool State() const override
Button id of the input.
ButtonJoystick()
Definition foray_inputdevice.hpp:42
Definition foray_inputdevice.hpp:63
ButtonKeyboard(InputDevice *device, int32_t id, std::string_view name, EButton button)
Definition foray_inputdevice.hpp:66
ButtonKeyboard()
Definition foray_inputdevice.hpp:65
virtual bool State() const override
Button id of the input.
Definition foray_inputdevice.hpp:53
virtual bool State() const override
Button id of the input.
ButtonMouse()
Definition foray_inputdevice.hpp:55
ButtonMouse(InputDevice *device, int32_t id, std::string_view name, EButton button)
Definition foray_inputdevice.hpp:56
Definition foray_inputdevice.hpp:73
DirectionalMouseScroll(InputDevice *device, int32_t id, std::string_view name, EDirectional directional)
Definition foray_inputdevice.hpp:76
DirectionalMouseScroll()
Definition foray_inputdevice.hpp:75
Wraps a generic input device (mouse, keyboard, joystick, controller ...) in a hardware agnostic way.
Definition foray_inputdevice.hpp:13
const SDL_Joystick * Joystick() const
Definition foray_inputdevice.hpp:81
std::vector< InputDirectional * > mDirectionals
Definition foray_inputdevice.hpp:128
SDL_Joystick * mJoystick
Definition foray_inputdevice.hpp:114
static InputDevice * InitKeyboard(std::vector< std::unique_ptr< InputDevice > > &out)
InputDevice(const InputDevice &&other)=delete
DirectionalMouseScroll mMouseScroll
Definition foray_inputdevice.hpp:121
std::string BuildDebugPrint() const
SDL_JoystickID JoystickId()
Definition foray_inputdevice.hpp:82
SDL_JoystickGUID mGuid
Definition foray_inputdevice.hpp:113
static InputDevice * InitJoystick(std::vector< std::unique_ptr< InputDevice > > &out, SDL_Joystick *joystick)
InputDevice()
Definition foray_inputdevice.hpp:84
const InputBinary * FindButton(EButton button) const
Finds a button object based on the corresponding enum value. InputBinary objects are valid until the ...
EType mType
Definition foray_inputdevice.hpp:124
std::vector< InputBinary * > mButtons
Definition foray_inputdevice.hpp:127
ButtonJoystick * mJoystickButtons
Definition foray_inputdevice.hpp:117
SDL_JoystickGUID Guid()
Definition foray_inputdevice.hpp:79
const std::vector< InputDirectional * > & Directionals() const
Definition foray_inputdevice.hpp:94
EType Type() const
Definition foray_inputdevice.hpp:97
ButtonKeyboard * mKeyboardButtons
Definition foray_inputdevice.hpp:119
static InputDevice * InitMouse(std::vector< std::unique_ptr< InputDevice > > &out)
const std::string & Name() const
Definition foray_inputdevice.hpp:96
const std::vector< AxisPtr > & Axes() const
Definition foray_inputdevice.hpp:92
AxisJoystick * mJoystickAxes
Definition foray_inputdevice.hpp:118
InputDevice & operator=(const InputDevice &other)=delete
SDL_JoystickID mJoystickId
Definition foray_inputdevice.hpp:115
std::vector< AxisPtr > mAxes
Definition foray_inputdevice.hpp:126
ButtonMouse * mMouseButtons
Definition foray_inputdevice.hpp:120
EType
Definition foray_inputdevice.hpp:16
const std::vector< InputBinary * > & Buttons() const
Definition foray_inputdevice.hpp:93
std::string mName
Definition foray_inputdevice.hpp:123
SDL_Joystick * Joystick()
Definition foray_inputdevice.hpp:80
InputDevice(const InputDevice &other)=delete
Represents a stateless directional input.
Definition foray_input.hpp:62
Definition foray_env.hpp:7
EAxis
Definition foray_helpers.hpp:308
EButton
All supported buttons (mouse, controllers, etc.) and keys (keyboard)
Definition foray_helpers.hpp:8
EDirectional
Enum for identification of stateless directional inputs.
Definition foray_helpers.hpp:364