-Modified Input and added is_action_just_pressed() as well as is_action_just_released()
This commit is contained in:
@@ -71,13 +71,13 @@ InputDefault::SpeedTrack::SpeedTrack() {
|
||||
reset();
|
||||
}
|
||||
|
||||
bool InputDefault::is_key_pressed(int p_scancode) {
|
||||
bool InputDefault::is_key_pressed(int p_scancode) const {
|
||||
|
||||
_THREAD_SAFE_METHOD_
|
||||
return keys_pressed.has(p_scancode);
|
||||
}
|
||||
|
||||
bool InputDefault::is_mouse_button_pressed(int p_button) {
|
||||
bool InputDefault::is_mouse_button_pressed(int p_button) const {
|
||||
|
||||
_THREAD_SAFE_METHOD_
|
||||
return (mouse_button_mask&(1<<p_button))!=0;
|
||||
@@ -89,14 +89,16 @@ static int _combine_device(int p_value,int p_device) {
|
||||
return p_value|(p_device<<20);
|
||||
}
|
||||
|
||||
bool InputDefault::is_joy_button_pressed(int p_device, int p_button) {
|
||||
bool InputDefault::is_joy_button_pressed(int p_device, int p_button) const{
|
||||
|
||||
_THREAD_SAFE_METHOD_
|
||||
return joy_buttons_pressed.has(_combine_device(p_button,p_device));
|
||||
}
|
||||
|
||||
bool InputDefault::is_action_pressed(const StringName& p_action) {
|
||||
bool InputDefault::is_action_pressed(const StringName& p_action) const{
|
||||
|
||||
return action_state.has(p_action) && action_state[p_action].pressed;
|
||||
#if 0
|
||||
if (custom_action_press.has(p_action))
|
||||
return true; //simpler
|
||||
|
||||
@@ -147,9 +149,37 @@ bool InputDefault::is_action_pressed(const StringName& p_action) {
|
||||
}
|
||||
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
float InputDefault::get_joy_axis(int p_device,int p_axis) {
|
||||
bool InputDefault::is_action_just_pressed(const StringName& p_action) const {
|
||||
|
||||
const Map<StringName,Action>::Element *E=action_state.find(p_action);
|
||||
if (!E)
|
||||
return false;
|
||||
|
||||
if (OS::get_singleton()->is_in_fixed_frame()) {
|
||||
return E->get().pressed && E->get().fixed_frame==OS::get_singleton()->get_fixed_frames();
|
||||
} else {
|
||||
return E->get().pressed && E->get().idle_frame==OS::get_singleton()->get_idle_frames();
|
||||
}
|
||||
}
|
||||
|
||||
bool InputDefault::is_action_just_released(const StringName& p_action) const{
|
||||
|
||||
const Map<StringName,Action>::Element *E=action_state.find(p_action);
|
||||
if (!E)
|
||||
return false;
|
||||
|
||||
if (OS::get_singleton()->is_in_fixed_frame()) {
|
||||
return !E->get().pressed && E->get().fixed_frame==OS::get_singleton()->get_fixed_frames();
|
||||
} else {
|
||||
return !E->get().pressed && E->get().idle_frame==OS::get_singleton()->get_idle_frames();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
float InputDefault::get_joy_axis(int p_device,int p_axis) const{
|
||||
|
||||
_THREAD_SAFE_METHOD_
|
||||
int c = _combine_device(p_axis,p_device);
|
||||
@@ -247,19 +277,19 @@ void InputDefault::joy_connection_changed(int p_idx, bool p_connected, String p_
|
||||
emit_signal("joy_connection_changed", p_idx, p_connected);
|
||||
};
|
||||
|
||||
Vector3 InputDefault::get_accelerometer() {
|
||||
Vector3 InputDefault::get_accelerometer() const{
|
||||
|
||||
_THREAD_SAFE_METHOD_
|
||||
return accelerometer;
|
||||
}
|
||||
|
||||
Vector3 InputDefault::get_magnetometer() {
|
||||
Vector3 InputDefault::get_magnetometer() const{
|
||||
|
||||
_THREAD_SAFE_METHOD_
|
||||
return magnetometer;
|
||||
}
|
||||
|
||||
Vector3 InputDefault::get_gyroscope() {
|
||||
Vector3 InputDefault::get_gyroscope() const {
|
||||
|
||||
_THREAD_SAFE_METHOD_
|
||||
return gyroscope;
|
||||
@@ -341,6 +371,23 @@ void InputDefault::parse_input_event(const InputEvent& p_event) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (!p_event.is_echo()) {
|
||||
for (const Map<StringName,InputMap::Action>::Element *E=InputMap::get_singleton()->get_action_map().front();E;E=E->next()) {
|
||||
|
||||
if (InputMap::get_singleton()->event_is_action(p_event,E->key())) {
|
||||
|
||||
Action action;
|
||||
action.fixed_frame=OS::get_singleton()->get_fixed_frames();
|
||||
action.idle_frame=OS::get_singleton()->get_idle_frames();
|
||||
action.pressed=p_event.is_pressed();
|
||||
|
||||
action_state[E->key()]=action;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (main_loop)
|
||||
main_loop->input_event(p_event);
|
||||
|
||||
@@ -441,21 +488,25 @@ void InputDefault::iteration(float p_step) {
|
||||
|
||||
void InputDefault::action_press(const StringName& p_action) {
|
||||
|
||||
if (custom_action_press.has(p_action)) {
|
||||
Action action;
|
||||
|
||||
action.fixed_frame=OS::get_singleton()->get_fixed_frames();
|
||||
action.idle_frame=OS::get_singleton()->get_idle_frames();
|
||||
action.pressed=true;
|
||||
|
||||
action_state[p_action]=action;
|
||||
|
||||
custom_action_press[p_action]++;
|
||||
} else {
|
||||
custom_action_press[p_action]=1;
|
||||
}
|
||||
}
|
||||
|
||||
void InputDefault::action_release(const StringName& p_action){
|
||||
|
||||
ERR_FAIL_COND(!custom_action_press.has(p_action));
|
||||
custom_action_press[p_action]--;
|
||||
if (custom_action_press[p_action]==0) {
|
||||
custom_action_press.erase(p_action);
|
||||
}
|
||||
Action action;
|
||||
|
||||
action.fixed_frame=OS::get_singleton()->get_fixed_frames();
|
||||
action.idle_frame=OS::get_singleton()->get_idle_frames();
|
||||
action.pressed=true;
|
||||
|
||||
action_state[p_action]=action;
|
||||
}
|
||||
|
||||
void InputDefault::set_emulate_touch(bool p_emulate) {
|
||||
|
||||
Reference in New Issue
Block a user