diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2019-05-06 14:23:16 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-06 14:23:16 +0200 |
commit | fcbadd4334d4e2c11919fbe543dbd3ee825836d4 (patch) | |
tree | c3246a416b2d7901155d03c67775fcb76a568e39 | |
parent | 958c915f60e5825bac8c3b617755ea237025d32b (diff) | |
parent | 9be8424ef980d7a85e08535de986123033ba55aa (diff) |
Merge pull request #28525 from MunWolf/func_ref_validation
Added an is_valid function to FuncRef
-rw-r--r-- | core/func_ref.cpp | 13 | ||||
-rw-r--r-- | core/func_ref.h | 1 |
2 files changed, 14 insertions, 0 deletions
diff --git a/core/func_ref.cpp b/core/func_ref.cpp index 4a965473d9..3d03137d09 100644 --- a/core/func_ref.cpp +++ b/core/func_ref.cpp @@ -51,11 +51,23 @@ void FuncRef::set_instance(Object *p_obj) { ERR_FAIL_NULL(p_obj); id = p_obj->get_instance_id(); } + void FuncRef::set_function(const StringName &p_func) { function = p_func; } +bool FuncRef::is_valid() const { + if (id == 0) + return false; + + Object *obj = ObjectDB::get_instance(id); + if (!obj) + return false; + + return obj->has_method(function); +} + void FuncRef::_bind_methods() { { @@ -67,6 +79,7 @@ void FuncRef::_bind_methods() { 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); } FuncRef::FuncRef() : diff --git a/core/func_ref.h b/core/func_ref.h index 339279fdba..a143b58bf0 100644 --- a/core/func_ref.h +++ b/core/func_ref.h @@ -46,6 +46,7 @@ public: Variant call_func(const Variant **p_args, int p_argcount, Variant::CallError &r_error); void set_instance(Object *p_obj); void set_function(const StringName &p_func); + bool is_valid() const; FuncRef(); }; |