Fixed signal/function name confusion when adding and removing input resources.
This commit is contained in:
@@ -26,8 +26,8 @@ void InputResource::update_buttons(const Ref<InputEvent> event, const float delt
|
|||||||
if (event->is_action_pressed(action->get_action_name()) && action_strength >= action_deadzone)
|
if (event->is_action_pressed(action->get_action_name()) && action_strength >= action_deadzone)
|
||||||
{
|
{
|
||||||
action->set_active(true);
|
action->set_active(true);
|
||||||
const StringName pressed_callback = StringName("_on_") + action->get_action_name() + INPUTACTION_SUFFIX_PRESSED;
|
const StringName &pressed_signal = StringName("_on_") + action->get_action_name() + INPUTACTION_SUFFIX_PRESSED + INPUTHANDLER_SUFFIX_SIGNAL;
|
||||||
if (this->has_signal(pressed_callback)) this->emit_signal(pressed_callback);
|
if (this->has_signal(pressed_signal)) this->emit_signal(pressed_signal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -35,8 +35,8 @@ void InputResource::update_buttons(const Ref<InputEvent> event, const float delt
|
|||||||
if (event->is_action_released(action->get_action_name()) || (event->is_action_pressed(action->get_action_name()) && action_strength < action_deadzone))
|
if (event->is_action_released(action->get_action_name()) || (event->is_action_pressed(action->get_action_name()) && action_strength < action_deadzone))
|
||||||
{
|
{
|
||||||
action->set_active(false);
|
action->set_active(false);
|
||||||
const StringName released_callback = StringName("_on_") + action->get_action_name() + INPUTACTION_SUFFIX_RELEASED;
|
const StringName &released_signal = StringName("_on_") + action->get_action_name() + INPUTACTION_SUFFIX_RELEASED + INPUTHANDLER_SUFFIX_SIGNAL;
|
||||||
if (this->has_signal(released_callback)) this->emit_signal(released_callback);
|
if (this->has_signal(released_signal)) this->emit_signal(released_signal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -49,13 +49,13 @@ void InputResource::update_axes(const float delta)
|
|||||||
const InputAxis *axis = cast_to<InputAxis>(this->input_axes[i]);
|
const InputAxis *axis = cast_to<InputAxis>(this->input_axes[i]);
|
||||||
const StringName prefix = StringName("_on_") + axis->get_axis_name();
|
const StringName prefix = StringName("_on_") + axis->get_axis_name();
|
||||||
|
|
||||||
const StringName signal_1d = prefix + INPUTAXIS_ONE_DIMENSIONAL_SUFFIX;
|
const StringName &signal_1d = prefix + INPUTAXIS_ONE_DIMENSIONAL_SUFFIX + INPUTHANDLER_SUFFIX_SIGNAL;
|
||||||
if (this->has_signal(signal_1d)) this->emit_signal(signal_1d, delta, axis->get_x_axis());
|
if (this->has_signal(signal_1d)) this->emit_signal(signal_1d, delta, axis->get_x_axis());
|
||||||
|
|
||||||
const StringName signal_2d = prefix + INPUTAXIS_TWO_DIMENSIONAL_SUFFIX;
|
const StringName &signal_2d = prefix + INPUTAXIS_TWO_DIMENSIONAL_SUFFIX + INPUTHANDLER_SUFFIX_SIGNAL;
|
||||||
if (this->has_signal(signal_2d)) this->emit_signal(signal_2d, delta, axis->get_lateral_vector());
|
if (this->has_signal(signal_2d)) this->emit_signal(signal_2d, delta, axis->get_lateral_vector());
|
||||||
|
|
||||||
const StringName signal_3d = prefix + INPUTAXIS_THREE_DIMENSIONAL_SUFFIX;
|
const StringName &signal_3d = prefix + INPUTAXIS_THREE_DIMENSIONAL_SUFFIX + INPUTHANDLER_SUFFIX_SIGNAL;
|
||||||
if (this->has_signal(signal_3d)) this->emit_signal(signal_3d, delta, axis->get_spherical_vector());
|
if (this->has_signal(signal_3d)) this->emit_signal(signal_3d, delta, axis->get_spherical_vector());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -65,10 +65,10 @@ void InputResource::update_axes_mouse_event(const Ref<InputEventMouseMotion> eve
|
|||||||
for (uint8_t i = 0; i < this->input_axes.size(); i++)
|
for (uint8_t i = 0; i < this->input_axes.size(); i++)
|
||||||
{
|
{
|
||||||
const InputAxis *axis = cast_to<InputAxis>(this->input_axes[i]);
|
const InputAxis *axis = cast_to<InputAxis>(this->input_axes[i]);
|
||||||
const StringName signal = StringName("_on_") + axis->get_axis_name() + INPUTAXIS_TWO_DIMENSIONAL_SUFFIX;
|
const StringName signal = StringName("_on_") + axis->get_axis_name() + INPUTAXIS_TWO_DIMENSIONAL_SUFFIX + INPUTHANDLER_SUFFIX_SIGNAL;
|
||||||
if (axis->get_include_mouse() && this->has_signal(signal))
|
if (axis->get_include_mouse() && this->has_signal(signal))
|
||||||
{
|
{
|
||||||
this->emit_signal(signal, delta, event->get_relative() * 0.000001f / delta);
|
this->emit_signal(signal, delta, event->get_relative() * 0.0001f / delta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,8 @@
|
|||||||
#include <godot_cpp/classes/resource.hpp>
|
#include <godot_cpp/classes/resource.hpp>
|
||||||
using namespace godot;
|
using namespace godot;
|
||||||
|
|
||||||
|
#define INPUTHANDLER_SUFFIX_SIGNAL StringName("_signal")
|
||||||
|
|
||||||
#define INPUTACTION_SUFFIX_PRESSED StringName("_pressed")
|
#define INPUTACTION_SUFFIX_PRESSED StringName("_pressed")
|
||||||
#define INPUTACTION_SUFFIX_RELEASED StringName("_released")
|
#define INPUTACTION_SUFFIX_RELEASED StringName("_released")
|
||||||
|
|
||||||
|
|||||||
@@ -55,14 +55,15 @@ void InputHandler::add_input_resource(Node *target, InputResource *resource)
|
|||||||
|
|
||||||
for (uint8_t s = 0; s < 2; s++)
|
for (uint8_t s = 0; s < 2; s++)
|
||||||
{
|
{
|
||||||
const StringName signal_name = StringName("_on_") + action->get_action_name() + this->input_action_suffixes[s];
|
const StringName callback_name = StringName("_on_") + action->get_action_name() + this->input_action_suffixes[s];
|
||||||
if (target->has_method(signal_name))
|
if (target->has_method(callback_name))
|
||||||
{
|
{
|
||||||
if (!resource->has_signal(signal_name))
|
const StringName signal_name = callback_name + INPUTHANDLER_SUFFIX_SIGNAL;
|
||||||
{
|
if (!resource->has_signal(signal_name)) resource->add_user_signal(signal_name);
|
||||||
resource->add_user_signal(signal_name);
|
|
||||||
resource->connect(signal_name, Callable(target, signal_name));
|
const Callable &callable = Callable(target, callback_name);
|
||||||
}
|
if (!resource->is_connected(signal_name, callable))
|
||||||
|
resource->connect(signal_name, callable);
|
||||||
|
|
||||||
const TypedArray<InputEvent> &events = action->get_input_events();
|
const TypedArray<InputEvent> &events = action->get_input_events();
|
||||||
for (uint8_t e = 0; e < events.size(); e++)
|
for (uint8_t e = 0; e < events.size(); e++)
|
||||||
@@ -83,12 +84,13 @@ void InputHandler::add_input_resource(Node *target, InputResource *resource)
|
|||||||
|
|
||||||
for (uint8_t s = 0; s <= axis_dimensions; s++)
|
for (uint8_t s = 0; s <= axis_dimensions; s++)
|
||||||
{
|
{
|
||||||
const StringName signal_name = StringName("_on_") + axis->get_axis_name() + this->input_axis_suffixes[s];
|
const StringName callback_name = StringName("_on_") + axis->get_axis_name() + this->input_axis_suffixes[s];
|
||||||
const Callable &callable = Callable(target, signal_name);
|
if (target->has_method(callback_name))
|
||||||
if (target->has_method(signal_name) && !resource->has_signal(signal_name))
|
|
||||||
{
|
{
|
||||||
resource->add_user_signal(signal_name);
|
const StringName signal_name = callback_name + INPUTHANDLER_SUFFIX_SIGNAL;
|
||||||
resource->connect(signal_name, callable);
|
if (!resource->has_signal(signal_name)) resource->add_user_signal(signal_name);
|
||||||
|
const Callable &callable = Callable(target, callback_name);
|
||||||
|
if (!resource->is_connected(signal_name, callable)) resource->connect(signal_name, callable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,12 +185,23 @@ void InputHandler::remove_input_resource(Node *target, InputResource *resource)
|
|||||||
input->action_release(action->get_action_name());
|
input->action_release(action->get_action_name());
|
||||||
input_map->action_erase_events(action->get_action_name());
|
input_map->action_erase_events(action->get_action_name());
|
||||||
|
|
||||||
const StringName signal_name_pressed = StringName("_on_") + action->get_action_name() + input_action_suffixes[0];
|
const StringName &name_prefix = StringName("_on_") + action->get_action_name();
|
||||||
if (target->has_method(signal_name_pressed)) resource->disconnect(signal_name_pressed, Callable(target, signal_name_pressed));
|
|
||||||
|
|
||||||
const StringName signal_name_released = StringName("_on_") + action->get_action_name() + input_action_suffixes[1];
|
const StringName &callback_name_pressed = name_prefix + input_action_suffixes[0];
|
||||||
if (target->has_method(signal_name_released)) resource->disconnect(signal_name_released, Callable(target, signal_name_released));
|
const StringName &signal_name_pressed = callback_name_pressed + INPUTHANDLER_SUFFIX_SIGNAL;
|
||||||
target->call(signal_name_released);
|
const Callable &callable_pressed = Callable(target, callback_name_pressed);
|
||||||
|
if (resource->is_connected(signal_name_pressed, callable_pressed))
|
||||||
|
resource->disconnect(signal_name_pressed, callable_pressed);
|
||||||
|
|
||||||
|
const StringName &callback_name_released = name_prefix + input_action_suffixes[1];
|
||||||
|
const StringName &signal_name_released = callback_name_released + INPUTHANDLER_SUFFIX_SIGNAL;
|
||||||
|
const Callable &callable_released = Callable(target, callback_name_released);
|
||||||
|
if (target->has_method(callback_name_released))
|
||||||
|
{
|
||||||
|
target->call(callback_name_released);
|
||||||
|
if (resource->is_connected(signal_name_released, callable_released))
|
||||||
|
resource->disconnect(signal_name_released, callable_released);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,28 +209,34 @@ void InputHandler::remove_input_resource(Node *target, InputResource *resource)
|
|||||||
{
|
{
|
||||||
if (const InputAxis *axis = cast_to<InputAxis>(input_axes[i]))
|
if (const InputAxis *axis = cast_to<InputAxis>(input_axes[i]))
|
||||||
{
|
{
|
||||||
const StringName signal_name_one = StringName("_on_") + axis->get_axis_name() + this->input_axis_suffixes[0];
|
const StringName &callback_name_one = StringName("_on_") + axis->get_axis_name() + this->input_axis_suffixes[0];
|
||||||
if (target->has_method(signal_name_one))
|
const StringName &signal_name_one = callback_name_one + INPUTHANDLER_SUFFIX_SIGNAL;
|
||||||
|
if (target->has_method(callback_name_one))
|
||||||
{
|
{
|
||||||
if (resource->has_signal(signal_name_one))
|
if (resource->has_signal(signal_name_one))
|
||||||
resource->emit_signal(signal_name_one, this->get_process_delta_time(), 0.0f);
|
resource->disconnect(signal_name_one, Callable(target, callback_name_one));
|
||||||
resource->disconnect(signal_name_one, Callable(target, signal_name_one));
|
if (target->has_method(callback_name_one))
|
||||||
|
target->call(callback_name_one, this->get_process_delta_time(), 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
const StringName signal_name_two = StringName("_on_") + axis->get_axis_name() + this->input_axis_suffixes[1];
|
const StringName &callback_name_two = StringName("_on_") + axis->get_axis_name() + this->input_axis_suffixes[1];
|
||||||
if (target->has_method(signal_name_two))
|
const StringName &signal_name_two = callback_name_two + INPUTHANDLER_SUFFIX_SIGNAL;
|
||||||
|
if (target->has_method(callback_name_two))
|
||||||
{
|
{
|
||||||
if (resource->has_signal(signal_name_two))
|
if (resource->has_signal(signal_name_two))
|
||||||
resource->emit_signal(signal_name_two, this->get_process_delta_time(), Vector2(0.0f, 0.0f));
|
resource->disconnect(signal_name_two, Callable(target, callback_name_two));
|
||||||
resource->disconnect(signal_name_two, Callable(target, signal_name_two));
|
if (target->has_method(callback_name_two))
|
||||||
|
target->call(callback_name_two, this->get_process_delta_time(), Vector2(0.0f, 0.0f));
|
||||||
}
|
}
|
||||||
|
|
||||||
const StringName signal_name_three = StringName("_on_") + axis->get_axis_name() + this->input_axis_suffixes[2];
|
const StringName &callback_name_three = StringName("_on_") + axis->get_axis_name() + this->input_axis_suffixes[2];
|
||||||
if (target->has_method(signal_name_three))
|
const StringName &signal_name_three = callback_name_three + INPUTHANDLER_SUFFIX_SIGNAL;
|
||||||
|
if (target->has_method(callback_name_three))
|
||||||
{
|
{
|
||||||
if (resource->has_signal(signal_name_three))
|
if (resource->has_signal(signal_name_three))
|
||||||
resource->emit_signal(signal_name_three, this->get_process_delta_time(), Vector3(0.0f, 0.0f, 0.0f));
|
resource->disconnect(signal_name_three, Callable(target, callback_name_three));
|
||||||
resource->disconnect(signal_name_three, Callable(target, signal_name_three));
|
if (target->has_method(callback_name_three))
|
||||||
|
target->call(callback_name_three, this->get_process_delta_time(), Vector3(0.0f, 0.0f, 0.0f));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user