5#include "CoreMinimal.h"
6#include "Subsystems/WorldSubsystem.h"
8#include "Engine/StreamableManager.h"
9#include "Interfaces/IHttpRequest.h"
10#include "Interfaces/IHttpResponse.h"
11#include "Async/AsyncWork.h"
12#include "ArcanaWorldSubsystem.generated.h"
19 FAsyncStreamingWorker(
const TArray<FVector>& InPlayerLocations,
const TArray<FVector>& InPointPositions,
float InRadiusSq)
40 virtual void OnWorldBeginPlay(UWorld& InWorld)
override;
41 virtual void Deinitialize()
override;
43 void RegisterDirectPoints(uint32 SourceID,
const TArray<FTransform>& Transforms,
const FGameplayTagContainer& ZoneFilters,
const FGameplayTagContainer& RarityFilters,
float MinDelay,
float MaxDelay);
44 void UnregisterSource(uint32 SourceID);
51 UPROPERTY(EditDefaultsOnly, Category =
"Spawner Settings")
54 UPROPERTY(EditDefaultsOnly, Category = "Spawner Settings")
55 FString RemoteDatabaseURL = TEXT("yourgame.com");
58 UDataTable* LocalSpawnDataTable;
60 FStreamableManager StreamableManager;
61 FTimerHandle EvaluationTimerHandle;
62 bool bWorkerThreadActive = false;
63 bool bDefinitionsLoaded = false;
68 TMap<FGameplayTag, int32> GlobalLimits;
69 TMap<FGameplayTag, int32> CurrentGlobalCounts;
71 const
float StreamRadiusSq = 144000000.0f;
73 void InitializeDataFetch();
74 void LoadFromLocalDataTable();
75 void FetchFromRemoteAPI();
76 void OnRemoteResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response,
bool bWasSuccessful);
77 void ProcessRawJsonPayload(const FString& JsonString);
78 void FinalizeDefinitionsLoad();
80 void RunParallelStreamingCheck();
81 void ApplyParallelStreamingResults(TArray<
bool> ProximityResults);
83 const
FSpawnableItemDefinition* SelectRandomRow(const FGameplayTagContainer& Zones, const FGameplayTagContainer& Rarities) const;
84 void RequestAsyncMaterialize(int32 TargetIndex, TSoftClassPtr<AActor> ClassPtr);
87 void OnPhysicalActorDestroyed(AActor* DestroyedActor);
88 void ExecuteRespawnLogic(uint32 InstanceHash, FGameplayTag ItemTag, uint32 SourceID,
float MinDelay,
float MaxDelay);
EDataFetchMode
Definition: ArcanaVirtualizedSpawnTypes.h:19
DECLARE_MULTICAST_DELEGATE(FOnSpawnDefinitionsReady)
Definition: ArcanaWorldSubsystem.h:17
TArray< FVector > PointPositions
Definition: ArcanaWorldSubsystem.h:23
TArray< FVector > PlayerLocations
Definition: ArcanaWorldSubsystem.h:22
float RadiusSq
Definition: ArcanaWorldSubsystem.h:25
void DoWork()
Definition: ArcanaWorldSubsystem.cpp:14
FAsyncStreamingWorker(const TArray< FVector > &InPlayerLocations, const TArray< FVector > &InPointPositions, float InRadiusSq)
Definition: ArcanaWorldSubsystem.h:19
TArray< bool > OutProximityResults
Definition: ArcanaWorldSubsystem.h:24
FORCEINLINE TStatId GetStatId() const
Definition: ArcanaWorldSubsystem.h:28
Definition: ArcanaWorldSubsystem.h:36
bool AreDefinitionsLoaded() const
Definition: ArcanaWorldSubsystem.h:48
FOnSpawnDefinitionsReady OnDefinitionsReady
Definition: ArcanaWorldSubsystem.h:47
Definition: ArcanaVirtualizedSpawnTypes.h:70
Definition: ArcanaVirtualizedSpawnTypes.h:27