Browse Source

Merge pull request #87838 from paulloz/dotnet/fix-duplicate-key-on-reload

C#: Fix duplicate key issue on reload
Rémi Verschelde 1 year ago
parent
commit
d0f8b76ffd

+ 10 - 7
modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/ScriptManagerBridge.cs

@@ -310,13 +310,6 @@ namespace Godot.Bridge
 
                 _pathTypeBiMap.Add(scriptPathAttr.Path, type);
 
-                // This method may be called before initialization.
-                if (NativeFuncs.godotsharp_dotnet_module_is_initialized().ToBool() && Engine.IsEditorHint())
-                {
-                    using godot_string scriptPath = Marshaling.ConvertStringToNative(scriptPathAttr.Path);
-                    NativeFuncs.godotsharp_internal_editor_file_system_update_file(scriptPath);
-                }
-
                 if (AlcReloadCfg.IsAlcReloadingEnabled)
                 {
                     AddTypeForAlcReloading(type);
@@ -366,6 +359,16 @@ namespace Godot.Bridge
                     }
                 }
             }
+
+            // This method may be called before initialization.
+            if (NativeFuncs.godotsharp_dotnet_module_is_initialized().ToBool() && Engine.IsEditorHint())
+            {
+                foreach (var scriptPath in _pathTypeBiMap.Paths)
+                {
+                    using godot_string nativeScriptPath = Marshaling.ConvertStringToNative(scriptPath);
+                    NativeFuncs.godotsharp_internal_editor_file_system_update_file(nativeScriptPath);
+                }
+            }
         }
 
         [UnmanagedCallersOnly]

+ 2 - 0
modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/ScriptManagerBridge.types.cs

@@ -61,6 +61,8 @@ public static partial class ScriptManagerBridge
         private System.Collections.Generic.Dictionary<string, Type> _pathTypeMap = new();
         private System.Collections.Generic.Dictionary<Type, string> _typePathMap = new();
 
+        public System.Collections.Generic.IEnumerable<string> Paths => _pathTypeMap.Keys;
+
         public void Add(string scriptPath, Type scriptType)
         {
             _pathTypeMap.Add(scriptPath, scriptType);