Polyphase Game Engine
Loading...
Searching...
No Matches
PlayerInputSystem.h
Go to the documentation of this file.
1#pragma once
2
3#include "InputTypes.h"
4
5#include <string>
6#include <vector>
7#include <unordered_map>
8#include <stdint.h>
9
10enum class InputSourceType : uint8_t
11{
17};
18
19enum class AxisDirection : uint8_t
20{
23 Full
24};
25
26enum class TriggerMode : uint8_t
27{
29 Hold,
32};
33
45
53
55{
56 bool isActive = false;
57 bool wasJustActivated = false;
58 bool wasJustDeactivated = false;
59 float value = 0.0f;
60
61 // Internal tracking
62 bool rawDown = false;
63 bool prevRawDown = false;
64 float holdTimer = 0.0f;
65 bool holdTriggered = false;
66 int32_t pressCount = 0;
67 float multiPressTimer = 0.0f;
68};
69
71{
72 std::string name;
73 std::string category;
74 std::vector<InputActionBinding> bindings;
77};
78
80{
81public:
82
83 static void Create();
84 static void Destroy();
85 static PlayerInputSystem* Get();
86
87 void Update(float deltaTime);
88
89 // Registration
90 void RegisterAction(const std::string& category, const std::string& name,
92 void UnregisterAction(const std::string& category, const std::string& name);
93 void AddBinding(const std::string& category, const std::string& name,
94 const InputActionBinding& binding);
95 void ClearBindings(const std::string& category, const std::string& name);
96 void SetTrigger(const std::string& category, const std::string& name,
97 const InputActionTrigger& trigger);
98
99 // Queries (playerIndex: -1 = any, 0-3 = specific gamepad/pointer)
100 bool IsActionActive(const std::string& category, const std::string& name, int32_t playerIndex = -1) const;
101 bool WasActionJustActivated(const std::string& category, const std::string& name, int32_t playerIndex = -1) const;
102 bool WasActionJustDeactivated(const std::string& category, const std::string& name, int32_t playerIndex = -1) const;
103 float GetActionValue(const std::string& category, const std::string& name, int32_t playerIndex = -1) const;
104
105 // Connected players
106 int32_t GetPlayersConnected() const;
107
108 // Bulk access (for editor/debugger)
109 const std::vector<InputAction>& GetActions() const;
110 InputAction* FindAction(const std::string& category, const std::string& name);
111 const InputAction* FindAction(const std::string& category, const std::string& name) const;
112
113 // Serialization
114 void SaveProjectActions();
115 void LoadProjectActions();
116
117 // Enable/disable
118 void SetEnabled(bool enabled);
119 bool IsEnabled() const;
120
121private:
122
123 static PlayerInputSystem* sInstance;
124
126
127 bool PollBindingDown(const InputActionBinding& binding, int32_t playerIndex = -1) const;
128 float PollBindingValue(const InputActionBinding& binding, int32_t playerIndex = -1) const;
129 bool PollActionRawDown(const InputAction& action, int32_t playerIndex = -1) const;
130 float PollActionRawValue(const InputAction& action, int32_t playerIndex = -1) const;
131 bool CheckModifiers(const InputActionBinding& binding) const;
132 void EvaluateTrigger(InputAction& action, float deltaTime);
133
134 std::string MakeKey(const std::string& category, const std::string& name) const;
135 bool LoadFromJsonFile(const std::string& filePath);
136 void RebuildLookup();
137
138 std::vector<InputAction> mActions;
139 std::unordered_map<std::string, size_t> mActionLookup;
140 bool mEnabled = true;
141};
bool Update()
Definition Engine.cpp:710
AxisDirection
Definition PlayerInputSystem.h:20
InputSourceType
Definition PlayerInputSystem.h:11
TriggerMode
Definition PlayerInputSystem.h:27
Definition PlayerInputSystem.h:80
void SetEnabled(bool enabled)
Definition PlayerInputSystem.cpp:505
void RegisterAction(const std::string &category, const std::string &name, TriggerMode mode=TriggerMode::SinglePress)
Definition PlayerInputSystem.cpp:356
void SetTrigger(const std::string &category, const std::string &name, const InputActionTrigger &trigger)
Definition PlayerInputSystem.cpp:405
void UnregisterAction(const std::string &category, const std::string &name)
Definition PlayerInputSystem.cpp:374
void AddBinding(const std::string &category, const std::string &name, const InputActionBinding &binding)
Definition PlayerInputSystem.cpp:386
void LoadProjectActions()
Definition PlayerInputSystem.cpp:656
bool WasActionJustActivated(const std::string &category, const std::string &name, int32_t playerIndex=-1) const
Definition PlayerInputSystem.cpp:429
int32_t GetPlayersConnected() const
Definition PlayerInputSystem.cpp:467
bool IsActionActive(const std::string &category, const std::string &name, int32_t playerIndex=-1) const
Definition PlayerInputSystem.cpp:417
bool IsEnabled() const
Definition PlayerInputSystem.cpp:506
void SaveProjectActions()
Definition PlayerInputSystem.cpp:630
void ClearBindings(const std::string &category, const std::string &name)
Definition PlayerInputSystem.cpp:396
bool WasActionJustDeactivated(const std::string &category, const std::string &name, int32_t playerIndex=-1) const
Definition PlayerInputSystem.cpp:445
InputAction * FindAction(const std::string &category, const std::string &name)
Definition PlayerInputSystem.cpp:485
const std::vector< InputAction > & GetActions() const
Definition PlayerInputSystem.cpp:480
float GetActionValue(const std::string &category, const std::string &name, int32_t playerIndex=-1) const
Definition PlayerInputSystem.cpp:456
static void Create()
Definition PlayerInputSystem.cpp:21
static void Destroy()
Definition PlayerInputSystem.cpp:27
static PlayerInputSystem * Get()
Definition PlayerInputSystem.cpp:36
Definition PlayerInputSystem.h:35
AxisDirection axisDirection
Definition PlayerInputSystem.h:38
InputSourceType sourceType
Definition PlayerInputSystem.h:36
float axisThreshold
Definition PlayerInputSystem.h:39
bool requireCtrl
Definition PlayerInputSystem.h:41
bool requireAlt
Definition PlayerInputSystem.h:43
bool requireShift
Definition PlayerInputSystem.h:42
int32_t code
Definition PlayerInputSystem.h:37
int32_t gamepadIndex
Definition PlayerInputSystem.h:40
Definition PlayerInputSystem.h:55
bool isActive
Definition PlayerInputSystem.h:56
int32_t pressCount
Definition PlayerInputSystem.h:66
bool holdTriggered
Definition PlayerInputSystem.h:65
float holdTimer
Definition PlayerInputSystem.h:64
bool wasJustActivated
Definition PlayerInputSystem.h:57
bool wasJustDeactivated
Definition PlayerInputSystem.h:58
float value
Definition PlayerInputSystem.h:59
float multiPressTimer
Definition PlayerInputSystem.h:67
bool prevRawDown
Definition PlayerInputSystem.h:63
bool rawDown
Definition PlayerInputSystem.h:62
Definition PlayerInputSystem.h:47
float multiPressWindow
Definition PlayerInputSystem.h:51
TriggerMode mode
Definition PlayerInputSystem.h:48
int32_t multiPressCount
Definition PlayerInputSystem.h:50
float holdDuration
Definition PlayerInputSystem.h:49
Definition PlayerInputSystem.h:71
std::vector< InputActionBinding > bindings
Definition PlayerInputSystem.h:74
InputActionState state
Definition PlayerInputSystem.h:76
InputActionTrigger trigger
Definition PlayerInputSystem.h:75
std::string name
Definition PlayerInputSystem.h:72
std::string category
Definition PlayerInputSystem.h:73