Skip to content

Commit 43f9e95

Browse files
committed
TWeakObjectPtr to tileset/overlay on token troubleshooting.
1 parent 2a42726 commit 43f9e95

File tree

2 files changed

+51
-25
lines changed

2 files changed

+51
-25
lines changed

Source/CesiumEditor/Private/CesiumIonTokenTroubleshooting.cpp

+48-24
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,9 @@ using namespace CesiumIonClient;
4444

4545
// If this is a tileset, close any already-open panels associated with its
4646
// 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()) {
4950
TArray<UCesiumRasterOverlay*> rasterOverlays;
5051
(*ppTileset)->GetComponents<UCesiumRasterOverlay>(rasterOverlays);
5152

@@ -66,9 +67,9 @@ using namespace CesiumIonClient;
6667

6768
// If this is a raster overlay and this panel is already open for its attached
6869
// 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()) {
7273
ACesium3DTileset* pOwner =
7374
Cast<ACesium3DTileset>((*ppRasterOverlay)->GetOwner());
7475
if (pOwner) {
@@ -148,12 +149,13 @@ bool isNull(const CesiumIonObject& o) {
148149

149150
FString getLabel(const CesiumIonObject& o) {
150151
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");
153154
}
154155

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");
157159
}
158160
};
159161

@@ -166,15 +168,19 @@ FString getName(const CesiumIonObject& o) {
166168

167169
int64 getIonAssetID(const CesiumIonObject& o) {
168170
struct Operation {
169-
int64 operator()(ACesium3DTileset* pTileset) {
171+
int64 operator()(TWeakObjectPtr<ACesium3DTileset> pTileset) {
172+
if (!pTileset.IsValid())
173+
return 0;
170174
if (pTileset->GetTilesetSource() != ETilesetSource::FromCesiumIon) {
171175
return 0;
172176
} else {
173177
return pTileset->GetIonAssetID();
174178
}
175179
}
176180

177-
int64 operator()(UCesiumRasterOverlay* pRasterOverlay) {
181+
int64 operator()(TWeakObjectPtr<UCesiumRasterOverlay> pRasterOverlay) {
182+
if (!pRasterOverlay.IsValid())
183+
return 0;
178184
UCesiumIonRasterOverlay* pIon =
179185
Cast<UCesiumIonRasterOverlay>(pRasterOverlay);
180186
if (!pIon) {
@@ -190,15 +196,19 @@ int64 getIonAssetID(const CesiumIonObject& o) {
190196

191197
FString getIonAccessToken(const CesiumIonObject& o) {
192198
struct Operation {
193-
FString operator()(ACesium3DTileset* pTileset) {
199+
FString operator()(TWeakObjectPtr<ACesium3DTileset> pTileset) {
200+
if (!pTileset.IsValid())
201+
return FString();
194202
if (pTileset->GetTilesetSource() != ETilesetSource::FromCesiumIon) {
195203
return FString();
196204
} else {
197205
return pTileset->GetIonAccessToken();
198206
}
199207
}
200208

201-
FString operator()(UCesiumRasterOverlay* pRasterOverlay) {
209+
FString operator()(TWeakObjectPtr<UCesiumRasterOverlay> pRasterOverlay) {
210+
if (!pRasterOverlay.IsValid())
211+
return FString();
202212
UCesiumIonRasterOverlay* pIon =
203213
Cast<UCesiumIonRasterOverlay>(pRasterOverlay);
204214
if (!pIon) {
@@ -216,7 +226,9 @@ void setIonAccessToken(const CesiumIonObject& o, const FString& newToken) {
216226
struct Operation {
217227
const FString& newToken;
218228

219-
void operator()(ACesium3DTileset* pTileset) {
229+
void operator()(TWeakObjectPtr<ACesium3DTileset> pTileset) {
230+
if (!pTileset.IsValid())
231+
return;
220232
if (pTileset->GetIonAccessToken() != newToken) {
221233
pTileset->Modify();
222234
pTileset->SetIonAccessToken(newToken);
@@ -225,7 +237,9 @@ void setIonAccessToken(const CesiumIonObject& o, const FString& newToken) {
225237
}
226238
}
227239

228-
void operator()(UCesiumRasterOverlay* pRasterOverlay) {
240+
void operator()(TWeakObjectPtr<UCesiumRasterOverlay> pRasterOverlay) {
241+
if (!pRasterOverlay.IsValid())
242+
return;
229243
UCesiumIonRasterOverlay* pIon =
230244
Cast<UCesiumIonRasterOverlay>(pRasterOverlay);
231245
if (!pIon) {
@@ -245,9 +259,11 @@ void setIonAccessToken(const CesiumIonObject& o, const FString& newToken) {
245259

246260
FString getObjectType(const CesiumIonObject& o) {
247261
struct Operation {
248-
FString operator()(ACesium3DTileset* pTileset) { return TEXT("Tileset"); }
262+
FString operator()(TWeakObjectPtr<ACesium3DTileset> pTileset) {
263+
return TEXT("Tileset");
264+
}
249265

250-
FString operator()(UCesiumRasterOverlay* pRasterOverlay) {
266+
FString operator()(TWeakObjectPtr<UCesiumRasterOverlay> pRasterOverlay) {
251267
return TEXT("Raster Overlay");
252268
}
253269
};
@@ -256,16 +272,21 @@ FString getObjectType(const CesiumIonObject& o) {
256272
}
257273

258274
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);
260278
}
261279

262280
bool isUsingCesiumIon(const CesiumIonObject& o) {
263281
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;
266285
}
267286

268-
bool operator()(UCesiumRasterOverlay* pRasterOverlay) {
287+
bool operator()(TWeakObjectPtr<UCesiumRasterOverlay> pRasterOverlay) {
288+
if (!pRasterOverlay.IsValid())
289+
return false;
269290
UCesiumIonRasterOverlay* pIon =
270291
Cast<UCesiumIonRasterOverlay>(pRasterOverlay);
271292
return pIon != nullptr;
@@ -277,12 +298,15 @@ bool isUsingCesiumIon(const CesiumIonObject& o) {
277298

278299
UCesiumIonServer* getCesiumIonServer(const CesiumIonObject& o) {
279300
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;
282304
}
283305

284306
UCesiumIonServer*
285-
operator()(const UCesiumRasterOverlay* pRasterOverlay) noexcept {
307+
operator()(TWeakObjectPtr<UCesiumRasterOverlay> pRasterOverlay) noexcept {
308+
if (!pRasterOverlay.IsValid())
309+
return nullptr;
286310
const UCesiumIonRasterOverlay* pIon =
287311
Cast<UCesiumIonRasterOverlay>(pRasterOverlay);
288312
return pIon ? pIon->CesiumIonServer : nullptr;

Source/CesiumEditor/Private/CesiumIonTokenTroubleshooting.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
class ACesium3DTileset;
1111
class UCesiumRasterOverlay;
1212

13-
using CesiumIonObject = std::variant<ACesium3DTileset*, UCesiumRasterOverlay*>;
13+
using CesiumIonObject = std::variant<
14+
TWeakObjectPtr<ACesium3DTileset>,
15+
TWeakObjectPtr<UCesiumRasterOverlay>>;
1416

1517
class CesiumIonTokenTroubleshooting : public SWindow {
1618
SLATE_BEGIN_ARGS(CesiumIonTokenTroubleshooting) {}

0 commit comments

Comments
 (0)