-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathButtonComboManager.h
More file actions
68 lines (42 loc) · 3.02 KB
/
Copy pathButtonComboManager.h
File metadata and controls
68 lines (42 loc) · 3.02 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
#pragma once
#include "ButtonComboInfo.h"
#include <padscore/wpad.h>
#include <vpad/input.h>
#include <memory>
#include <mutex>
#include <optional>
#include <vector>
#include <cstdint>
#include <forward_list>
class ButtonComboManager {
public:
ButtonComboManager();
static std::optional<std::shared_ptr<ButtonComboInfoIF>> CreateComboInfo(const ButtonComboModule_ComboOptions &options, ButtonComboModule_Error &err);
void UpdateInputVPAD(VPADChan chan, const VPADStatus *buffer, uint32_t bufferSize, const VPADReadError *error);
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;
void 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;
};