From 84c1f6b5de8d7d7e5ce88a882856855cc6101b5c Mon Sep 17 00:00:00 2001 From: Menotdan <32620310+Menotdan@users.noreply.github.com> Date: Sun, 14 Apr 2024 00:58:11 -0400 Subject: [PATCH 1/2] Make NavMesh initialize earlier. --- Source/Engine/Navigation/NavMesh.cpp | 35 +++++++++++++++++++++------- Source/Engine/Navigation/NavMesh.h | 4 ++++ 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/Source/Engine/Navigation/NavMesh.cpp b/Source/Engine/Navigation/NavMesh.cpp index a6076cbbd..394a89660 100644 --- a/Source/Engine/Navigation/NavMesh.cpp +++ b/Source/Engine/Navigation/NavMesh.cpp @@ -105,10 +105,8 @@ void NavMesh::OnDataAssetLoaded() if (Data.Tiles.HasItems()) return; - const bool isEnabled = IsDuringPlay() && IsActiveInHierarchy(); - // Remove added tiles - if (isEnabled) + if (_navMeshActive) { RemoveTiles(); } @@ -120,7 +118,7 @@ void NavMesh::OnDataAssetLoaded() IsDataDirty = false; // Add loaded tiles - if (isEnabled) + if (_navMeshActive) { AddTiles(); } @@ -156,15 +154,36 @@ void NavMesh::OnEnable() // Base Actor::OnEnable(); - GetScene()->Navigation.Meshes.Add(this); - AddTiles(); + if (!_navMeshActive) + { + GetScene()->Navigation.Meshes.Add(this); + AddTiles(); + _navMeshActive = true; + } } void NavMesh::OnDisable() { - RemoveTiles(); - GetScene()->Navigation.Meshes.Remove(this); + if (_navMeshActive) + { + RemoveTiles(); + GetScene()->Navigation.Meshes.Remove(this); + _navMeshActive = false; + } // Base Actor::OnDisable(); } + +void NavMesh::Initialize() +{ + // Base + Actor::Initialize(); + + if (!_navMeshActive) + { + GetScene()->Navigation.Meshes.Add(this); + AddTiles(); + _navMeshActive = true; + } +} diff --git a/Source/Engine/Navigation/NavMesh.h b/Source/Engine/Navigation/NavMesh.h index 76a4eb963..8e1659ff4 100644 --- a/Source/Engine/Navigation/NavMesh.h +++ b/Source/Engine/Navigation/NavMesh.h @@ -68,6 +68,9 @@ private: void RemoveTiles(); void OnDataAssetLoaded(); +private: + bool _navMeshActive = false; + public: // [Actor] void Serialize(SerializeStream& stream, const void* otherObj) override; @@ -77,4 +80,5 @@ protected: // [Actor] void OnEnable() override; void OnDisable() override; + void Initialize() override; }; From db28afb591d5bd8bf30d3f6744f1f9adb5488b6c Mon Sep 17 00:00:00 2001 From: Menotdan <32620310+Menotdan@users.noreply.github.com> Date: Sun, 14 Apr 2024 01:02:48 -0400 Subject: [PATCH 2/2] Fix regression where if the navmesh was disabled on playmode beginning, the mesh would still exist in the backend. --- Source/Engine/Navigation/NavMesh.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Engine/Navigation/NavMesh.cpp b/Source/Engine/Navigation/NavMesh.cpp index 394a89660..5b5220898 100644 --- a/Source/Engine/Navigation/NavMesh.cpp +++ b/Source/Engine/Navigation/NavMesh.cpp @@ -180,7 +180,7 @@ void NavMesh::Initialize() // Base Actor::Initialize(); - if (!_navMeshActive) + if (!_navMeshActive && IsActiveInHierarchy()) { GetScene()->Navigation.Meshes.Add(this); AddTiles();