diff --git a/Source/Game/Level/LevelScript.cs b/Source/Game/Level/LevelScript.cs new file mode 100644 index 0000000..c75837d --- /dev/null +++ b/Source/Game/Level/LevelScript.cs @@ -0,0 +1,12 @@ +using System; +using FlaxEngine; +using FlaxEditor; + +namespace Game +{ + [ExecuteInEditMode] + public class LevelScript : Script + { + public DateTime MapTimestamp; + } +} \ No newline at end of file diff --git a/Source/Game/Level/Q3MapImporter.cs b/Source/Game/Level/Q3MapImporter.cs index e822b25..3f5b207 100644 --- a/Source/Game/Level/Q3MapImporter.cs +++ b/Source/Game/Level/Q3MapImporter.cs @@ -335,11 +335,18 @@ namespace Game worldSpawnActor = Actor.FindActor("WorldSpawn"); if (worldSpawnActor != null) { - if (forceLoad) +#if FLAX_EDITOR + LevelScript levelScript = worldSpawnActor.GetScript(); + DateTime timestamp = File.GetLastWriteTime(mapPath); + if (timestamp != levelScript.MapTimestamp) { - FlaxEngine.Debug.Log("Destroying children"); - worldSpawnActor.DestroyChildren(); + FlaxEngine.Debug.Log($"Map dirty, reloading. {timestamp.ToString()} != {levelScript.MapTimestamp.ToString()}"); + forceLoad = true; + levelScript.MapTimestamp = timestamp; } +#endif + if (forceLoad) + worldSpawnActor.DestroyChildren(); else { FlaxEngine.Debug.Log("Map already loaded in the scene"); @@ -348,7 +355,9 @@ namespace Game } } else - FlaxEngine.Debug.Log("Loading map"); + FlaxEngine.Debug.Log("No WorldSpawn, loading map"); + + FlaxEngine.Debug.Log("Loading map"); { string matBasePath = Path.Combine(AssetManager.ContentPath, "Materials"); @@ -372,7 +381,13 @@ namespace Game { worldSpawnActor = Actor.AddChild(); worldSpawnActor.Name = "WorldSpawn"; - worldSpawnActor.HideFlags |= HideFlags.DontSave; + + LevelScript levelScript = worldSpawnActor.AddScript(); +#if FLAX_EDITOR + levelScript.MapTimestamp = File.GetLastWriteTime(mapPath); +#endif + worldSpawnActor.HideFlags &= ~HideFlags.DontSave; + //worldSpawnActor.HideFlags |= HideFlags.DontSave; //worldSpawnActor.HideFlags |= HideFlags.DontSelect; }