summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorA Thousand Ships <96648715+AThousandShips@users.noreply.github.com>2024-01-30 13:33:03 +0100
committerA Thousand Ships <96648715+AThousandShips@users.noreply.github.com>2024-03-14 10:27:39 +0100
commitfb79d5ff9883af005c7aeae9994c463223a48c8c (patch)
tree6087ee88d52d1509cff7118ef6f81238d75e5353 /include
parente6b6df5893c7d9ead150f9f058b36c6352a152a9 (diff)
downloadredot-cpp-fb79d5ff9883af005c7aeae9994c463223a48c8c.tar.gz
Add support for getting argument count from `Callable`s
Diffstat (limited to 'include')
-rw-r--r--include/godot_cpp/godot.hpp2
-rw-r--r--include/godot_cpp/variant/callable_custom.hpp1
-rw-r--r--include/godot_cpp/variant/callable_method_pointer.hpp25
3 files changed, 27 insertions, 1 deletions
diff --git a/include/godot_cpp/godot.hpp b/include/godot_cpp/godot.hpp
index c4e5d83..a142a18 100644
--- a/include/godot_cpp/godot.hpp
+++ b/include/godot_cpp/godot.hpp
@@ -167,7 +167,7 @@ extern "C" GDExtensionInterfaceObjectGetInstanceFromId gdextension_interface_obj
extern "C" GDExtensionInterfaceObjectGetInstanceId gdextension_interface_object_get_instance_id;
extern "C" GDExtensionInterfaceObjectHasScriptMethod gdextension_interface_object_has_script_method;
extern "C" GDExtensionInterfaceObjectCallScriptMethod gdextension_interface_object_call_script_method;
-extern "C" GDExtensionInterfaceCallableCustomCreate gdextension_interface_callable_custom_create;
+extern "C" GDExtensionInterfaceCallableCustomCreate2 gdextension_interface_callable_custom_create2;
extern "C" GDExtensionInterfaceCallableCustomGetUserData gdextension_interface_callable_custom_get_userdata;
extern "C" GDExtensionInterfaceRefGetObject gdextension_interface_ref_get_object;
extern "C" GDExtensionInterfaceRefSetObject gdextension_interface_ref_set_object;
diff --git a/include/godot_cpp/variant/callable_custom.hpp b/include/godot_cpp/variant/callable_custom.hpp
index 34328f9..48a8142 100644
--- a/include/godot_cpp/variant/callable_custom.hpp
+++ b/include/godot_cpp/variant/callable_custom.hpp
@@ -41,6 +41,7 @@ class Object;
class CallableCustomBase {
public:
virtual ObjectID get_object() const = 0;
+ virtual int get_argument_count(bool &r_is_valid) const;
virtual void call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, GDExtensionCallError &r_call_error) const = 0;
virtual ~CallableCustomBase() {}
};
diff --git a/include/godot_cpp/variant/callable_method_pointer.hpp b/include/godot_cpp/variant/callable_method_pointer.hpp
index 159f976..0c0ff34 100644
--- a/include/godot_cpp/variant/callable_method_pointer.hpp
+++ b/include/godot_cpp/variant/callable_method_pointer.hpp
@@ -73,6 +73,11 @@ public:
return ObjectID(data.instance->get_instance_id());
}
+ virtual int get_argument_count(bool &r_is_valid) const override {
+ r_is_valid = true;
+ return sizeof...(P);
+ }
+
virtual void call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, GDExtensionCallError &r_call_error) const override {
call_with_variant_args(data.instance, data.method, p_arguments, p_argcount, r_call_error);
}
@@ -110,6 +115,11 @@ public:
return ObjectID(data.instance->get_instance_id());
}
+ virtual int get_argument_count(bool &r_is_valid) const override {
+ r_is_valid = true;
+ return sizeof...(P);
+ }
+
virtual void call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, GDExtensionCallError &r_call_error) const override {
call_with_variant_args_ret(data.instance, data.method, p_arguments, p_argcount, r_return_value, r_call_error);
}
@@ -147,6 +157,11 @@ public:
return ObjectID(data.instance->get_instance_id());
}
+ virtual int get_argument_count(bool &r_is_valid) const override {
+ r_is_valid = true;
+ return sizeof...(P);
+ }
+
virtual void call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, GDExtensionCallError &r_call_error) const override {
call_with_variant_args_retc(data.instance, data.method, p_arguments, p_argcount, r_return_value, r_call_error);
}
@@ -182,6 +197,11 @@ public:
return ObjectID();
}
+ virtual int get_argument_count(bool &r_is_valid) const override {
+ r_is_valid = true;
+ return sizeof...(P);
+ }
+
virtual void call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, GDExtensionCallError &r_call_error) const override {
call_with_variant_args_static_ret(data.method, p_arguments, p_argcount, r_return_value, r_call_error);
r_return_value = Variant();
@@ -218,6 +238,11 @@ public:
return ObjectID();
}
+ virtual int get_argument_count(bool &r_is_valid) const override {
+ r_is_valid = true;
+ return sizeof...(P);
+ }
+
virtual void call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, GDExtensionCallError &r_call_error) const override {
call_with_variant_args_static_ret(data.method, p_arguments, p_argcount, r_return_value, r_call_error);
}