Forráskód Böngészése

Merge pull request #31195 from bojidar-bg/31143-funcref-call_funcv

Add FuncRef.call_funcv
Rémi Verschelde 6 éve
szülő
commit
e578c1fef8
4 módosított fájl, 25 hozzáadás és 1 törlés
  1. 13 0
      core/func_ref.cpp
  2. 1 0
      core/func_ref.h
  3. 10 0
      doc/classes/FuncRef.xml
  4. 1 1
      doc/classes/Object.xml

+ 13 - 0
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);

+ 1 - 0
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;

+ 10 - 0
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">

+ 1 - 1
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]