@@ -44,8 +44,9 @@ using namespace CesiumIonClient;
44
44
45
45
// If this is a tileset, close any already-open panels associated with its
46
46
// overlays. Overlays won't appear until the tileset is working anyway.
47
- ACesium3DTileset** ppTileset = std::get_if<ACesium3DTileset*>(&ionObject);
48
- if (ppTileset && *ppTileset) {
47
+ TWeakObjectPtr<ACesium3DTileset>* ppTileset =
48
+ std::get_if<TWeakObjectPtr<ACesium3DTileset>>(&ionObject);
49
+ if (ppTileset && ppTileset->IsValid ()) {
49
50
TArray<UCesiumRasterOverlay*> rasterOverlays;
50
51
(*ppTileset)->GetComponents <UCesiumRasterOverlay>(rasterOverlays);
51
52
@@ -66,9 +67,9 @@ using namespace CesiumIonClient;
66
67
67
68
// If this is a raster overlay and this panel is already open for its attached
68
69
// tileset, don't open the panel for the overlay for the same reason as above.
69
- UCesiumRasterOverlay* * ppRasterOverlay =
70
- std::get_if<UCesiumRasterOverlay* >(&ionObject);
71
- if (ppRasterOverlay && * ppRasterOverlay) {
70
+ TWeakObjectPtr< UCesiumRasterOverlay> * ppRasterOverlay =
71
+ std::get_if<TWeakObjectPtr< UCesiumRasterOverlay> >(&ionObject);
72
+ if (ppRasterOverlay && ppRasterOverlay-> IsValid () ) {
72
73
ACesium3DTileset* pOwner =
73
74
Cast<ACesium3DTileset>((*ppRasterOverlay)->GetOwner ());
74
75
if (pOwner) {
@@ -148,12 +149,13 @@ bool isNull(const CesiumIonObject& o) {
148
149
149
150
FString getLabel (const CesiumIonObject& o) {
150
151
struct Operation {
151
- FString operator ()(ACesium3DTileset* pTileset) {
152
- return pTileset ? pTileset->GetActorLabel () : TEXT (" Unknown" );
152
+ FString operator ()(TWeakObjectPtr< ACesium3DTileset> pTileset) {
153
+ return pTileset. IsValid () ? pTileset->GetActorLabel () : TEXT (" Unknown" );
153
154
}
154
155
155
- FString operator ()(UCesiumRasterOverlay* pRasterOverlay) {
156
- return pRasterOverlay ? pRasterOverlay->GetName () : TEXT (" Unknown" );
156
+ FString operator ()(TWeakObjectPtr<UCesiumRasterOverlay> pRasterOverlay) {
157
+ return pRasterOverlay.IsValid () ? pRasterOverlay->GetName ()
158
+ : TEXT (" Unknown" );
157
159
}
158
160
};
159
161
@@ -166,15 +168,19 @@ FString getName(const CesiumIonObject& o) {
166
168
167
169
int64 getIonAssetID (const CesiumIonObject& o) {
168
170
struct Operation {
169
- int64 operator ()(ACesium3DTileset* pTileset) {
171
+ int64 operator ()(TWeakObjectPtr<ACesium3DTileset> pTileset) {
172
+ if (!pTileset.IsValid ())
173
+ return 0 ;
170
174
if (pTileset->GetTilesetSource () != ETilesetSource::FromCesiumIon) {
171
175
return 0 ;
172
176
} else {
173
177
return pTileset->GetIonAssetID ();
174
178
}
175
179
}
176
180
177
- int64 operator ()(UCesiumRasterOverlay* pRasterOverlay) {
181
+ int64 operator ()(TWeakObjectPtr<UCesiumRasterOverlay> pRasterOverlay) {
182
+ if (!pRasterOverlay.IsValid ())
183
+ return 0 ;
178
184
UCesiumIonRasterOverlay* pIon =
179
185
Cast<UCesiumIonRasterOverlay>(pRasterOverlay);
180
186
if (!pIon) {
@@ -190,15 +196,19 @@ int64 getIonAssetID(const CesiumIonObject& o) {
190
196
191
197
FString getIonAccessToken (const CesiumIonObject& o) {
192
198
struct Operation {
193
- FString operator ()(ACesium3DTileset* pTileset) {
199
+ FString operator ()(TWeakObjectPtr<ACesium3DTileset> pTileset) {
200
+ if (!pTileset.IsValid ())
201
+ return FString ();
194
202
if (pTileset->GetTilesetSource () != ETilesetSource::FromCesiumIon) {
195
203
return FString ();
196
204
} else {
197
205
return pTileset->GetIonAccessToken ();
198
206
}
199
207
}
200
208
201
- FString operator ()(UCesiumRasterOverlay* pRasterOverlay) {
209
+ FString operator ()(TWeakObjectPtr<UCesiumRasterOverlay> pRasterOverlay) {
210
+ if (!pRasterOverlay.IsValid ())
211
+ return FString ();
202
212
UCesiumIonRasterOverlay* pIon =
203
213
Cast<UCesiumIonRasterOverlay>(pRasterOverlay);
204
214
if (!pIon) {
@@ -216,7 +226,9 @@ void setIonAccessToken(const CesiumIonObject& o, const FString& newToken) {
216
226
struct Operation {
217
227
const FString& newToken;
218
228
219
- void operator ()(ACesium3DTileset* pTileset) {
229
+ void operator ()(TWeakObjectPtr<ACesium3DTileset> pTileset) {
230
+ if (!pTileset.IsValid ())
231
+ return ;
220
232
if (pTileset->GetIonAccessToken () != newToken) {
221
233
pTileset->Modify ();
222
234
pTileset->SetIonAccessToken (newToken);
@@ -225,7 +237,9 @@ void setIonAccessToken(const CesiumIonObject& o, const FString& newToken) {
225
237
}
226
238
}
227
239
228
- void operator ()(UCesiumRasterOverlay* pRasterOverlay) {
240
+ void operator ()(TWeakObjectPtr<UCesiumRasterOverlay> pRasterOverlay) {
241
+ if (!pRasterOverlay.IsValid ())
242
+ return ;
229
243
UCesiumIonRasterOverlay* pIon =
230
244
Cast<UCesiumIonRasterOverlay>(pRasterOverlay);
231
245
if (!pIon) {
@@ -245,9 +259,11 @@ void setIonAccessToken(const CesiumIonObject& o, const FString& newToken) {
245
259
246
260
FString getObjectType (const CesiumIonObject& o) {
247
261
struct Operation {
248
- FString operator ()(ACesium3DTileset* pTileset) { return TEXT (" Tileset" ); }
262
+ FString operator ()(TWeakObjectPtr<ACesium3DTileset> pTileset) {
263
+ return TEXT (" Tileset" );
264
+ }
249
265
250
- FString operator ()(UCesiumRasterOverlay* pRasterOverlay) {
266
+ FString operator ()(TWeakObjectPtr< UCesiumRasterOverlay> pRasterOverlay) {
251
267
return TEXT (" Raster Overlay" );
252
268
}
253
269
};
@@ -256,16 +272,21 @@ FString getObjectType(const CesiumIonObject& o) {
256
272
}
257
273
258
274
UObject* asUObject (const CesiumIonObject& o) {
259
- return std::visit ([](auto p) -> UObject* { return p; }, o);
275
+ return std::visit (
276
+ [](auto p) -> UObject* { return p.IsValid () ? p.Get () : nullptr ; },
277
+ o);
260
278
}
261
279
262
280
bool isUsingCesiumIon (const CesiumIonObject& o) {
263
281
struct Operation {
264
- bool operator ()(ACesium3DTileset* pTileset) {
265
- return pTileset->GetTilesetSource () == ETilesetSource::FromCesiumIon;
282
+ bool operator ()(TWeakObjectPtr<ACesium3DTileset> pTileset) {
283
+ return pTileset.IsValid () &&
284
+ pTileset->GetTilesetSource () == ETilesetSource::FromCesiumIon;
266
285
}
267
286
268
- bool operator ()(UCesiumRasterOverlay* pRasterOverlay) {
287
+ bool operator ()(TWeakObjectPtr<UCesiumRasterOverlay> pRasterOverlay) {
288
+ if (!pRasterOverlay.IsValid ())
289
+ return false ;
269
290
UCesiumIonRasterOverlay* pIon =
270
291
Cast<UCesiumIonRasterOverlay>(pRasterOverlay);
271
292
return pIon != nullptr ;
@@ -277,12 +298,15 @@ bool isUsingCesiumIon(const CesiumIonObject& o) {
277
298
278
299
UCesiumIonServer* getCesiumIonServer (const CesiumIonObject& o) {
279
300
struct Operation {
280
- UCesiumIonServer* operator ()(const ACesium3DTileset* pTileset) noexcept {
281
- return pTileset->GetCesiumIonServer ();
301
+ UCesiumIonServer*
302
+ operator ()(TWeakObjectPtr<ACesium3DTileset> pTileset) noexcept {
303
+ return pTileset.IsValid () ? pTileset->GetCesiumIonServer () : nullptr ;
282
304
}
283
305
284
306
UCesiumIonServer*
285
- operator ()(const UCesiumRasterOverlay* pRasterOverlay) noexcept {
307
+ operator ()(TWeakObjectPtr<UCesiumRasterOverlay> pRasterOverlay) noexcept {
308
+ if (!pRasterOverlay.IsValid ())
309
+ return nullptr ;
286
310
const UCesiumIonRasterOverlay* pIon =
287
311
Cast<UCesiumIonRasterOverlay>(pRasterOverlay);
288
312
return pIon ? pIon->CesiumIonServer : nullptr ;
0 commit comments