Signals are no longer double-connected when a resource is added twice.
This commit is contained in:
@@ -58,15 +58,18 @@ void InputHandler::add_input_resource(Node *target, InputResource *resource)
|
|||||||
const StringName signal_name = StringName("_on_") + action->get_action_name() + this->input_action_suffixes[s];
|
const StringName signal_name = StringName("_on_") + action->get_action_name() + this->input_action_suffixes[s];
|
||||||
if (target->has_method(signal_name))
|
if (target->has_method(signal_name))
|
||||||
{
|
{
|
||||||
const TypedArray<InputEvent> &events = action->get_input_events();
|
|
||||||
if (!resource->has_signal(signal_name))
|
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 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++)
|
||||||
{
|
{
|
||||||
const Ref<InputEvent> &event = events[e];
|
const Ref<InputEvent> &event = events[e];
|
||||||
input_map->action_add_event(action->get_action_name(), event);
|
input_map->action_add_event(action->get_action_name(), event);
|
||||||
}
|
}
|
||||||
resource->connect(signal_name, Callable(target, signal_name));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -81,8 +84,12 @@ 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 signal_name = StringName("_on_") + axis->get_axis_name() + this->input_axis_suffixes[s];
|
||||||
if (!resource->has_signal(signal_name)) resource->add_user_signal(signal_name);
|
const Callable &callable = Callable(target, signal_name);
|
||||||
if (target->has_method(signal_name)) resource->connect(signal_name, Callable(target, signal_name));
|
if (target->has_method(signal_name) && !resource->has_signal(signal_name))
|
||||||
|
{
|
||||||
|
resource->add_user_signal(signal_name);
|
||||||
|
resource->connect(signal_name, callable);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const StringName &axis_name = axis->get_axis_name();
|
const StringName &axis_name = axis->get_axis_name();
|
||||||
@@ -151,7 +158,10 @@ void InputHandler::add_input_resource(Node *target, InputResource *resource)
|
|||||||
MethodBind *bind = ClassDB::bind_method(input_resource_method, &InputHandler::remove_input_resource);
|
MethodBind *bind = ClassDB::bind_method(input_resource_method, &InputHandler::remove_input_resource);
|
||||||
this->bound_remove_methods.emplace(input_resource_method, bind);
|
this->bound_remove_methods.emplace(input_resource_method, bind);
|
||||||
}
|
}
|
||||||
target->connect("tree_exiting", Callable(this, input_resource_method).bind(target, resource), CONNECT_ONE_SHOT);
|
|
||||||
|
const Callable &callable = Callable(this, input_resource_method);
|
||||||
|
if (!target->is_connected("tree_exiting", callable))
|
||||||
|
target->connect("tree_exiting", callable.bind(target, resource), CONNECT_ONE_SHOT);
|
||||||
}
|
}
|
||||||
void InputHandler::_enable_mouse_capture()
|
void InputHandler::_enable_mouse_capture()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user