From 1b0c7515ffe2bbb0cb8cb08bf9d21f68d4648d89 Mon Sep 17 00:00:00 2001 From: Davide Baldo Date: Fri, 9 Nov 2018 21:32:32 +0000 Subject: [PATCH] Allow to specify a custom strength when calling Input.action_press(), this allows virtual axis, mainly for mobile. --- core/os/input.cpp | 2 +- core/os/input.h | 2 +- doc/classes/Input.xml | 4 +++- main/input_default.cpp | 4 ++-- main/input_default.h | 2 +- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/core/os/input.cpp b/core/os/input.cpp index 4cd1f0b24af..1a24258a103 100644 --- a/core/os/input.cpp +++ b/core/os/input.cpp @@ -86,7 +86,7 @@ void Input::_bind_methods() { ClassDB::bind_method(D_METHOD("set_mouse_mode", "mode"), &Input::set_mouse_mode); ClassDB::bind_method(D_METHOD("get_mouse_mode"), &Input::get_mouse_mode); ClassDB::bind_method(D_METHOD("warp_mouse_position", "to"), &Input::warp_mouse_position); - ClassDB::bind_method(D_METHOD("action_press", "action"), &Input::action_press); + ClassDB::bind_method(D_METHOD("action_press", "action", "strength"), &Input::action_press); ClassDB::bind_method(D_METHOD("action_release", "action"), &Input::action_release); ClassDB::bind_method(D_METHOD("set_default_cursor_shape", "shape"), &Input::set_default_cursor_shape, DEFVAL(CURSOR_ARROW)); ClassDB::bind_method(D_METHOD("set_custom_mouse_cursor", "image", "shape", "hotspot"), &Input::set_custom_mouse_cursor, DEFVAL(CURSOR_ARROW), DEFVAL(Vector2())); diff --git a/core/os/input.h b/core/os/input.h index db523d67894..dc2c213db28 100644 --- a/core/os/input.h +++ b/core/os/input.h @@ -113,7 +113,7 @@ public: virtual Vector3 get_magnetometer() const = 0; virtual Vector3 get_gyroscope() const = 0; - virtual void action_press(const StringName &p_action) = 0; + virtual void action_press(const StringName &p_action, float p_strength = 1.f) = 0; virtual void action_release(const StringName &p_action) = 0; void get_argument_options(const StringName &p_function, int p_idx, List *r_options) const; diff --git a/doc/classes/Input.xml b/doc/classes/Input.xml index 38804e40b4a..25a2f457739 100644 --- a/doc/classes/Input.xml +++ b/doc/classes/Input.xml @@ -17,8 +17,10 @@ + + - This will simulate pressing the specified action. + This will simulate pressing the specified action. The strength can be used for non-boolean actions. diff --git a/main/input_default.cpp b/main/input_default.cpp index e8015400af2..b1084900d67 100644 --- a/main/input_default.cpp +++ b/main/input_default.cpp @@ -556,14 +556,14 @@ Point2i InputDefault::warp_mouse_motion(const Ref &p_moti void InputDefault::iteration(float p_step) { } -void InputDefault::action_press(const StringName &p_action) { +void InputDefault::action_press(const StringName &p_action, float p_strength) { Action action; action.physics_frame = Engine::get_singleton()->get_physics_frames(); action.idle_frame = Engine::get_singleton()->get_idle_frames(); action.pressed = true; - action.strength = 0.f; + action.strength = p_strength; action_state[p_action] = action; } diff --git a/main/input_default.h b/main/input_default.h index 4964b9a83c2..b6767669f08 100644 --- a/main/input_default.h +++ b/main/input_default.h @@ -227,7 +227,7 @@ public: void set_main_loop(MainLoop *p_main_loop); void set_mouse_position(const Point2 &p_posf); - void action_press(const StringName &p_action); + void action_press(const StringName &p_action, float p_strength = 1.f); void action_release(const StringName &p_action); void iteration(float p_step);