Fix dirtying scenes after building navmesh in Editor

#4049
This commit is contained in:
2026-07-13 17:27:03 +02:00
parent e7b69d8bc4
commit 0c45746e63
4 changed files with 21 additions and 14 deletions
+1 -3
View File
@@ -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;
}
/// <summary>
@@ -12,6 +12,8 @@ namespace FlaxEditor.Progress.Handlers
{
private bool _isActive;
internal bool DirtyScenesOnEnd;
/// <summary>
/// Initializes a new instance of the <see cref="NavMeshBuildingProgress"/> class.
/// </summary>
@@ -34,6 +36,11 @@ namespace FlaxEditor.Progress.Handlers
}
else
{
if (DirtyScenesOnEnd)
{
DirtyScenesOnEnd = false;
Editor.Instance.Scene.MarkAllScenesEdited();
}
OnEnd();
}
}
+12 -9
View File
@@ -73,6 +73,14 @@ namespace FlaxEditor.States
{
StateMachine.GoToState<EndState>();
}
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<EditingSceneState>();
}
}
@@ -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()