Преглед изворни кода

Merge pull request #51180 from RandomShaper/native_script_inherits

Implement inherits_script() for NativeScript and PluginScript
Rémi Verschelde пре 4 година
родитељ
комит
fa1a66dd68

+ 19 - 3
modules/gdnative/nativescript/nativescript.cpp

@@ -114,9 +114,25 @@ void NativeScript::_placeholder_erased(PlaceHolderScriptInstance *p_placeholder)
 #endif
 
 bool NativeScript::inherits_script(const Ref<Script> &p_script) const {
-#ifndef _MSC_VER
-#warning inheritance needs to be implemented in NativeScript
-#endif
+	Ref<NativeScript> ns = p_script;
+	if (ns.is_null()) {
+		return false;
+	}
+
+	const NativeScriptDesc *other_s = ns->get_script_desc();
+	if (!other_s) {
+		return false;
+	}
+
+	const NativeScriptDesc *s = get_script_desc();
+
+	while (s) {
+		if (s == other_s) {
+			return true;
+		}
+		s = s->base_data;
+	}
+
 	return false;
 }
 

+ 14 - 3
modules/gdnative/pluginscript/pluginscript_script.cpp

@@ -139,9 +139,20 @@ bool PluginScript::can_instantiate() const {
 }
 
 bool PluginScript::inherits_script(const Ref<Script> &p_script) const {
-#ifndef _MSC_VER
-#warning inheritance needs to be implemented in PluginScript
-#endif
+	Ref<PluginScript> ps = p_script;
+	if (ps.is_null()) {
+		return false;
+	}
+
+	const PluginScript *s = this;
+
+	while (s) {
+		if (s == p_script.ptr()) {
+			return true;
+		}
+		s = Object::cast_to<PluginScript>(s->_ref_base_parent.ptr());
+	}
+
 	return false;
 }