From 17d0f40e1cb1f49c1130bc3359f1cc9731e1a0fb Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Fri, 12 Feb 2021 11:27:13 +0100 Subject: [PATCH] Add automatic navmesh update when editing spline with navmesh-relevant collider --- Source/Editor/SceneGraph/Actors/SplineNode.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Source/Editor/SceneGraph/Actors/SplineNode.cs b/Source/Editor/SceneGraph/Actors/SplineNode.cs index 9ce64efa9..a9dec21b6 100644 --- a/Source/Editor/SceneGraph/Actors/SplineNode.cs +++ b/Source/Editor/SceneGraph/Actors/SplineNode.cs @@ -46,6 +46,7 @@ namespace FlaxEditor.SceneGraph.Actors { var actor = (Spline)_node.Actor; actor.SetSplineTransform(Index, value); + OnSplineEdited(actor); } } @@ -111,6 +112,7 @@ namespace FlaxEditor.SceneGraph.Actors { var spline = Object.Find(ref SplineId); sceneModule.MarkSceneEdited(spline.Scene); + OnSplineEdited(spline); } } @@ -142,6 +144,7 @@ namespace FlaxEditor.SceneGraph.Actors undoAction = action; var splineNode = (SplineNode)SceneGraphFactory.FindNode(action.SplineId); splineNode.OnUpdate(); + OnSplineEdited(actor); return splineNode.ActorChildNodes[newIndex]; } @@ -194,6 +197,7 @@ namespace FlaxEditor.SceneGraph.Actors if (splineNode == null) return null; splineNode.OnUpdate(); + OnSplineEdited(spline); return splineNode.ActorChildNodes[data.Index]; } } @@ -333,6 +337,19 @@ namespace FlaxEditor.SceneGraph.Actors Editor.Instance.SceneEditing.Spawn(actor, Actor); } + private static void OnSplineEdited(Spline spline) + { + var collider = spline.GetChild(); + if (collider && collider.Scene && collider.IsActiveInHierarchy && collider.HasStaticFlag(StaticFlags.Navigation) && !Editor.IsPlayMode) + { + var options = Editor.Instance.Options.Options.General; + if (options.AutoRebuildNavMesh) + { + Navigation.BuildNavMesh(collider.Scene, collider.Box, options.AutoRebuildNavMeshTimeoutMs); + } + } + } + /// public override void OnDispose() {