소스 검색

Mono/C#: Fix values not updated in remote inspector

(cherry picked from commit 51e1614d286b5cc172fcb14e93eb8ee446bc3df3)
Ignacio Etcheverry 5 년 전
부모
커밋
0da84b50c0
2개의 변경된 파일46개의 추가작업 그리고 17개의 파일을 삭제
  1. 40 17
      modules/mono/csharp_script.cpp
  2. 6 0
      modules/mono/csharp_script.h

+ 40 - 17
modules/mono/csharp_script.cpp

@@ -2394,15 +2394,22 @@ bool CSharpScript::_update_exports() {
 					StringName member_name = field->get_name();
 
 					member_info[member_name] = prop_info;
+
+					if (exported) {
 #ifdef TOOLS_ENABLED
-					if (is_editor && exported) {
-						exported_members_cache.push_front(prop_info);
+						if (is_editor) {
+							exported_members_cache.push_front(prop_info);
 
-						if (tmp_object) {
-							exported_members_defval_cache[member_name] = GDMonoMarshal::mono_object_to_variant(field->get_value(tmp_object));
+							if (tmp_object) {
+								exported_members_defval_cache[member_name] = GDMonoMarshal::mono_object_to_variant(field->get_value(tmp_object));
+							}
 						}
-					}
 #endif
+
+#if defined(TOOLS_ENABLED) || defined(DEBUG_ENABLED)
+						exported_members_names.insert(member_name);
+#endif
+					}
 				}
 			}
 
@@ -2415,22 +2422,28 @@ bool CSharpScript::_update_exports() {
 					StringName member_name = property->get_name();
 
 					member_info[member_name] = prop_info;
+
+					if (exported) {
 #ifdef TOOLS_ENABLED
-					if (is_editor && exported) {
-						exported_members_cache.push_front(prop_info);
-
-						if (tmp_object) {
-							MonoException *exc = NULL;
-							MonoObject *ret = property->get_value(tmp_object, &exc);
-							if (exc) {
-								exported_members_defval_cache[member_name] = Variant();
-								GDMonoUtils::debug_print_unhandled_exception(exc);
-							} else {
-								exported_members_defval_cache[member_name] = GDMonoMarshal::mono_object_to_variant(ret);
+						if (is_editor) {
+							exported_members_cache.push_front(prop_info);
+							if (tmp_object) {
+								MonoException *exc = nullptr;
+								MonoObject *ret = property->get_value(tmp_object, &exc);
+								if (exc) {
+									exported_members_defval_cache[member_name] = Variant();
+									GDMonoUtils::debug_print_unhandled_exception(exc);
+								} else {
+									exported_members_defval_cache[member_name] = GDMonoMarshal::mono_object_to_variant(ret);
+								}
 							}
 						}
-					}
 #endif
+
+#if defined(TOOLS_ENABLED) || defined(DEBUG_ENABLED)
+						exported_members_names.insert(member_name);
+#endif
+					}
 				}
 			}
 
@@ -3388,6 +3401,16 @@ CSharpScript::~CSharpScript() {
 #endif
 }
 
+void CSharpScript::get_members(Set<StringName> *p_members) {
+#if defined(TOOLS_ENABLED) || defined(DEBUG_ENABLED)
+	if (p_members) {
+		for (Set<StringName>::Element *E = exported_members_names.front(); E; E = E->next()) {
+			p_members->insert(E->get());
+		}
+	}
+#endif
+}
+
 /*************** RESOURCE ***************/
 
 RES ResourceFormatLoaderCSharpScript::load(const String &p_path, const String &p_original_path, Error *r_error) {

+ 6 - 0
modules/mono/csharp_script.h

@@ -125,6 +125,10 @@ class CSharpScript : public Script {
 	virtual void _placeholder_erased(PlaceHolderScriptInstance *p_placeholder);
 #endif
 
+#if defined(TOOLS_ENABLED) || defined(DEBUG_ENABLED)
+	Set<StringName> exported_members_names;
+#endif
+
 	Map<StringName, PropertyInfo> member_info;
 
 	void _clear();
@@ -175,6 +179,8 @@ public:
 	virtual void get_script_property_list(List<PropertyInfo> *p_list) const;
 	virtual void update_exports();
 
+	void get_members(Set<StringName> *p_members) override;
+
 	virtual bool is_tool() const { return tool; }
 	virtual bool is_valid() const { return valid; }