diff options
author | A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> | 2024-01-30 13:33:03 +0100 |
---|---|---|
committer | A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> | 2024-03-14 10:27:39 +0100 |
commit | fb79d5ff9883af005c7aeae9994c463223a48c8c (patch) | |
tree | 6087ee88d52d1509cff7118ef6f81238d75e5353 /include | |
parent | e6b6df5893c7d9ead150f9f058b36c6352a152a9 (diff) | |
download | redot-cpp-fb79d5ff9883af005c7aeae9994c463223a48c8c.tar.gz |
Add support for getting argument count from `Callable`s
Diffstat (limited to 'include')
-rw-r--r-- | include/godot_cpp/godot.hpp | 2 | ||||
-rw-r--r-- | include/godot_cpp/variant/callable_custom.hpp | 1 | ||||
-rw-r--r-- | include/godot_cpp/variant/callable_method_pointer.hpp | 25 |
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); } |