DDNet documentation
Loading...
Searching...
No Matches
input.h
Go to the documentation of this file.
1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3#ifndef ENGINE_CLIENT_INPUT_H
4#define ENGINE_CLIENT_INPUT_H
5
6#include <engine/console.h>
7#include <engine/input.h>
8#include <engine/keys.h>
9
10#include <SDL_events.h>
11#include <SDL_joystick.h>
12
13#include <string>
14#include <vector>
15
16class IEngineGraphics;
17class IConfigManager;
18
19class CInput : public IEngineInput
20{
21public:
22 class CJoystick : public IJoystick
23 {
24 friend class CInput;
25
28 char m_aName[64];
29 char m_aGUID[34];
30 SDL_JoystickID m_InstanceId;
35 SDL_Joystick *m_pDelegate;
36
37 CInput *Input() { return m_pInput; }
38
39 public:
40 CJoystick(CInput *pInput, int Index, SDL_Joystick *pDelegate);
41 ~CJoystick() override = default;
42
43 int GetIndex() const override { return m_Index; }
44 const char *GetName() const override { return m_aName; }
45 const char *GetGUID() const { return m_aGUID; }
46 SDL_JoystickID GetInstanceId() const { return m_InstanceId; }
47 int GetNumAxes() const override { return m_NumAxes; }
48 int GetNumButtons() const override { return m_NumButtons; }
49 int GetNumBalls() const override { return m_NumBalls; }
50 int GetNumHats() const override { return m_NumHats; }
51 float GetAxisValue(int Axis) override;
52 void GetHatValue(int Hat, int (&aHatKeys)[2]) override;
53 bool Relative(float *pX, float *pY) override;
54 bool Absolute(float *pX, float *pY) override;
55
56 static void GetJoystickHatKeys(int Hat, int HatValue, int (&aHatKeys)[2]);
57 };
58
59private:
63
65 IConsole *Console() const { return m_pConsole; }
66
67 // joystick
68 std::vector<CJoystick> m_vJoysticks;
70 void InitJoysticks();
71 bool OpenJoystick(int JoystickIndex);
72 void CloseJoysticks();
74 static void ConchainJoystickGuidChanged(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
75 float GetJoystickDeadzone();
76
78
80
81 // IME support
84 std::vector<std::string> m_vCandidates;
86
87 // events
88 std::vector<CEvent> m_vInputEvents;
89 int64_t m_LastUpdate;
91 void AddKeyEvent(int Key, int Flags);
92 void AddTextEvent(const char *pText);
93
94 // quick access to input
98 std::vector<CTouchFingerState> m_vTouchFingerStates;
99
100 void HandleJoystickAxisMotionEvent(const SDL_JoyAxisEvent &Event);
101 void HandleJoystickButtonEvent(const SDL_JoyButtonEvent &Event);
102 void HandleJoystickHatMotionEvent(const SDL_JoyHatEvent &Event);
103 void HandleJoystickAddedEvent(const SDL_JoyDeviceEvent &Event);
104 void HandleJoystickRemovedEvent(const SDL_JoyDeviceEvent &Event);
105 vec2 TouchPositionToViewport(vec2 Position) const;
106 vec2 TouchDeltaToViewport(vec2 Delta) const;
107 void HandleTouchDownEvent(const SDL_TouchFingerEvent &Event);
108 void HandleTouchUpEvent(const SDL_TouchFingerEvent &Event);
109 void HandleTouchMotionEvent(const SDL_TouchFingerEvent &Event);
110 void HandleTextEditingEvent(const char *pText, int Start, int Length);
111
113
114 void ProcessSystemMessage(SDL_SysWMmsg *pMsg);
115
116public:
117 CInput();
118
119 void Init() override;
120 int Update() override;
121 void Shutdown() override;
122
123 void ConsumeEvents(std::function<void(const CEvent &Event)> Consumer) const override;
124 void Clear() override;
125 float GetUpdateTime() const override;
126
128 bool ShiftIsPressed() const override { return KeyIsPressed(KEY_LSHIFT) || KeyIsPressed(KEY_RSHIFT); }
129 bool AltIsPressed() const override { return KeyIsPressed(KEY_LALT) || KeyIsPressed(KEY_RALT); }
130 bool KeyIsPressed(int Key) const override;
131 bool KeyPress(int Key) const override;
132 const char *KeyName(int Key) const override;
133 int FindKeyByName(const char *pKeyName) const override;
134
135 size_t NumJoysticks() const override { return m_vJoysticks.size(); }
136 CJoystick *GetJoystick(size_t Index) override { return &m_vJoysticks[Index]; }
138 void SetActiveJoystick(size_t Index) override;
139
140 bool MouseRelative(float *pX, float *pY) override;
141 void MouseModeAbsolute() override;
142 void MouseModeRelative() override;
143 vec2 NativeMousePos() const override;
144 bool NativeMousePressed(int Index) const override;
145
146 const std::vector<CTouchFingerState> &TouchFingerStates() const override;
147 void ClearTouchDeltas() override;
148
149 std::string GetClipboardText() override;
150 void SetClipboardText(const char *pText) override;
151
152 void StartTextInput() override;
153 void StopTextInput() override;
154 void EnsureScreenKeyboardShown() override;
155 const char *GetComposition() const override { return m_CompositionString.c_str(); }
156 bool HasComposition() const override { return !m_CompositionString.empty(); }
157 int GetCompositionCursor() const override { return m_CompositionCursor; }
158 int GetCompositionLength() const override { return m_CompositionString.length(); }
159 const char *GetCandidate(int Index) const override { return m_vCandidates[Index].c_str(); }
160 int GetCandidateCount() const override { return m_vCandidates.size(); }
162 void SetCompositionWindowPosition(float X, float Y, float H) override;
163
164 bool GetDropFile(char *aBuf, int Len) override;
165};
166
167#endif
Definition input.h:23
CJoystick(CInput *pInput, int Index, SDL_Joystick *pDelegate)
Definition input.cpp:187
int m_NumButtons
Definition input.h:32
int m_NumBalls
Definition input.h:33
static void GetJoystickHatKeys(int Hat, int HatValue, int(&aHatKeys)[2])
Definition input.cpp:221
int GetNumButtons() const override
Definition input.h:48
const char * GetName() const override
Definition input.h:44
int GetNumHats() const override
Definition input.h:50
friend class CInput
Definition input.h:24
char m_aGUID[34]
Definition input.h:29
float GetAxisValue(int Axis) override
Definition input.cpp:216
SDL_JoystickID GetInstanceId() const
Definition input.h:46
int m_Index
Definition input.h:27
void GetHatValue(int Hat, int(&aHatKeys)[2]) override
Definition input.cpp:238
CInput * Input()
Definition input.h:37
CInput * m_pInput
Definition input.h:26
bool Relative(float *pX, float *pY) override
Definition input.cpp:243
bool Absolute(float *pX, float *pY) override
Definition input.cpp:261
const char * GetGUID() const
Definition input.h:45
int m_NumHats
Definition input.h:34
char m_aName[64]
Definition input.h:28
int GetNumBalls() const override
Definition input.h:49
SDL_Joystick * m_pDelegate
Definition input.h:35
int GetNumAxes() const override
Definition input.h:47
int GetIndex() const override
Definition input.h:43
SDL_JoystickID m_InstanceId
Definition input.h:30
~CJoystick() override=default
int m_NumAxes
Definition input.h:31
void HandleTouchMotionEvent(const SDL_TouchFingerEvent &Event)
Definition input.cpp:583
void SetCompositionWindowPosition(float X, float Y, float H) override
Definition input.cpp:615
void ProcessSystemMessage(SDL_SysWMmsg *pMsg)
Definition input.cpp:915
std::vector< std::string > m_vCandidates
Definition input.h:84
void HandleJoystickAxisMotionEvent(const SDL_JoyAxisEvent &Event)
Definition input.cpp:435
std::vector< CEvent > m_vInputEvents
Definition input.h:88
void StartTextInput() override
Definition input.cpp:345
char m_aDropFile[IO_MAX_PATH_LENGTH]
Definition input.h:112
IConsole * Console() const
Definition input.h:65
const char * KeyName(int Key) const override
Definition input.cpp:409
void HandleJoystickRemovedEvent(const SDL_JoyDeviceEvent &Event)
Definition input.cpp:528
CJoystick * GetJoystick(size_t Index) override
Definition input.h:136
bool HasComposition() const override
Definition input.h:156
void AddKeyEvent(int Key, int Flags)
Definition input.cpp:43
void CloseJoysticks()
Definition input.cpp:201
bool KeyIsPressed(int Key) const override
Definition input.cpp:397
bool OpenJoystick(int JoystickIndex)
Definition input.cpp:135
void ConsumeEvents(std::function< void(const CEvent &Event)> Consumer) const override
Definition input.cpp:373
uint32_t m_InputCounter
Definition input.h:97
bool KeyPress(int Key) const override
Definition input.cpp:403
bool ShiftIsPressed() const override
Definition input.h:128
void HandleJoystickButtonEvent(const SDL_JoyButtonEvent &Event)
Definition input.cpp:468
bool m_aFrameKeyStates[KEY_LAST]
Definition input.h:96
CJoystick * GetActiveJoystick() override
Definition input.h:137
const char * GetComposition() const override
Definition input.h:155
bool m_aCurrentKeyStates[KEY_LAST]
Definition input.h:95
int m_CandidateSelectedIndex
Definition input.h:85
void HandleTextEditingEvent(const char *pText, int Start, int Length)
Definition input.cpp:595
void InitJoysticks()
Definition input.cpp:115
size_t NumJoysticks() const override
Definition input.h:135
int GetCandidateSelectedIndex() const override
Definition input.h:161
bool AltIsPressed() const override
Definition input.h:129
bool GetDropFile(char *aBuf, int Len) override
Definition input.cpp:975
CJoystick * m_pActiveJoystick
Definition input.h:69
void HandleJoystickHatMotionEvent(const SDL_JoyHatEvent &Event)
Definition input.cpp:490
void StopTextInput() override
Definition input.cpp:352
void HandleJoystickAddedEvent(const SDL_JoyDeviceEvent &Event)
Definition input.cpp:520
const char * GetCandidate(int Index) const override
Definition input.h:159
int64_t m_LastUpdate
Definition input.h:89
void MouseModeRelative() override
Definition input.cpp:297
const std::vector< CTouchFingerState > & TouchFingerStates() const override
Definition input.cpp:319
void SetActiveJoystick(size_t Index) override
Definition input.cpp:210
bool m_InputGrabbed
Definition input.h:77
std::string m_CompositionString
Definition input.h:82
float m_UpdateTime
Definition input.h:90
void SetClipboardText(const char *pText) override
Definition input.cpp:340
int FindKeyByName(const char *pKeyName) const override
Definition input.cpp:415
bool ModifierIsPressed() const override
Definition input.h:127
vec2 NativeMousePos() const override
Definition input.cpp:306
float GetJoystickDeadzone()
Definition input.cpp:182
float GetUpdateTime() const override
Definition input.cpp:392
int GetCandidateCount() const override
Definition input.h:160
void Init() override
Definition input.cpp:97
IConfigManager * m_pConfigManager
Definition input.h:62
std::string GetClipboardText() override
Definition input.cpp:332
void Clear() override
Definition input.cpp:385
vec2 TouchDeltaToViewport(vec2 Delta) const
Definition input.cpp:554
void Shutdown() override
Definition input.cpp:110
void HandleTouchUpEvent(const SDL_TouchFingerEvent &Event)
Definition input.cpp:572
IEngineGraphics * m_pGraphics
Definition input.h:60
void UpdateActiveJoystick()
Definition input.cpp:155
int GetCompositionLength() const override
Definition input.h:158
bool NativeMousePressed(int Index) const override
Definition input.cpp:313
int m_CompositionCursor
Definition input.h:83
IEngineGraphics * Graphics() const
Definition input.h:64
bool MouseRelative(float *pX, float *pY) override
Definition input.cpp:277
std::vector< CJoystick > m_vJoysticks
Definition input.h:68
bool m_MouseFocus
Definition input.h:79
void ClearTouchDeltas() override
Definition input.cpp:324
int Update() override
Definition input.cpp:722
void MouseModeAbsolute() override
Definition input.cpp:290
void EnsureScreenKeyboardShown() override
Definition input.cpp:362
static void ConchainJoystickGuidChanged(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition input.cpp:173
void HandleTouchDownEvent(const SDL_TouchFingerEvent &Event)
Definition input.cpp:561
IConsole * m_pConsole
Definition input.h:61
std::vector< CTouchFingerState > m_vTouchFingerStates
Definition input.h:98
vec2 TouchPositionToViewport(vec2 Position) const
Definition input.cpp:545
void AddTextEvent(const char *pText)
Definition input.cpp:67
CInput()
Definition input.cpp:77
int GetCompositionCursor() const override
Definition input.h:157
Definition config.h:9
Definition console.h:66
Definition console.h:22
void(*) FCommandCallback(IResult *pResult, void *pUserData)
Definition console.h:107
Definition graphics.h:678
Definition input.h:211
Definition input.h:22
Definition input.h:94
constexpr auto IO_MAX_PATH_LENGTH
Definition types.h:26
@ KEY_LALT
Definition keys.h:221
@ KEY_LCTRL
Definition keys.h:219
@ KEY_LAST
Definition keys.h:336
@ KEY_RALT
Definition keys.h:225
@ KEY_LSHIFT
Definition keys.h:220
@ KEY_RCTRL
Definition keys.h:223
@ KEY_RGUI
Definition keys.h:226
@ KEY_RSHIFT
Definition keys.h:224
@ KEY_LGUI
Definition keys.h:222
vector2_base< float > vec2
Definition vmath.h:168