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_INPUT_H
4#define ENGINE_INPUT_H
5
6#include "kernel.h"
7
8#include <base/types.h>
9#include <base/vmath.h>
10
11#include <chrono>
12#include <cstdint>
13#include <functional>
14#include <string>
15#include <vector>
16
17class IInput : public IInterface
18{
20public:
21 class CEvent
22 {
23 public:
25 int m_Key;
26 uint32_t m_InputCount;
27 char m_aText[32]; // SDL_TEXTINPUTEVENT_TEXT_SIZE
28 };
29
30 enum
31 {
32 FLAG_PRESS = 1 << 0,
33 FLAG_RELEASE = 1 << 1,
34 FLAG_TEXT = 1 << 2,
39 FLAG_REPEAT = 1 << 3,
40 };
47
48 // events
49 virtual void ConsumeEvents(std::function<void(const CEvent &Event)> Consumer) const = 0;
53 virtual void Clear() = 0;
54
59 virtual float GetUpdateTime() const = 0;
60
61 // keys
62 virtual bool ModifierIsPressed() const = 0;
63 virtual bool ShiftIsPressed() const = 0;
64 virtual bool AltIsPressed() const = 0;
76 virtual bool KeyIsPressed(int Key) const = 0;
88 virtual bool KeyPress(int Key) const = 0;
89 virtual int FindKeyByName(const char *pKeyName) const = 0;
90
91 // joystick
93 {
94 public:
95 virtual ~IJoystick() = default;
96 virtual int GetIndex() const = 0;
97 virtual const char *GetName() const = 0;
98 virtual int GetNumAxes() const = 0;
99 virtual int GetNumButtons() const = 0;
100 virtual int GetNumBalls() const = 0;
101 virtual int GetNumHats() const = 0;
102 virtual float GetAxisValue(int Axis) = 0;
103 virtual void GetHatValue(int Hat, int (&aHatKeys)[2]) = 0;
104 virtual bool Relative(float *pX, float *pY) = 0;
105 virtual bool Absolute(float *pX, float *pY) = 0;
106 };
107 virtual size_t NumJoysticks() const = 0;
108 virtual IJoystick *GetJoystick(size_t Index) = 0;
110 virtual void SetActiveJoystick(size_t Index) = 0;
111
112 // mouse
113 virtual vec2 NativeMousePos() const = 0;
114 virtual bool NativeMousePressed(int Index) const = 0;
115 virtual void MouseModeRelative() = 0;
116 virtual void MouseModeAbsolute() = 0;
117 virtual bool MouseRelative(float *pX, float *pY) = 0;
118
119 // touch
127 {
128 friend class CInput;
129
130 int64_t m_DeviceId;
131 int64_t m_FingerId;
132
133 public:
134 bool operator==(const CTouchFinger &Other) const { return m_DeviceId == Other.m_DeviceId && m_FingerId == Other.m_FingerId; }
135 bool operator!=(const CTouchFinger &Other) const { return !(*this == Other); }
136 };
137
141 {
142 public:
162 std::chrono::nanoseconds m_PressTime;
163 };
164
171 virtual const std::vector<CTouchFingerState> &TouchFingerStates() const = 0;
177 virtual void ClearTouchDeltas() = 0;
178
179 // clipboard
180 virtual std::string GetClipboardText() = 0;
181 virtual void SetClipboardText(const char *pText) = 0;
182
183 // text editing
184 virtual void StartTextInput() = 0;
185 virtual void StopTextInput() = 0;
186 virtual void EnsureScreenKeyboardShown() = 0;
187 virtual const char *GetComposition() const = 0;
188 virtual bool HasComposition() const = 0;
189 virtual int GetCompositionCursor() const = 0;
190 virtual int GetCompositionLength() const = 0;
191 virtual const char *GetCandidate(int Index) const = 0;
192 virtual int GetCandidateCount() const = 0;
193 virtual int GetCandidateSelectedIndex() const = 0;
194 virtual void SetCompositionWindowPosition(float X, float Y, float H) = 0;
195
196 virtual bool GetDropFile(char *aBuf, int Len) = 0;
197
198 ECursorType CursorRelative(float *pX, float *pY)
199 {
200 if(MouseRelative(pX, pY))
201 return CURSOR_MOUSE;
202 IJoystick *pJoystick = GetActiveJoystick();
203 if(pJoystick && pJoystick->Relative(pX, pY))
204 return CURSOR_JOYSTICK;
205 return CURSOR_NONE;
206 }
207};
208
209class IEngineInput : public IInput
210{
211 MACRO_INTERFACE("engineinput")
212public:
213 virtual void Init() = 0;
214 void Shutdown() override = 0;
215 virtual int Update() = 0;
216};
217
219
220#endif
Definition input.h:210
void Shutdown() override=0
virtual int Update()=0
virtual void Init()=0
Definition input.h:22
char m_aText[32]
Definition input.h:27
int m_Key
Definition input.h:25
int m_Flags
Definition input.h:24
uint32_t m_InputCount
Definition input.h:26
Definition input.h:141
std::chrono::nanoseconds m_PressTime
Definition input.h:162
vec2 m_Delta
Definition input.h:158
CTouchFinger m_Finger
Definition input.h:146
vec2 m_Position
Definition input.h:151
Definition input.h:127
friend class CInput
Definition input.h:128
int64_t m_DeviceId
Definition input.h:130
bool operator==(const CTouchFinger &Other) const
Definition input.h:134
int64_t m_FingerId
Definition input.h:131
bool operator!=(const CTouchFinger &Other) const
Definition input.h:135
Definition input.h:93
virtual int GetNumBalls() const =0
virtual const char * GetName() const =0
virtual int GetNumButtons() const =0
virtual bool Absolute(float *pX, float *pY)=0
virtual ~IJoystick()=default
virtual int GetNumAxes() const =0
virtual bool Relative(float *pX, float *pY)=0
virtual int GetIndex() const =0
virtual int GetNumHats() const =0
virtual float GetAxisValue(int Axis)=0
virtual void GetHatValue(int Hat, int(&aHatKeys)[2])=0
Definition input.h:18
ECursorType
Definition input.h:42
@ CURSOR_MOUSE
Definition input.h:44
@ CURSOR_NONE
Definition input.h:43
@ CURSOR_JOYSTICK
Definition input.h:45
virtual void EnsureScreenKeyboardShown()=0
virtual int GetCompositionLength() const =0
virtual void MouseModeAbsolute()=0
virtual void StopTextInput()=0
virtual int FindKeyByName(const char *pKeyName) const =0
virtual int GetCandidateSelectedIndex() const =0
virtual IJoystick * GetJoystick(size_t Index)=0
virtual int GetCompositionCursor() const =0
virtual int GetCandidateCount() const =0
virtual const char * GetCandidate(int Index) const =0
virtual std::string GetClipboardText()=0
virtual bool NativeMousePressed(int Index) const =0
virtual vec2 NativeMousePos() const =0
virtual bool AltIsPressed() const =0
virtual bool ShiftIsPressed() const =0
virtual void SetActiveJoystick(size_t Index)=0
virtual void SetClipboardText(const char *pText)=0
@ FLAG_TEXT
Definition input.h:34
@ FLAG_REPEAT
Definition input.h:39
@ FLAG_RELEASE
Definition input.h:33
@ FLAG_PRESS
Definition input.h:32
virtual size_t NumJoysticks() const =0
virtual void MouseModeRelative()=0
virtual void SetCompositionWindowPosition(float X, float Y, float H)=0
virtual void StartTextInput()=0
virtual void ConsumeEvents(std::function< void(const CEvent &Event)> Consumer) const =0
virtual const std::vector< CTouchFingerState > & TouchFingerStates() const =0
ECursorType CursorRelative(float *pX, float *pY)
Definition input.h:198
virtual bool KeyIsPressed(int Key) const =0
virtual void Clear()=0
virtual bool MouseRelative(float *pX, float *pY)=0
virtual bool ModifierIsPressed() const =0
virtual const char * GetComposition() const =0
virtual IJoystick * GetActiveJoystick()=0
virtual void ClearTouchDeltas()=0
virtual bool HasComposition() const =0
virtual bool KeyPress(int Key) const =0
virtual bool GetDropFile(char *aBuf, int Len)=0
virtual float GetUpdateTime() const =0
IInterface()
Definition kernel.h:19
IEngineInput * CreateEngineInput()
Definition input.cpp:987
#define MACRO_INTERFACE(Name)
Definition kernel.h:25
vector2_base< float > vec2
Definition vmath.h:168