From 907e709f9d76b9cac619078673eeaccbd5928453 Mon Sep 17 00:00:00 2001 From: Raul Santos Date: Tue, 28 Dec 2021 19:11:10 +0100 Subject: [PATCH] Fix getting properties state when reloading C# When reloading C# classes and keep their properties values they are retrieved and stored in a state list. Retrieving the properties was only getting the fields of the C# class and not inherited fields so those properties values were lost on reload. Now we also try to find the field in the parent classes. --- modules/mono/csharp_script.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp index 8a5be781026..7f618f2eff2 100644 --- a/modules/mono/csharp_script.cpp +++ b/modules/mono/csharp_script.cpp @@ -1570,9 +1570,19 @@ void CSharpInstance::get_properties_state_for_reloading(Listscript_class->get_field(state_pair.first); - if (!field) + GDMonoField *field = nullptr; + GDMonoClass *top = script->script_class; + while (top && top != script->native) { + field = top->get_field(state_pair.first); + if (field) { + break; + } + + top = top->get_parent_class(); + } + if (!field) { continue; // Properties ignored. We get the property baking fields instead. + } managedType = field->get_type();