fix: PlayerInput now normalizes input after un/pause
This commit is contained in:
parent
5d0ae90fbc
commit
10535a675d
|
@ -1,4 +1,5 @@
|
||||||
#include "player_input.h"
|
#include "player_input.h"
|
||||||
|
#include "scene/main/scene_tree.h"
|
||||||
|
|
||||||
String PlayerInput::sig_movement_input{ "movement_input" };
|
String PlayerInput::sig_movement_input{ "movement_input" };
|
||||||
String PlayerInput::sig_look_input{ "look_input" };
|
String PlayerInput::sig_look_input{ "look_input" };
|
||||||
|
@ -20,13 +21,33 @@ void PlayerInput::_bind_methods() {
|
||||||
ADD_SIGNAL(MethodInfo(sig_crouch, PropertyInfo(Variant::BOOL, "is_crouching")));
|
ADD_SIGNAL(MethodInfo(sig_crouch, PropertyInfo(Variant::BOOL, "is_crouching")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PlayerInput::normalize_input() {
|
||||||
|
emit_signal(sig_movement_input, Vector2());
|
||||||
|
emit_signal(sig_look_input, Vector2());
|
||||||
|
emit_signal(sig_primary_fire, false);
|
||||||
|
emit_signal(sig_alt_mode, false);
|
||||||
|
emit_signal(sig_run, false);
|
||||||
|
emit_signal(sig_crouch, false);
|
||||||
|
}
|
||||||
|
|
||||||
void PlayerInput::_notification(int what) {
|
void PlayerInput::_notification(int what) {
|
||||||
if (Engine::get_singleton()->is_editor_hint()) {
|
if (Engine::get_singleton()->is_editor_hint()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (what == NOTIFICATION_READY) {
|
switch (what) {
|
||||||
set_process_unhandled_input(true);
|
case NOTIFICATION_READY:
|
||||||
Input::get_singleton()->set_mouse_mode(Input::MouseMode::MOUSE_MODE_CAPTURED);
|
set_process(true);
|
||||||
|
set_process_unhandled_input(true);
|
||||||
|
Input::get_singleton()->set_mouse_mode(Input::MouseMode::MOUSE_MODE_CAPTURED);
|
||||||
|
return;
|
||||||
|
case NOTIFICATION_PROCESS: {
|
||||||
|
bool const is_paused{ get_tree()->is_paused() };
|
||||||
|
if (is_paused != this->was_paused) {
|
||||||
|
this->was_paused = is_paused;
|
||||||
|
callable_mp(this, &self_type::normalize_input).call_deferred();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
class PlayerInput : public Node {
|
class PlayerInput : public Node {
|
||||||
GDCLASS(PlayerInput, Node);
|
GDCLASS(PlayerInput, Node);
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
void normalize_input();
|
||||||
void _notification(int what);
|
void _notification(int what);
|
||||||
virtual void unhandled_input(Ref<InputEvent> const &event) override;
|
virtual void unhandled_input(Ref<InputEvent> const &event) override;
|
||||||
|
|
||||||
|
@ -18,6 +19,9 @@ public:
|
||||||
static String sig_run;
|
static String sig_run;
|
||||||
static String sig_jump;
|
static String sig_jump;
|
||||||
static String sig_crouch;
|
static String sig_crouch;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool was_paused{ false };
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // !PLAYER_INPUT_H
|
#endif // !PLAYER_INPUT_H
|
||||||
|
|
Loading…
Reference in a new issue