2
2
3
3
#include " CesiumIonServerManager.h"
4
4
#include " AssetRegistry/AssetRegistryModule.h"
5
+ #include " Cesium3DTileset.h"
5
6
#include " CesiumEditorSettings.h"
7
+ #include " CesiumIonRasterOverlay.h"
6
8
#include " CesiumIonServer.h"
7
9
#include " CesiumIonSession.h"
8
10
#include " CesiumRuntime.h"
9
11
#include " CesiumRuntimeSettings.h"
10
12
#include " CesiumSourceControl.h"
13
+ #include " Editor.h"
14
+ #include " EngineUtils.h"
11
15
#include " FileHelpers.h"
12
16
13
17
CesiumIonServerManager::CesiumIonServerManager () noexcept {
@@ -19,6 +23,9 @@ CesiumIonServerManager::CesiumIonServerManager() noexcept {
19
23
AssetRegistryModule.GetRegistry ().OnAssetRemoved ().AddRaw (
20
24
this ,
21
25
&CesiumIonServerManager::OnAssetRemoved);
26
+ AssetRegistryModule.GetRegistry ().OnAssetUpdated ().AddRaw (
27
+ this ,
28
+ &CesiumIonServerManager::OnAssetUpdated);
22
29
}
23
30
24
31
CesiumIonServerManager::~CesiumIonServerManager () noexcept {
@@ -27,6 +34,7 @@ CesiumIonServerManager::~CesiumIonServerManager() noexcept {
27
34
if (pAssetRegistryModule) {
28
35
pAssetRegistryModule->GetRegistry ().OnAssetAdded ().RemoveAll (this );
29
36
pAssetRegistryModule->GetRegistry ().OnAssetRemoved ().RemoveAll (this );
37
+ pAssetRegistryModule->GetRegistry ().OnAssetUpdated ().RemoveAll (this );
30
38
}
31
39
}
32
40
@@ -194,3 +202,36 @@ void CesiumIonServerManager::OnAssetRemoved(const FAssetData& asset) {
194
202
}
195
203
}
196
204
}
205
+
206
+ void CesiumIonServerManager::OnAssetUpdated (const FAssetData& asset) {
207
+ if (!GEditor)
208
+ return ;
209
+
210
+ if (asset.AssetClassPath !=
211
+ UCesiumIonServer::StaticClass ()->GetClassPathName ())
212
+ return ;
213
+
214
+ // When a Cesium ion Server definition changes, refresh any objects that use
215
+ // it.
216
+ UCesiumIonServer* pServer = Cast<UCesiumIonServer>(asset.GetAsset ());
217
+ if (!pServer)
218
+ return ;
219
+
220
+ UWorld* pCurrentWorld = GEditor->GetEditorWorldContext ().World ();
221
+ if (!pCurrentWorld)
222
+ return ;
223
+
224
+ for (TActorIterator<ACesium3DTileset> it (pCurrentWorld); it; ++it) {
225
+ if (it->GetCesiumIonServer () == pServer) {
226
+ it->RefreshTileset ();
227
+ } else {
228
+ TArray<UCesiumIonRasterOverlay*> rasterOverlays;
229
+ it->GetComponents <UCesiumIonRasterOverlay>(rasterOverlays);
230
+
231
+ for (UCesiumIonRasterOverlay* pOverlay : rasterOverlays) {
232
+ if (pOverlay->CesiumIonServer == pServer)
233
+ pOverlay->Refresh ();
234
+ }
235
+ }
236
+ }
237
+ }
0 commit comments