From c386e08e1c5ce23212a1adc6f70cd394baf46130 Mon Sep 17 00:00:00 2001 From: Ashley Rogers Date: Mon, 27 Jan 2025 14:13:51 -0500 Subject: [PATCH 1/3] Check for null tileset in SampleHeightMostDetailed --- ...iumSampleHeightMostDetailedAsyncAction.cpp | 24 ++++++++++++----- .../Tests/SampleHeightMostDetailed.spec.cpp | 27 ++++++++++++++++++- 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/Source/CesiumRuntime/Private/CesiumSampleHeightMostDetailedAsyncAction.cpp b/Source/CesiumRuntime/Private/CesiumSampleHeightMostDetailedAsyncAction.cpp index 24d06196f..5f1ad933f 100644 --- a/Source/CesiumRuntime/Private/CesiumSampleHeightMostDetailedAsyncAction.cpp +++ b/Source/CesiumRuntime/Private/CesiumSampleHeightMostDetailedAsyncAction.cpp @@ -16,13 +16,25 @@ UCesiumSampleHeightMostDetailedAsyncAction::SampleHeightMostDetailed( } void UCesiumSampleHeightMostDetailedAsyncAction::Activate() { - this->RegisterWithGameInstance(this->_pTileset); + if (!IsValid(this->_pTileset)) { + TArray Warnings; + Warnings.Push(TEXT( + "Invalid Tileset parameter passed to UCesiumSampleHeightMostDetailedAsyncAction, returning no results")); - this->_pTileset->SampleHeightMostDetailed( - this->_longitudeLatitudeHeightArray, - FCesiumSampleHeightMostDetailedCallback::CreateUObject( - this, - &UCesiumSampleHeightMostDetailedAsyncAction::RaiseOnHeightsSampled)); + this->RaiseOnHeightsSampled( + this->_pTileset, + TArray(), + Warnings); + } else { + this->RegisterWithGameInstance(this->_pTileset); + + this->_pTileset->SampleHeightMostDetailed( + this->_longitudeLatitudeHeightArray, + FCesiumSampleHeightMostDetailedCallback::CreateUObject( + this, + &UCesiumSampleHeightMostDetailedAsyncAction:: + RaiseOnHeightsSampled)); + } } void UCesiumSampleHeightMostDetailedAsyncAction::RaiseOnHeightsSampled( diff --git a/Source/CesiumRuntime/Private/Tests/SampleHeightMostDetailed.spec.cpp b/Source/CesiumRuntime/Private/Tests/SampleHeightMostDetailed.spec.cpp index 479e63beb..ea454cd7e 100644 --- a/Source/CesiumRuntime/Private/Tests/SampleHeightMostDetailed.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/SampleHeightMostDetailed.spec.cpp @@ -309,7 +309,7 @@ void FSampleHeightMostDetailedSpec::Define() { }); LatentIt( - "", + "invalid tileset URL", EAsyncExecution::TaskGraphMainThread, [this](const FDoneDelegate& done) { // Two slightly different error messages will occur, depending on @@ -354,5 +354,30 @@ void FSampleHeightMostDetailedSpec::Define() { done.ExecuteIfBound(); })); }); + + LatentIt( + "tileset parameter is nullptr", + EAsyncExecution::TaskGraphMainThread, + [this](const FDoneDelegate& done) { + UCesiumSampleHeightMostDetailedAsyncAction* pAsync = + UCesiumSampleHeightMostDetailedAsyncAction:: + SampleHeightMostDetailed( + nullptr, + {FVector(144.93406, -37.82457, 1.0)}); + + USampleHeightCallbackReceiver::Bind( + pAsync->OnHeightsSampled, + [this, done]( + const TArray& result, + const TArray& warnings) { + TestEqual("Number of results", result.Num(), 0); + TestEqual("Number of warnings", warnings.Num(), 1); + done.ExecuteIfBound(); + }); + + pAsync->Activate(); + }); }); + + } From 9e3d291dfb011fe898f50ba313cfcfb52a1706f8 Mon Sep 17 00:00:00 2001 From: Ashley Rogers Date: Mon, 27 Jan 2025 14:14:37 -0500 Subject: [PATCH 2/3] Format --- .../Private/Tests/SampleHeightMostDetailed.spec.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/Source/CesiumRuntime/Private/Tests/SampleHeightMostDetailed.spec.cpp b/Source/CesiumRuntime/Private/Tests/SampleHeightMostDetailed.spec.cpp index ea454cd7e..a0ed673ac 100644 --- a/Source/CesiumRuntime/Private/Tests/SampleHeightMostDetailed.spec.cpp +++ b/Source/CesiumRuntime/Private/Tests/SampleHeightMostDetailed.spec.cpp @@ -378,6 +378,4 @@ void FSampleHeightMostDetailedSpec::Define() { pAsync->Activate(); }); }); - - } From 2abe952dea9ea5b390b7db020b6efb1556b4be6a Mon Sep 17 00:00:00 2001 From: Ashley Rogers Date: Mon, 27 Jan 2025 14:15:26 -0500 Subject: [PATCH 3/3] Update CHANGES --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index 706a1577c..4e3636795 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,7 @@ ##### Fixes :wrench: - Fixed another bug in `CesiumSubLevelSwitcherComponent` that could prevent all sub-levels from loading if a single sub-level failed to load. +- Fixed crash when calling `SampleHeightMostDetailed` blueprint function without a valid tileset. ### v2.12.0 - 2025-01-02