ソースを参照

Fixed remote inspector for tool scripts

Fixes #29506
PouleyKetchoupp 5 年 前
コミット
3a26a0eaa7
3 ファイル変更19 行追加2 行削除
  1. 8 0
      core/ref_ptr.cpp
  2. 1 0
      core/ref_ptr.h
  3. 10 2
      editor/script_editor_debugger.cpp

+ 8 - 0
core/ref_ptr.cpp

@@ -49,6 +49,14 @@ bool RefPtr::operator==(const RefPtr &p_other) const {
 	return *ref == *ref_other;
 }
 
+bool RefPtr::operator!=(const RefPtr &p_other) const {
+
+	Ref<Reference> *ref = reinterpret_cast<Ref<Reference> *>(&data[0]);
+	Ref<Reference> *ref_other = reinterpret_cast<Ref<Reference> *>(const_cast<char *>(&p_other.data[0]));
+
+	return *ref != *ref_other;
+}
+
 RefPtr::RefPtr(const RefPtr &p_other) {
 
 	memnew_placement(&data[0], Ref<Reference>);

+ 1 - 0
core/ref_ptr.h

@@ -50,6 +50,7 @@ public:
 	bool is_null() const;
 	void operator=(const RefPtr &p_other);
 	bool operator==(const RefPtr &p_other) const;
+	bool operator!=(const RefPtr &p_other) const;
 	RID get_rid() const;
 	void unref();
 	_FORCE_INLINE_ void *get_data() const { return data; }

+ 10 - 2
editor/script_editor_debugger.cpp

@@ -611,8 +611,16 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da
 					}
 					var = ResourceLoader::load(path);
 
-					if (pinfo.hint_string == "Script")
-						debugObj->set_script(var);
+					if (pinfo.hint_string == "Script") {
+						if (debugObj->get_script() != var) {
+							debugObj->set_script(RefPtr());
+							Ref<Script> script(var);
+							if (!script.is_null()) {
+								ScriptInstance *script_instance = script->placeholder_instance_create(debugObj);
+								debugObj->set_script_and_instance(var, script_instance);
+							}
+						}
+					}
 				} else if (var.get_type() == Variant::OBJECT) {
 					if (((Object *)var)->is_class("EncodedObjectAsID")) {
 						var = Object::cast_to<EncodedObjectAsID>(var)->get_object_id();