From 0da84b50c0e676d26a9ed635b4213e9ebd0d22d1 Mon Sep 17 00:00:00 2001 From: Ignacio Etcheverry Date: Fri, 22 May 2020 00:58:34 +0200 Subject: [PATCH] Mono/C#: Fix values not updated in remote inspector (cherry picked from commit 51e1614d286b5cc172fcb14e93eb8ee446bc3df3) --- modules/mono/csharp_script.cpp | 59 +++++++++++++++++++++++----------- modules/mono/csharp_script.h | 6 ++++ 2 files changed, 47 insertions(+), 18 deletions(-) diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp index 9906bf9dd1d..cdaeef2400f 100644 --- a/modules/mono/csharp_script.cpp +++ b/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; -#ifdef TOOLS_ENABLED - if (is_editor && exported) { - 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 (exported) { +#ifdef TOOLS_ENABLED + 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)); + } } - } #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; -#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 (exported) { +#ifdef TOOLS_ENABLED + 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 *p_members) { +#if defined(TOOLS_ENABLED) || defined(DEBUG_ENABLED) + if (p_members) { + for (Set::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) { diff --git a/modules/mono/csharp_script.h b/modules/mono/csharp_script.h index 1d7de13f471..44e56effe18 100644 --- a/modules/mono/csharp_script.h +++ b/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 exported_members_names; +#endif + Map member_info; void _clear(); @@ -175,6 +179,8 @@ public: virtual void get_script_property_list(List *p_list) const; virtual void update_exports(); + void get_members(Set *p_members) override; + virtual bool is_tool() const { return tool; } virtual bool is_valid() const { return valid; }