diff --git a/Source/Editor/Editor.cs b/Source/Editor/Editor.cs index a1b1873ba..7e624efd3 100644 --- a/Source/Editor/Editor.cs +++ b/Source/Editor/Editor.cs @@ -1337,10 +1337,7 @@ namespace FlaxEditor { var scenes = Level.Scenes; for (int i = 0; i < scenes.Length; i++) - { scenes[i].ClearLightmaps(); - } - Scene.MarkSceneEdited(scenes); } @@ -1384,6 +1381,7 @@ namespace FlaxEditor var scenes = Level.Scenes; Navigation.BuildNavMesh(); Scene.MarkSceneEdited(scenes); + ProgressReporting.NavMeshBuilding.DirtyScenesOnEnd = true; } /// diff --git a/Source/Editor/Progress/Handlers/NavMeshBuildingProgress.cs b/Source/Editor/Progress/Handlers/NavMeshBuildingProgress.cs index c722929fc..21a7b684f 100644 --- a/Source/Editor/Progress/Handlers/NavMeshBuildingProgress.cs +++ b/Source/Editor/Progress/Handlers/NavMeshBuildingProgress.cs @@ -12,6 +12,8 @@ namespace FlaxEditor.Progress.Handlers { private bool _isActive; + internal bool DirtyScenesOnEnd; + /// /// Initializes a new instance of the class. /// @@ -34,6 +36,11 @@ namespace FlaxEditor.Progress.Handlers } else { + if (DirtyScenesOnEnd) + { + DirtyScenesOnEnd = false; + Editor.Instance.Scene.MarkAllScenesEdited(); + } OnEnd(); } } diff --git a/Source/Editor/States/BuildingScenesState.cs b/Source/Editor/States/BuildingScenesState.cs index 9ebf58fe2..52cc5ac81 100644 --- a/Source/Editor/States/BuildingScenesState.cs +++ b/Source/Editor/States/BuildingScenesState.cs @@ -73,6 +73,14 @@ namespace FlaxEditor.States { StateMachine.GoToState(); } + + protected void ConditionalDirtyScenes() + { + if (((SubStateMachine)StateMachine).States.Any(x => ((SubState)x).DirtyScenes)) + { + Editor.Instance.Scene.MarkAllScenesEdited(); + } + } } private sealed class BeginState : SubState @@ -83,18 +91,12 @@ namespace FlaxEditor.States { public override void OnEnter() { - var stateMachine = (SubStateMachine)StateMachine; - var scenesDirty = false; - foreach (var state in stateMachine.States) + var states = ((SubStateMachine)StateMachine).States; + foreach (var state in states) { ((SubState)state).Before(); - scenesDirty |= ((SubState)state).DirtyScenes; - } - if (scenesDirty) - { - foreach (var scene in Level.Scenes) - Editor.Instance.Scene.MarkSceneEdited(scene); } + ConditionalDirtyScenes(); Done(); } } @@ -262,6 +264,7 @@ namespace FlaxEditor.States { public override void OnEnter() { + ConditionalDirtyScenes(); Editor.Instance.StateMachine.GoToState(); } } diff --git a/Source/Editor/Undo/Actions/ParentActorsAction.cs b/Source/Editor/Undo/Actions/ParentActorsAction.cs index aed85cb3c..c4a6c7f29 100644 --- a/Source/Editor/Undo/Actions/ParentActorsAction.cs +++ b/Source/Editor/Undo/Actions/ParentActorsAction.cs @@ -148,8 +148,7 @@ namespace FlaxEditor.Actions // Prefab links are broken by the C++ backend on actor reparenting // Mark scenes as edited - foreach (var scene in scenes) - Editor.Instance.Scene.MarkSceneEdited(scene); + Editor.Instance.Scene.MarkSceneEdited(scenes); } public void Undo()