DDNet documentation
Toggle main menu visibility
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
17
class
IInput
:
public
IInterface
18
{
19
MACRO_INTERFACE
(
"input"
)
20
public:
21
class
CEvent
22
{
23
public
:
24
int
m_Flags
;
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
};
41
enum
ECursorType
42
{
43
CURSOR_NONE
,
44
CURSOR_MOUSE
,
45
CURSOR_JOYSTICK
,
46
};
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
92
class
IJoystick
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;
109
virtual
IJoystick
*
GetActiveJoystick
() = 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
126
class
CTouchFinger
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
140
class
CTouchFingerState
141
{
142
public
:
146
CTouchFinger
m_Finger
;
151
vec2
m_Position
;
158
vec2
m_Delta
;
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
209
class
IEngineInput
:
public
IInput
210
{
211
MACRO_INTERFACE
(
"engineinput"
)
212
public:
213
virtual
void
Init
() = 0;
214
void
Shutdown
() override = 0;
215
virtual
int
Update
() = 0;
216
};
217
218
extern
IEngineInput
*
CreateEngineInput
();
219
220
#endif
IEngineInput
Definition
input.h:210
IEngineInput::Shutdown
void Shutdown() override=0
IEngineInput::Update
virtual int Update()=0
IEngineInput::Init
virtual void Init()=0
IInput::CEvent
Definition
input.h:22
IInput::CEvent::m_aText
char m_aText[32]
Definition
input.h:27
IInput::CEvent::m_Key
int m_Key
Definition
input.h:25
IInput::CEvent::m_Flags
int m_Flags
Definition
input.h:24
IInput::CEvent::m_InputCount
uint32_t m_InputCount
Definition
input.h:26
IInput::CTouchFingerState
Definition
input.h:141
IInput::CTouchFingerState::m_PressTime
std::chrono::nanoseconds m_PressTime
Definition
input.h:162
IInput::CTouchFingerState::m_Delta
vec2 m_Delta
Definition
input.h:158
IInput::CTouchFingerState::m_Finger
CTouchFinger m_Finger
Definition
input.h:146
IInput::CTouchFingerState::m_Position
vec2 m_Position
Definition
input.h:151
IInput::CTouchFinger
Definition
input.h:127
IInput::CTouchFinger::CInput
friend class CInput
Definition
input.h:128
IInput::CTouchFinger::m_DeviceId
int64_t m_DeviceId
Definition
input.h:130
IInput::CTouchFinger::operator==
bool operator==(const CTouchFinger &Other) const
Definition
input.h:134
IInput::CTouchFinger::m_FingerId
int64_t m_FingerId
Definition
input.h:131
IInput::CTouchFinger::operator!=
bool operator!=(const CTouchFinger &Other) const
Definition
input.h:135
IInput::IJoystick
Definition
input.h:93
IInput::IJoystick::GetNumBalls
virtual int GetNumBalls() const =0
IInput::IJoystick::GetName
virtual const char * GetName() const =0
IInput::IJoystick::GetNumButtons
virtual int GetNumButtons() const =0
IInput::IJoystick::Absolute
virtual bool Absolute(float *pX, float *pY)=0
IInput::IJoystick::~IJoystick
virtual ~IJoystick()=default
IInput::IJoystick::GetNumAxes
virtual int GetNumAxes() const =0
IInput::IJoystick::Relative
virtual bool Relative(float *pX, float *pY)=0
IInput::IJoystick::GetIndex
virtual int GetIndex() const =0
IInput::IJoystick::GetNumHats
virtual int GetNumHats() const =0
IInput::IJoystick::GetAxisValue
virtual float GetAxisValue(int Axis)=0
IInput::IJoystick::GetHatValue
virtual void GetHatValue(int Hat, int(&aHatKeys)[2])=0
IInput
Definition
input.h:18
IInput::ECursorType
ECursorType
Definition
input.h:42
IInput::CURSOR_MOUSE
@ CURSOR_MOUSE
Definition
input.h:44
IInput::CURSOR_NONE
@ CURSOR_NONE
Definition
input.h:43
IInput::CURSOR_JOYSTICK
@ CURSOR_JOYSTICK
Definition
input.h:45
IInput::EnsureScreenKeyboardShown
virtual void EnsureScreenKeyboardShown()=0
IInput::GetCompositionLength
virtual int GetCompositionLength() const =0
IInput::MouseModeAbsolute
virtual void MouseModeAbsolute()=0
IInput::StopTextInput
virtual void StopTextInput()=0
IInput::FindKeyByName
virtual int FindKeyByName(const char *pKeyName) const =0
IInput::GetCandidateSelectedIndex
virtual int GetCandidateSelectedIndex() const =0
IInput::GetJoystick
virtual IJoystick * GetJoystick(size_t Index)=0
IInput::GetCompositionCursor
virtual int GetCompositionCursor() const =0
IInput::GetCandidateCount
virtual int GetCandidateCount() const =0
IInput::GetCandidate
virtual const char * GetCandidate(int Index) const =0
IInput::GetClipboardText
virtual std::string GetClipboardText()=0
IInput::NativeMousePressed
virtual bool NativeMousePressed(int Index) const =0
IInput::NativeMousePos
virtual vec2 NativeMousePos() const =0
IInput::AltIsPressed
virtual bool AltIsPressed() const =0
IInput::ShiftIsPressed
virtual bool ShiftIsPressed() const =0
IInput::SetActiveJoystick
virtual void SetActiveJoystick(size_t Index)=0
IInput::SetClipboardText
virtual void SetClipboardText(const char *pText)=0
IInput::FLAG_TEXT
@ FLAG_TEXT
Definition
input.h:34
IInput::FLAG_REPEAT
@ FLAG_REPEAT
Definition
input.h:39
IInput::FLAG_RELEASE
@ FLAG_RELEASE
Definition
input.h:33
IInput::FLAG_PRESS
@ FLAG_PRESS
Definition
input.h:32
IInput::NumJoysticks
virtual size_t NumJoysticks() const =0
IInput::MouseModeRelative
virtual void MouseModeRelative()=0
IInput::SetCompositionWindowPosition
virtual void SetCompositionWindowPosition(float X, float Y, float H)=0
IInput::StartTextInput
virtual void StartTextInput()=0
IInput::ConsumeEvents
virtual void ConsumeEvents(std::function< void(const CEvent &Event)> Consumer) const =0
IInput::TouchFingerStates
virtual const std::vector< CTouchFingerState > & TouchFingerStates() const =0
IInput::CursorRelative
ECursorType CursorRelative(float *pX, float *pY)
Definition
input.h:198
IInput::KeyIsPressed
virtual bool KeyIsPressed(int Key) const =0
IInput::Clear
virtual void Clear()=0
IInput::MouseRelative
virtual bool MouseRelative(float *pX, float *pY)=0
IInput::ModifierIsPressed
virtual bool ModifierIsPressed() const =0
IInput::GetComposition
virtual const char * GetComposition() const =0
IInput::GetActiveJoystick
virtual IJoystick * GetActiveJoystick()=0
IInput::ClearTouchDeltas
virtual void ClearTouchDeltas()=0
IInput::HasComposition
virtual bool HasComposition() const =0
IInput::KeyPress
virtual bool KeyPress(int Key) const =0
IInput::GetDropFile
virtual bool GetDropFile(char *aBuf, int Len)=0
IInput::GetUpdateTime
virtual float GetUpdateTime() const =0
IInterface::IInterface
IInterface()
Definition
kernel.h:19
CreateEngineInput
IEngineInput * CreateEngineInput()
Definition
input.cpp:987
kernel.h
MACRO_INTERFACE
#define MACRO_INTERFACE(Name)
Definition
kernel.h:25
types.h
vmath.h
vec2
vector2_base< float > vec2
Definition
vmath.h:168
src
engine
input.h
Generated by
1.18.0