Skip to content

Commit ede6c52

Browse files
committed
Add RequestHeaders property to Cesium3DTileset
1 parent 31c9dce commit ede6c52

File tree

4 files changed

+55
-1
lines changed

4 files changed

+55
-1
lines changed

CHANGES.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Change Log
22

3+
### ? - ?
4+
5+
##### Additions :tada:
6+
- Added `RequestHeaders` property to `Cesium3DTileset`, allowing per-tileset headers to be specified.
7+
38
### v2.12.0 - 2025-01-02
49

510
##### Breaking Changes :mega:

Source/CesiumRuntime/Private/Cesium3DTileset.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,31 @@ void ACesium3DTileset::SetTilesetSource(ETilesetSource InSource) {
385385
}
386386
}
387387

388+
bool CompareMaps(
389+
const TMap<FString, FString>& Lhs,
390+
const TMap<FString, FString>& Rhs) {
391+
if (Lhs.Num() != Rhs.Num()) {
392+
return false;
393+
}
394+
395+
for (auto& [Key, Value] : Lhs) {
396+
const FString* RhsVal = Rhs.Find(Key);
397+
if (!RhsVal || *RhsVal != Value) {
398+
return false;
399+
}
400+
}
401+
402+
return true;
403+
}
404+
405+
void ACesium3DTileset::SetRequestHeaders(
406+
const TMap<FString, FString>& InRequestHeaders) {
407+
if (!CompareMaps(InRequestHeaders, this->RequestHeaders)) {
408+
this->DestroyTileset();
409+
this->RequestHeaders = RequestHeaders;
410+
}
411+
}
412+
388413
void ACesium3DTileset::SetUrl(const FString& InUrl) {
389414
if (InUrl != this->Url) {
390415
if (this->TilesetSource == ETilesetSource::FromUrl) {
@@ -1287,6 +1312,14 @@ void ACesium3DTileset::LoadTileset() {
12871312

12881313
options.contentOptions.applyTextureTransform = false;
12891314

1315+
options.requestHeaders.reserve(this->RequestHeaders.Num());
1316+
1317+
for (auto& [Key, Value] : this->RequestHeaders) {
1318+
options.requestHeaders.emplace_back(CesiumAsync::IAssetAccessor::THeader{
1319+
std::string(TCHAR_TO_UTF8(*Key)),
1320+
std::string(TCHAR_TO_UTF8(*Value))});
1321+
}
1322+
12901323
switch (this->TilesetSource) {
12911324
case ETilesetSource::FromEllipsoid:
12921325
UE_LOG(LogCesium, Log, TEXT("Loading tileset from ellipsoid"));

Source/CesiumRuntime/Public/Cesium3DTileset.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,16 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor {
764764
meta = (EditCondition = "TilesetSource==ETilesetSource::FromCesiumIon"))
765765
UCesiumIonServer* CesiumIonServer;
766766

767+
/**
768+
* Headers to be attached to each request made for this tileset.
769+
*/
770+
UPROPERTY(
771+
EditAnywhere,
772+
BlueprintGetter = GetRequestHeaders,
773+
BlueprintSetter = SetRequestHeaders,
774+
Category = "Cesium")
775+
TMap<FString, FString> RequestHeaders;
776+
767777
/**
768778
* Check if the Cesium ion token used to access this tileset is working
769779
* correctly, and fix it if necessary.
@@ -972,6 +982,12 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor {
972982
UFUNCTION(BlueprintSetter, Category = "Cesium")
973983
void SetUrl(const FString& InUrl);
974984

985+
UFUNCTION(BlueprintGetter, Category = "Cesium")
986+
TMap<FString, FString> GetRequestHeaders() const { return RequestHeaders; }
987+
988+
UFUNCTION(BlueprintSetter, Category = "Cesium")
989+
void SetRequestHeaders(const TMap<FString, FString>& InRequestHeaders);
990+
975991
UFUNCTION(BlueprintGetter, Category = "Cesium")
976992
int64 GetIonAssetID() const { return IonAssetID; }
977993

0 commit comments

Comments
 (0)