DDraceNetwork 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 const char *KeyName(int Key) const = 0;
90 virtual int FindKeyByName(const char *pKeyName) const = 0;
91
92 // joystick
94 {
95 public:
96 virtual ~IJoystick() = default;
97 virtual int GetIndex() const = 0;
98 virtual const char *GetName() const = 0;
99 virtual int GetNumAxes() const = 0;
100 virtual int GetNumButtons() const = 0;
101 virtual int GetNumBalls() const = 0;
102 virtual int GetNumHats() const = 0;
103 virtual float GetAxisValue(int Axis) = 0;
104 virtual void GetHatValue(int Hat, int (&aHatKeys)[2]) = 0;
105 virtual bool Relative(float *pX, float *pY) = 0;
106 virtual bool Absolute(float *pX, float *pY) = 0;
107 };
108 virtual size_t NumJoysticks() const = 0;
109 virtual IJoystick *GetJoystick(size_t Index) = 0;
111 virtual void SetActiveJoystick(size_t Index) = 0;
112
113 // mouse
114 virtual vec2 NativeMousePos() const = 0;
115 virtual bool NativeMousePressed(int Index) const = 0;
116 virtual void MouseModeRelative() = 0;
117 virtual void MouseModeAbsolute() = 0;
118 virtual bool MouseRelative(float *pX, float *pY) = 0;
119
120 // touch
128 {
129 friend class CInput;
130
131 int64_t m_DeviceId;
132 int64_t m_FingerId;
133
134 public:
135 bool operator==(const CTouchFinger &Other) const { return m_DeviceId == Other.m_DeviceId && m_FingerId == Other.m_FingerId; }
136 bool operator!=(const CTouchFinger &Other) const { return !(*this == Other); }
137 };
138
142 {
143 public:
163 std::chrono::nanoseconds m_PressTime;
164 };
165
172 virtual const std::vector<CTouchFingerState> &TouchFingerStates() const = 0;
178 virtual void ClearTouchDeltas() = 0;
179
180 // clipboard
181 virtual std::string GetClipboardText() = 0;
182 virtual void SetClipboardText(const char *pText) = 0;
183
184 // text editing
185 virtual void StartTextInput() = 0;
186 virtual void StopTextInput() = 0;
187 virtual void EnsureScreenKeyboardShown() = 0;
188 virtual const char *GetComposition() const = 0;
189 virtual bool HasComposition() const = 0;
190 virtual int GetCompositionCursor() const = 0;
191 virtual int GetCompositionLength() const = 0;
192 virtual const char *GetCandidate(int Index) const = 0;
193 virtual int GetCandidateCount() const = 0;
194 virtual int GetCandidateSelectedIndex() const = 0;
195 virtual void SetCompositionWindowPosition(float X, float Y, float H) = 0;
196
197 virtual bool GetDropFile(char *aBuf, int Len) = 0;
198
199 ECursorType CursorRelative(float *pX, float *pY)
200 {
201 if(MouseRelative(pX, pY))
202 return CURSOR_MOUSE;
203 IJoystick *pJoystick = GetActiveJoystick();
204 if(pJoystick && pJoystick->Relative(pX, pY))
205 return CURSOR_JOYSTICK;
206 return CURSOR_NONE;
207 }
208};
209
210class IEngineInput : public IInput
211{
212 MACRO_INTERFACE("engineinput")
213public:
214 virtual void Init() = 0;
215 void Shutdown() override = 0;
216 virtual int Update() = 0;
217};
218
220
221#endif
Definition input.h:211
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:142
std::chrono::nanoseconds m_PressTime
Definition input.h:163
vec2 m_Delta
Definition input.h:159
CTouchFinger m_Finger
Definition input.h:147
vec2 m_Position
Definition input.h:152
Definition input.h:128
friend class CInput
Definition input.h:129
int64_t m_DeviceId
Definition input.h:131
bool operator==(const CTouchFinger &Other) const
Definition input.h:135
int64_t m_FingerId
Definition input.h:132
bool operator!=(const CTouchFinger &Other) const
Definition input.h:136
Definition input.h:94
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:199
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 const char * KeyName(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:943
#define MACRO_INTERFACE(Name)
Definition kernel.h:25
vector2_base< float > vec2
Definition vmath.h:161