Rework input actions to be reliable

This commit is contained in:
kobewi
2023-11-09 23:54:09 +01:00
parent 9df6491853
commit d9d0cfaf38
4 changed files with 106 additions and 63 deletions

View File

@ -44,6 +44,8 @@ class Input : public Object {
static Input *singleton;
static constexpr uint64_t MAX_EVENT = 31;
public:
enum MouseMode {
MOUSE_MODE_VISIBLE,
@ -103,11 +105,22 @@ private:
uint64_t pressed_process_frame = UINT64_MAX;
uint64_t released_physics_frame = UINT64_MAX;
uint64_t released_process_frame = UINT64_MAX;
int pressed = 0;
bool axis_pressed = false;
uint64_t pressed = 0;
bool exact = true;
float strength = 0.0f;
float raw_strength = 0.0f;
LocalVector<float> strengths;
LocalVector<float> raw_strengths;
Action() {
strengths.resize(MAX_EVENT + 1);
raw_strengths.resize(MAX_EVENT + 1);
for (uint64_t i = 0; i <= MAX_EVENT; i++) {
strengths[i] = 0.0;
raw_strengths[i] = 0.0;
}
}
};
HashMap<StringName, Action> action_state;
@ -227,6 +240,8 @@ private:
JoyAxis _get_output_axis(String output);
void _button_event(int p_device, JoyButton p_index, bool p_pressed);
void _axis_event(int p_device, JoyAxis p_axis, float p_value);
void _update_action_strength(Action &p_action, int p_event_index, float p_strength);
void _update_action_raw_strength(Action &p_action, int p_event_index, float p_strength);
void _parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_emulated);