Divide Framework 0.1
A free and open-source 3D Framework under heavy development
Loading...
Searching...
No Matches
AutoKeyRepeat.cpp
Go to the documentation of this file.
1
2
4
5namespace Divide {
6namespace Input {
7
8AutoRepeatKey::AutoRepeatKey(const D64 repeatDelay, const D64 initialDelay) noexcept
9 : _key(nullptr, 0),
10 _elapsed(0.0),
11 _delay(initialDelay),
12 _repeatDelay(repeatDelay),
13 _initialDelay(initialDelay)
14{
15}
16
17void AutoRepeatKey::begin(const KeyEvent &evt) noexcept {
18 _key = evt;
19 _elapsed = 0.0;
20 _delay = _initialDelay;
21}
22
23void AutoRepeatKey::end( [[maybe_unused]] const KeyEvent &evt ) noexcept
24{
25 _key._key = KeyCode::KC_UNASSIGNED;
26}
27
28// Inject key repeats if the _repeatDelay expired between calls
29void AutoRepeatKey::update(const U64 deltaTimeUS) {
31 return;
32 }
33
35 if (_elapsed < _delay) return;
36
39
40 do {
43 } while (_elapsed >= _repeatDelay);
44
45 _elapsed = 0.0;
46}
47
48}; // namespace Input
49}; // namespace Divide
void begin(const KeyEvent &evt) noexcept
Called when a key is pressed.
virtual void repeatKey(const Input::KeyEvent &evt)=0
Override this to define custom events for key repeats.
AutoRepeatKey(D64 repeatDelay=0.035, D64 initialDelay=0.300) noexcept
Default constructor.
void end(const KeyEvent &evt) noexcept
Called when a key is released.
void update(U64 deltaTimeUS)
Update the internal time interval between frames (microseconds)
D64 _repeatDelay
Time intervals between key injections.
Definition: AutoKeyRepeat.h:51
constexpr T MicrosecondsToSeconds(U a) noexcept
Definition: MathHelper.inl:725
Handle console commands that start with a forward slash.
Definition: AIProcessor.cpp:7
double D64
uint64_t U64