-
Notifications
You must be signed in to change notification settings - Fork 20
/
menucontrols.cpp
62 lines (50 loc) · 1.85 KB
/
menucontrols.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "menucontrols.h"
#include <inc/enums.h>
#include <inc/natives.h>
#include "menukeyboard.h"
namespace NativeMenu {
MenuControls::MenuControls()
: ControlKeys{}
, controlCurr{}
, controlPrev{}
, pressTime{}
, releaseTime{} {
std::fill(controlPrev, std::end(controlPrev), false);
std::fill(controlCurr, std::end(controlCurr), false);
std::fill(ControlKeys, std::end(ControlKeys), -1);
}
bool MenuControls::IsKeyPressed(ControlType control) {
return IsKeyDown(ControlKeys[control]);
}
bool MenuControls::IsKeyJustPressed(ControlType control) {
return controlCurr[control] && !controlPrev[control];
}
bool MenuControls::IsKeyJustReleased(ControlType control) {
return !controlCurr[control] && controlPrev[control];
}
bool MenuControls::IsKeyDownFor(ControlType control, unsigned long long millis) {
auto tNow = GetTickCount64();
if (IsKeyJustPressed(control)) {
pressTime[control] = tNow;
}
return IsKeyPressed(control) && (tNow - pressTime[control]) >= millis;
}
void MenuControls::Update() {
for (int i = 0; i < SIZEOF_ControlType; i++) {
controlPrev[i] = controlCurr[i];
controlCurr[i] = IsKeyDown(ControlKeys[i]);
}
for (const auto& input : nControlCurr) {
nControlPrev[input.first] = nControlCurr[input.first];
nControlCurr[input.first] = PAD::IS_DISABLED_CONTROL_PRESSED(0, input.first);
}
}
bool MenuControls::IsControlDownFor(eControl control, unsigned long long millis) {
auto tNow = GetTickCount64();
if (PAD::IS_DISABLED_CONTROL_JUST_PRESSED(0, control)) {
nPressTime[control] = tNow;
}
return PAD::IS_DISABLED_CONTROL_PRESSED(0, control) &&
(tNow - nPressTime[control]) >= millis;
}
}