diff options
author | Bojidar Marinov <bojidar.marinov.bg@gmail.com> | 2019-08-08 09:51:18 +0300 |
---|---|---|
committer | Bojidar Marinov <bojidar.marinov.bg@gmail.com> | 2019-08-08 11:58:57 +0300 |
commit | 7123fab771cb443d5b32006d062eb41ec8e98001 (patch) | |
tree | 9153410eb1b66c069348a0c797c98b60e9354b77 | |
parent | 5aea7bc10811a81991535c5cd22e185b74b51f35 (diff) |
Add FuncRef.call_funcv
Closes #31143
-rw-r--r-- | core/func_ref.cpp | 13 | ||||
-rw-r--r-- | core/func_ref.h | 1 | ||||
-rw-r--r-- | doc/classes/FuncRef.xml | 10 | ||||
-rw-r--r-- | doc/classes/Object.xml | 2 |
4 files changed, 25 insertions, 1 deletions
diff --git a/core/func_ref.cpp b/core/func_ref.cpp index 3d03137d09..66ef27f6b9 100644 --- a/core/func_ref.cpp +++ b/core/func_ref.cpp @@ -46,6 +46,17 @@ Variant FuncRef::call_func(const Variant **p_args, int p_argcount, Variant::Call return obj->call(function, p_args, p_argcount, r_error); } +Variant FuncRef::call_funcv(const Array &p_args) { + + ERR_FAIL_COND_V(id == 0, Variant()); + + Object *obj = ObjectDB::get_instance(id); + + ERR_FAIL_COND_V(!obj, Variant()); + + return obj->callv(function, p_args); +} + void FuncRef::set_instance(Object *p_obj) { ERR_FAIL_NULL(p_obj); @@ -77,6 +88,8 @@ void FuncRef::_bind_methods() { ClassDB::bind_vararg_method(METHOD_FLAGS_DEFAULT, "call_func", &FuncRef::call_func, mi, defargs); } + ClassDB::bind_method(D_METHOD("call_funcv", "arg_array"), &FuncRef::call_funcv); + ClassDB::bind_method(D_METHOD("set_instance", "instance"), &FuncRef::set_instance); ClassDB::bind_method(D_METHOD("set_function", "name"), &FuncRef::set_function); ClassDB::bind_method(D_METHOD("is_valid"), &FuncRef::is_valid); diff --git a/core/func_ref.h b/core/func_ref.h index a143b58bf0..af0bf63203 100644 --- a/core/func_ref.h +++ b/core/func_ref.h @@ -44,6 +44,7 @@ protected: public: Variant call_func(const Variant **p_args, int p_argcount, Variant::CallError &r_error); + Variant call_funcv(const Array &p_args); void set_instance(Object *p_obj); void set_function(const StringName &p_func); bool is_valid() const; diff --git a/doc/classes/FuncRef.xml b/doc/classes/FuncRef.xml index e35d7a68c5..9803ae0838 100644 --- a/doc/classes/FuncRef.xml +++ b/doc/classes/FuncRef.xml @@ -17,10 +17,20 @@ Calls the referenced function previously set by [method set_function] or [method @GDScript.funcref]. </description> </method> + <method name="call_funcv"> + <return type="Variant"> + </return> + <argument index="0" name="arg_array" type="Array"> + </argument> + <description> + Calls the referenced function previously set by [method set_function] or [method @GDScript.funcref]. Contrarily to [method call_func], this method does not support a variable number of arguments but expects all parameters to be passed via a single [Array]. + </description> + </method> <method name="is_valid" qualifiers="const"> <return type="bool"> </return> <description> + Returns whether the object still exists and has the function assigned. </description> </method> <method name="set_function"> diff --git a/doc/classes/Object.xml b/doc/classes/Object.xml index b87e912b45..4b77197e29 100644 --- a/doc/classes/Object.xml +++ b/doc/classes/Object.xml @@ -112,7 +112,7 @@ <argument index="1" name="arg_array" type="Array"> </argument> <description> - Calls the [code]method[/code] on the object and returns the result. Contrarily to [method call], this method does not support a variable number of arguments but expected all parameters passed via a single [Array]. + Calls the [code]method[/code] on the object and returns the result. Contrarily to [method call], this method does not support a variable number of arguments but expects all parameters to be via a single [Array]. [codeblock] callv("set", [ "position", Vector2(42.0, 0.0) ]) [/codeblock] |