1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-11 13:10:58 +00:00

Input: Remove usage of platform dependent event IDs.

The ID property for InputEvents is set by `SceneTree` when sending the event down the tree.
So there's no need for the platform specific code to set this value when it will later be overriden anyway...
This commit is contained in:
Andreas Haas
2017-03-26 15:59:13 +02:00
parent a0b0dff6fd
commit c0b6756875
28 changed files with 104 additions and 186 deletions

View File

@@ -795,25 +795,25 @@ InputDefault::InputDefault() {
};
}
uint32_t InputDefault::joy_button(uint32_t p_last_id, int p_device, int p_button, bool p_pressed) {
void InputDefault::joy_button(int p_device, int p_button, bool p_pressed) {
_THREAD_SAFE_METHOD_;
Joypad &joy = joy_names[p_device];
//printf("got button %i, mapping is %i\n", p_button, joy.mapping);
if (joy.last_buttons[p_button] == p_pressed) {
return p_last_id;
//printf("same button value\n");
return;
}
joy.last_buttons[p_button] = p_pressed;
if (joy.mapping == -1) {
return _button_event(p_last_id, p_device, p_button, p_pressed);
_button_event(p_device, p_button, p_pressed);
return;
};
Map<int, JoyEvent>::Element *el = map_db[joy.mapping].buttons.find(p_button);
if (!el) {
//don't process un-mapped events for now, it could mess things up badly for devices with additional buttons/axis
//return _button_event(p_last_id, p_device, p_button, p_pressed);
return p_last_id;
return;
};
JoyEvent map = el->get();
@@ -822,37 +822,38 @@ uint32_t InputDefault::joy_button(uint32_t p_last_id, int p_device, int p_button
if (map.index == JOY_L2 || map.index == JOY_R2) {
float value = p_pressed ? 1.0f : 0.0f;
int axis = map.index == JOY_L2 ? JOY_ANALOG_L2 : JOY_ANALOG_R2;
p_last_id = _axis_event(p_last_id, p_device, axis, value);
_axis_event(p_device, axis, value);
}
return _button_event(p_last_id, p_device, map.index, p_pressed);
_button_event(p_device, map.index, p_pressed);
return;
};
if (map.type == TYPE_AXIS) {
return _axis_event(p_last_id, p_device, map.index, p_pressed ? 1.0 : 0.0);
_axis_event(p_device, map.index, p_pressed ? 1.0 : 0.0);
};
return p_last_id; // no event?
return; // no event?
};
uint32_t InputDefault::joy_axis(uint32_t p_last_id, int p_device, int p_axis, const JoyAxis &p_value) {
void InputDefault::joy_axis(int p_device, int p_axis, const JoyAxis &p_value) {
_THREAD_SAFE_METHOD_;
Joypad &joy = joy_names[p_device];
if (joy.last_axis[p_axis] == p_value.value) {
return p_last_id;
return;
}
if (p_value.value > joy.last_axis[p_axis]) {
if (p_value.value < joy.last_axis[p_axis] + joy.filter) {
return p_last_id;
return;
}
} else if (p_value.value > joy.last_axis[p_axis] - joy.filter) {
return p_last_id;
return;
}
if (ABS(joy.last_axis[p_axis]) > 0.5 && joy.last_axis[p_axis] * p_value.value < 0) {
@@ -860,20 +861,20 @@ uint32_t InputDefault::joy_axis(uint32_t p_last_id, int p_device, int p_axis, co
JoyAxis jx;
jx.min = p_value.min;
jx.value = p_value.value < 0 ? 0.1 : -0.1;
p_last_id = joy_axis(p_last_id, p_device, p_axis, jx);
joy_axis(p_device, p_axis, jx);
}
joy.last_axis[p_axis] = p_value.value;
float val = p_value.min == 0 ? -1.0f + 2.0f * p_value.value : p_value.value;
if (joy.mapping == -1) {
return _axis_event(p_last_id, p_device, p_axis, val);
_axis_event(p_device, p_axis, val);
};
Map<int, JoyEvent>::Element *el = map_db[joy.mapping].axis.find(p_axis);
if (!el) {
//return _axis_event(p_last_id, p_device, p_axis, p_value);
return p_last_id;
return;
};
JoyEvent map = el->get();
@@ -883,7 +884,7 @@ uint32_t InputDefault::joy_axis(uint32_t p_last_id, int p_device, int p_axis, co
if (map.index == JOY_L2 || map.index == JOY_R2) {
float value = p_value.min == 0 ? p_value.value : 0.5f + p_value.value / 2.0f;
int axis = map.index == JOY_L2 ? JOY_ANALOG_L2 : JOY_ANALOG_R2;
p_last_id = _axis_event(p_last_id, p_device, axis, value);
_axis_event(p_device, axis, value);
}
if (map.index == JOY_DPAD_UP || map.index == JOY_DPAD_DOWN) {
@@ -892,16 +893,17 @@ uint32_t InputDefault::joy_axis(uint32_t p_last_id, int p_device, int p_axis, co
if (!pressed) {
if (joy_buttons_pressed.has(_combine_device(JOY_DPAD_UP, p_device))) {
p_last_id = _button_event(p_last_id, p_device, JOY_DPAD_UP, false);
_button_event(p_device, JOY_DPAD_UP, false);
}
if (joy_buttons_pressed.has(_combine_device(JOY_DPAD_DOWN, p_device))) {
p_last_id = _button_event(p_last_id, p_device, JOY_DPAD_DOWN, false);
_button_event(p_device, JOY_DPAD_DOWN, false);
}
}
if (pressed == joy_buttons_pressed.has(_combine_device(button, p_device))) {
return p_last_id;
return;
}
return _button_event(p_last_id, p_device, button, true);
_button_event(p_device, button, true);
return;
}
if (map.index == JOY_DPAD_LEFT || map.index == JOY_DPAD_RIGHT) {
bool pressed = p_value.value != 0.0f;
@@ -909,35 +911,38 @@ uint32_t InputDefault::joy_axis(uint32_t p_last_id, int p_device, int p_axis, co
if (!pressed) {
if (joy_buttons_pressed.has(_combine_device(JOY_DPAD_LEFT, p_device))) {
p_last_id = _button_event(p_last_id, p_device, JOY_DPAD_LEFT, false);
_button_event(p_device, JOY_DPAD_LEFT, false);
}
if (joy_buttons_pressed.has(_combine_device(JOY_DPAD_RIGHT, p_device))) {
p_last_id = _button_event(p_last_id, p_device, JOY_DPAD_RIGHT, false);
_button_event(p_device, JOY_DPAD_RIGHT, false);
}
}
if (pressed == joy_buttons_pressed.has(_combine_device(button, p_device))) {
return p_last_id;
return;
}
return _button_event(p_last_id, p_device, button, true);
_button_event(p_device, button, true);
return;
}
float deadzone = p_value.min == 0 ? 0.5f : 0.0f;
bool pressed = p_value.value > deadzone ? true : false;
if (pressed == joy_buttons_pressed.has(_combine_device(map.index, p_device))) {
// button already pressed or released, this is an axis bounce value
return p_last_id;
return;
};
return _button_event(p_last_id, p_device, map.index, pressed);
_button_event(p_device, map.index, pressed);
return;
};
if (map.type == TYPE_AXIS) {
return _axis_event(p_last_id, p_device, map.index, val);
_axis_event(p_device, map.index, val);
return;
};
//printf("invalid mapping\n");
return p_last_id;
return;
};
uint32_t InputDefault::joy_hat(uint32_t p_last_id, int p_device, int p_val) {
void InputDefault::joy_hat(int p_device, int p_val) {
_THREAD_SAFE_METHOD_;
const Joypad &joy = joy_names[p_device];
@@ -953,50 +958,42 @@ uint32_t InputDefault::joy_hat(uint32_t p_last_id, int p_device, int p_val) {
int cur_val = joy_names[p_device].hat_current;
if ((p_val & HAT_MASK_UP) != (cur_val & HAT_MASK_UP)) {
p_last_id = _button_event(p_last_id, p_device, map[HAT_UP].index, p_val & HAT_MASK_UP);
_button_event(p_device, map[HAT_UP].index, p_val & HAT_MASK_UP);
};
if ((p_val & HAT_MASK_RIGHT) != (cur_val & HAT_MASK_RIGHT)) {
p_last_id = _button_event(p_last_id, p_device, map[HAT_RIGHT].index, p_val & HAT_MASK_RIGHT);
_button_event(p_device, map[HAT_RIGHT].index, p_val & HAT_MASK_RIGHT);
};
if ((p_val & HAT_MASK_DOWN) != (cur_val & HAT_MASK_DOWN)) {
p_last_id = _button_event(p_last_id, p_device, map[HAT_DOWN].index, p_val & HAT_MASK_DOWN);
_button_event(p_device, map[HAT_DOWN].index, p_val & HAT_MASK_DOWN);
};
if ((p_val & HAT_MASK_LEFT) != (cur_val & HAT_MASK_LEFT)) {
p_last_id = _button_event(p_last_id, p_device, map[HAT_LEFT].index, p_val & HAT_MASK_LEFT);
_button_event(p_device, map[HAT_LEFT].index, p_val & HAT_MASK_LEFT);
};
joy_names[p_device].hat_current = p_val;
return p_last_id;
};
uint32_t InputDefault::_button_event(uint32_t p_last_id, int p_device, int p_index, bool p_pressed) {
void InputDefault::_button_event(int p_device, int p_index, bool p_pressed) {
InputEvent ievent;
ievent.type = InputEvent::JOYPAD_BUTTON;
ievent.device = p_device;
ievent.ID = ++p_last_id;
ievent.joy_button.button_index = p_index;
ievent.joy_button.pressed = p_pressed;
parse_input_event(ievent);
return p_last_id;
};
uint32_t InputDefault::_axis_event(uint32_t p_last_id, int p_device, int p_axis, float p_value) {
void InputDefault::_axis_event(int p_device, int p_axis, float p_value) {
InputEvent ievent;
ievent.type = InputEvent::JOYPAD_MOTION;
ievent.device = p_device;
ievent.ID = ++p_last_id;
ievent.joy_motion.axis = p_axis;
ievent.joy_motion.axis_value = p_value;
parse_input_event(ievent);
return p_last_id;
};
InputDefault::JoyEvent InputDefault::_find_to_event(String p_to) {