Allow binding Callable arguments from an array
Restores 3.x functionality that was removed in the Signal/Callable refactor of 4.0. Fixes #64668. Implements https://github.com/godotengine/godot-proposals/issues/6034 Usage: ```GDScript callable.bindv([arg1,arg2,arg3]) ```
This commit is contained in:
parent
b14f7aa9f9
commit
d762a0395a
4 changed files with 23 additions and 0 deletions
|
@ -102,6 +102,20 @@ Callable Callable::bindp(const Variant **p_arguments, int p_argcount) const {
|
|||
}
|
||||
return Callable(memnew(CallableCustomBind(*this, args)));
|
||||
}
|
||||
|
||||
Callable Callable::bindv(const Array &p_arguments) {
|
||||
if (p_arguments.is_empty()) {
|
||||
return *this; // No point in creating a new callable if nothing is bound.
|
||||
}
|
||||
|
||||
Vector<Variant> args;
|
||||
args.resize(p_arguments.size());
|
||||
for (int i = 0; i < p_arguments.size(); i++) {
|
||||
args.write[i] = p_arguments[i];
|
||||
}
|
||||
return Callable(memnew(CallableCustomBind(*this, args)));
|
||||
}
|
||||
|
||||
Callable Callable::unbind(int p_argcount) const {
|
||||
return Callable(memnew(CallableCustomUnbind(*this, p_argcount)));
|
||||
}
|
||||
|
|
|
@ -98,6 +98,7 @@ public:
|
|||
|
||||
template <typename... VarArgs>
|
||||
Callable bind(VarArgs... p_args);
|
||||
Callable bindv(const Array &p_arguments);
|
||||
|
||||
Callable bindp(const Variant **p_arguments, int p_argcount) const;
|
||||
Callable unbind(int p_argcount) const;
|
||||
|
|
|
@ -2017,6 +2017,7 @@ static void _register_variant_builtin_methods() {
|
|||
bind_method(Callable, get_object_id, sarray(), varray());
|
||||
bind_method(Callable, get_method, sarray(), varray());
|
||||
bind_method(Callable, hash, sarray(), varray());
|
||||
bind_method(Callable, bindv, sarray("arguments"), varray());
|
||||
bind_method(Callable, unbind, sarray("argcount"), varray());
|
||||
|
||||
bind_custom(Callable, call, _VariantCall::func_Callable_call, true, Variant);
|
||||
|
|
|
@ -77,6 +77,13 @@
|
|||
Returns a copy of this [Callable] with one or more arguments bound. When called, the bound arguments are passed [i]after[/i] the arguments supplied by [method call].
|
||||
</description>
|
||||
</method>
|
||||
<method name="bindv">
|
||||
<return type="Callable" />
|
||||
<param index="0" name="arguments" type="Array" />
|
||||
<description>
|
||||
Returns a copy of this [Callable] with one or more arguments bound, reading them from an array. When called, the bound arguments are passed [i]after[/i] the arguments supplied by [method call].
|
||||
</description>
|
||||
</method>
|
||||
<method name="call" qualifiers="vararg const">
|
||||
<return type="Variant" />
|
||||
<description>
|
||||
|
|
Loading…
Reference in a new issue