From 3b6b5686d0e960d98d475a656fd9940a1ae02b01 Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Sun, 12 Jun 2022 19:51:32 +0300 Subject: [PATCH] reload map when map was modified --- Source/Game/Level/LevelScript.cs | 12 ++++++++++++ Source/Game/Level/Q3MapImporter.cs | 25 ++++++++++++++++++++----- 2 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 Source/Game/Level/LevelScript.cs 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; }