Parcourir la source

Merge pull request #28525 from MunWolf/func_ref_validation

Added an is_valid function to FuncRef
Rémi Verschelde il y a 6 ans
Parent
commit
fcbadd4334
2 fichiers modifiés avec 14 ajouts et 0 suppressions
  1. 13 0
      core/func_ref.cpp
  2. 1 0
      core/func_ref.h

+ 13 - 0
core/func_ref.cpp

@@ -51,11 +51,23 @@ void FuncRef::set_instance(Object *p_obj) {
 	ERR_FAIL_NULL(p_obj);
 	ERR_FAIL_NULL(p_obj);
 	id = p_obj->get_instance_id();
 	id = p_obj->get_instance_id();
 }
 }
+
 void FuncRef::set_function(const StringName &p_func) {
 void FuncRef::set_function(const StringName &p_func) {
 
 
 	function = 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() {
 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_instance", "instance"), &FuncRef::set_instance);
 	ClassDB::bind_method(D_METHOD("set_function", "name"), &FuncRef::set_function);
 	ClassDB::bind_method(D_METHOD("set_function", "name"), &FuncRef::set_function);
+	ClassDB::bind_method(D_METHOD("is_valid"), &FuncRef::is_valid);
 }
 }
 
 
 FuncRef::FuncRef() :
 FuncRef::FuncRef() :

+ 1 - 0
core/func_ref.h

@@ -46,6 +46,7 @@ public:
 	Variant call_func(const Variant **p_args, int p_argcount, Variant::CallError &r_error);
 	Variant call_func(const Variant **p_args, int p_argcount, Variant::CallError &r_error);
 	void set_instance(Object *p_obj);
 	void set_instance(Object *p_obj);
 	void set_function(const StringName &p_func);
 	void set_function(const StringName &p_func);
+	bool is_valid() const;
 	FuncRef();
 	FuncRef();
 };
 };