-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathButtonComboManager.h
More file actions
76 lines (49 loc) · 3.25 KB
/
Copy pathButtonComboManager.h
File metadata and controls
76 lines (49 loc) · 3.25 KB
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#pragma once
#include "ButtonComboInfo.h"
#include <padscore/wpad.h>
#include <vpad/input.h>
#include <array>
#include <memory>
#include <mutex>
#include <optional>
#include <span>
#include <vector>
#include <cstdint>
#include <forward_list>
#include "ButtonTracker.h"
class ButtonComboManager {
public:
ButtonComboManager();
static std::optional<std::shared_ptr<ButtonComboInfoIF>> CreateComboInfo(const ButtonComboModule_ComboOptions &options, ButtonComboModule_Error &err);
void UpdateInputVPAD(VPADChan chan, std::span<VPADStatus> buffer, const VPADReadError *error);
void UpdateTVMenuBlocking();
void UpdateInputWPAD(WPADChan chan, WPADStatus *data);
bool hasActiveComboWithTVButton();
void AddCombo(std::shared_ptr<ButtonComboInfoIF> newComboInfo, ButtonComboModule_ComboHandle &outHandle, ButtonComboModule_ComboStatus &outStatus);
ButtonComboModule_Error RemoveCombo(ButtonComboModule_ComboHandle handle);
ButtonComboModule_Error GetButtonComboStatus(ButtonComboModule_ComboHandle handle, ButtonComboModule_ComboStatus &outComboStatus);
ButtonComboModule_Error UpdateButtonComboMeta(ButtonComboModule_ComboHandle handle, const ButtonComboModule_MetaOptions &options);
ButtonComboModule_Error UpdateButtonComboCallback(ButtonComboModule_ComboHandle handle, const ButtonComboModule_CallbackOptions &options);
ButtonComboModule_Error UpdateControllerMask(ButtonComboModule_ComboHandle handle, ButtonComboModule_ControllerTypes controllerMask, ButtonComboModule_ComboStatus &outComboStatus);
ButtonComboModule_Error UpdateButtonCombo(ButtonComboModule_ComboHandle handle, ButtonComboModule_Buttons combo, ButtonComboModule_ComboStatus &outComboStatus);
ButtonComboModule_Error UpdateHoldDuration(ButtonComboModule_ComboHandle handle, uint32_t holdDurationInFrames);
ButtonComboModule_Error GetButtonComboMeta(ButtonComboModule_ComboHandle handle, ButtonComboModule_MetaOptionsOut &outOptions);
ButtonComboModule_Error GetButtonComboCallback(ButtonComboModule_ComboHandle handle, ButtonComboModule_CallbackOptions &outOptions);
ButtonComboModule_Error GetButtonComboInfoEx(ButtonComboModule_ComboHandle handle, ButtonComboModule_ButtonComboInfoEx &outOptions);
ButtonComboModule_ComboStatus CheckComboAvailable(const ButtonComboModule_ButtonComboOptions &other);
ButtonComboModule_Error DetectButtonCombo_Blocking(const ButtonComboModule_DetectButtonComboOptions &options, ButtonComboModule_Buttons &outButtonCombo);
private:
[[nodiscard]] ButtonComboInfoIF *GetComboInfoForHandle(ButtonComboModule_ComboHandle handle) const;
int UpdateInputsLocked(ButtonComboModule_ControllerTypes controller, std::span<uint32_t> pressedButtons);
ButtonComboModule_ComboStatus CheckComboStatus(const ButtonComboInfoIF &other);
std::forward_list<std::shared_ptr<ButtonComboInfoIF>> mCombos;
std::vector<ButtonComboModule_ComboHandle> mCombosToRemove;
int mIsIterating = 0;
std::vector<uint32_t> mVPADButtonBuffer;
mutable std::recursive_mutex mMutex;
std::recursive_mutex mDetectButtonsMutex;
bool mInButtonComboDetection = false;
std::array<uint32_t, 2> mVPADSuppressed{};
std::array<ButtonTracker<uint16_t>, 7> mWPADCoreBtns;
std::array<ButtonTracker<uint32_t>, 7> mWPADExtBtns;
};