2025-06-29 19:04:36 +02:00
|
|
|
|
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include "CoreMinimal.h"
|
2025-07-08 16:50:31 +02:00
|
|
|
|
#include "Containers/Deque.h"
|
2025-06-29 19:04:36 +02:00
|
|
|
|
#include "Subsystems/EngineSubsystem.h"
|
|
|
|
|
|
#include "Types/Struct/DTFluxRaceDataStructs.h"
|
|
|
|
|
|
#include "Types/Struct/DTFluxTeamListStruct.h"
|
|
|
|
|
|
#include "Types/Struct/DTFluxRankingStructs.h"
|
2025-07-04 01:13:07 +02:00
|
|
|
|
#include "Types/Struct/DTFluxSplitSensor.h"
|
2025-06-29 19:04:36 +02:00
|
|
|
|
#include "DTFluxCoreSubsystem.generated.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-03 17:28:51 +02:00
|
|
|
|
class UDTFluxNetworkSubsystem;
|
2025-06-29 19:04:36 +02:00
|
|
|
|
/** Forward Decl */
|
|
|
|
|
|
class UDTFluxModelAsset;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
UCLASS()
|
|
|
|
|
|
class DTFLUXCORESUBSYSTEM_API UDTFluxCoreSubsystem : public UEngineSubsystem
|
|
|
|
|
|
{
|
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
2025-07-04 15:17:22 +02:00
|
|
|
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnSplitRankings, FDTFluxSplitRankings&, SplitRankings);
|
2025-07-08 16:50:31 +02:00
|
|
|
|
|
2025-06-29 19:04:36 +02:00
|
|
|
|
UPROPERTY(BlueprintAssignable, Category="DTFlux|Core Subsystem")
|
|
|
|
|
|
FOnSplitRankings OnSplitRankings;
|
2025-07-08 16:50:31 +02:00
|
|
|
|
|
2025-07-04 15:17:22 +02:00
|
|
|
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnStageRankings, FDTFluxStageRankings&, StageRankings);
|
2025-07-08 16:50:31 +02:00
|
|
|
|
|
2025-06-29 19:04:36 +02:00
|
|
|
|
UPROPERTY(BlueprintAssignable, Category="DTFlux|Core Subsystem")
|
|
|
|
|
|
FOnStageRankings OnStageRankings;
|
2025-07-08 16:50:31 +02:00
|
|
|
|
|
2025-07-04 15:17:22 +02:00
|
|
|
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnContestRankings, FDTFluxContestRankings&, ContestRankings);
|
2025-07-08 16:50:31 +02:00
|
|
|
|
|
2025-06-29 19:04:36 +02:00
|
|
|
|
UPROPERTY(BlueprintAssignable, Category="DTFlux|Core Subsystem")
|
|
|
|
|
|
FOnContestRankings OnContestRankings;
|
|
|
|
|
|
|
2025-07-04 15:17:22 +02:00
|
|
|
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnTeamList);
|
2025-07-08 16:50:31 +02:00
|
|
|
|
|
2025-06-29 19:04:36 +02:00
|
|
|
|
UPROPERTY(BlueprintAssignable, Category="DTFlux|Core Subsystem")
|
|
|
|
|
|
FOnTeamList OnTeamList;
|
2025-07-08 16:50:31 +02:00
|
|
|
|
|
2025-07-04 15:17:22 +02:00
|
|
|
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnTeamStatusUpdate, FDTFluxParticipant, TeamUpdated);
|
2025-07-08 16:50:31 +02:00
|
|
|
|
|
2025-06-29 19:04:36 +02:00
|
|
|
|
UPROPERTY(BlueprintAssignable, Category="DTFlux|Core Subsystem")
|
|
|
|
|
|
FOnTeamStatusUpdate OnTeamStatusUpdate;
|
2025-07-08 16:50:31 +02:00
|
|
|
|
|
|
|
|
|
|
DECLARE_DELEGATE_TwoParams(FOnRequestedStageRankings, const FDTFluxStageKey&, const FDTFluxContestRankings&);
|
|
|
|
|
|
FOnRequestedStageRankings OnRequestedStageRankings;
|
2025-07-04 15:17:22 +02:00
|
|
|
|
//
|
|
|
|
|
|
// DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnTeamUpdate, FDateTime, ReceivedAt, FDTFluxParticipant, TeamUpdatedList);
|
|
|
|
|
|
// UPROPERTY(BlueprintAssignable, Category="DTFlux|Core Subsystem")
|
|
|
|
|
|
// FOnTeamUpdate OnTeamUpdate;
|
|
|
|
|
|
|
2025-07-08 16:50:31 +02:00
|
|
|
|
|
2025-06-29 19:04:36 +02:00
|
|
|
|
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
2025-07-08 16:50:31 +02:00
|
|
|
|
void SendTeamListRequest();
|
|
|
|
|
|
|
2025-06-29 19:04:36 +02:00
|
|
|
|
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
2025-07-08 16:50:31 +02:00
|
|
|
|
void SendRaceDataRequest();
|
|
|
|
|
|
|
2025-06-29 19:04:36 +02:00
|
|
|
|
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
2025-07-08 16:50:31 +02:00
|
|
|
|
void SendContestRankingRequest(int InContestId);
|
|
|
|
|
|
|
2025-06-29 19:04:36 +02:00
|
|
|
|
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
|
|
|
|
|
void SendStageRankingRequest(int InContestId, int InStageId, bool bShouldIncludeSplitRanking = true);
|
|
|
|
|
|
|
|
|
|
|
|
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
2025-07-08 16:50:31 +02:00
|
|
|
|
void RequestAllStageRankingOfContest(int InContestId, int InStageId, bool bShouldIncludeSplitRanking = true);
|
|
|
|
|
|
|
2025-06-29 19:04:36 +02:00
|
|
|
|
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
|
|
|
|
|
void SendSplitRankingRequest(int InContestId, int InStageId, int InSplitId);
|
2025-07-08 16:50:31 +02:00
|
|
|
|
|
2025-06-29 19:04:36 +02:00
|
|
|
|
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
|
|
|
|
|
void RequestAllSplitRankingOfContest(int InContestId, int InStageId);
|
|
|
|
|
|
|
2025-07-04 15:17:22 +02:00
|
|
|
|
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
|
|
|
|
|
FDTFluxStageRankings GetStageRankings(FDTFluxStageKey StageKey);
|
|
|
|
|
|
|
2025-06-29 19:04:36 +02:00
|
|
|
|
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
|
|
|
|
|
void RequestAllSplitRankingOfStage(int InContestId, int InStageId, int InSplitId);
|
|
|
|
|
|
|
|
|
|
|
|
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
|
|
|
|
|
void RefreshStorage();
|
|
|
|
|
|
|
2025-07-04 15:17:22 +02:00
|
|
|
|
UFUNCTION()
|
|
|
|
|
|
TArray<int> GetCurrentContestsId();
|
|
|
|
|
|
UFUNCTION()
|
|
|
|
|
|
TArray<FDTFluxContest> GetCurrentContests();
|
|
|
|
|
|
UFUNCTION()
|
|
|
|
|
|
TArray<int> GetContestsIdForTime(const FDateTime Time);
|
|
|
|
|
|
UFUNCTION()
|
|
|
|
|
|
TArray<FDTFluxContest> GetContestsForTime(const FDateTime Time);
|
|
|
|
|
|
|
2025-07-08 16:50:31 +02:00
|
|
|
|
UFUNCTION()
|
|
|
|
|
|
void RequestRankingsForStages(const TArray<FDTFluxStage> RequestedStages) const;
|
|
|
|
|
|
UFUNCTION()
|
|
|
|
|
|
TArray<FDTFluxContest> GetContests();
|
2025-07-04 15:17:22 +02:00
|
|
|
|
|
2025-06-29 19:04:36 +02:00
|
|
|
|
protected:
|
|
|
|
|
|
// ~Subsystem Interface
|
|
|
|
|
|
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
|
|
|
|
|
|
virtual void Deinitialize() override;
|
|
|
|
|
|
// ~Subsystem Interface
|
2025-07-08 16:50:31 +02:00
|
|
|
|
|
|
|
|
|
|
|
2025-07-04 01:13:07 +02:00
|
|
|
|
UFUNCTION()
|
2025-07-03 17:28:51 +02:00
|
|
|
|
void SaveDataStorage();
|
2025-07-08 16:50:31 +02:00
|
|
|
|
|
2025-06-29 19:04:36 +02:00
|
|
|
|
private:
|
2025-07-03 17:28:51 +02:00
|
|
|
|
UDTFluxNetworkSubsystem* NetworkSubsystem = nullptr;
|
2025-06-29 19:04:36 +02:00
|
|
|
|
|
|
|
|
|
|
UFUNCTION()
|
2025-07-03 17:28:51 +02:00
|
|
|
|
void ProcessRaceData(const FDTFluxRaceData& RaceDataDefinition);
|
|
|
|
|
|
UFUNCTION()
|
|
|
|
|
|
void ProcessTeamList(const FDTFluxTeamListDefinition& TeamListDefinition);
|
|
|
|
|
|
UFUNCTION()
|
|
|
|
|
|
void ProcessContestRanking(const FDTFluxContestRankings& ContestRankings);
|
2025-06-29 19:04:36 +02:00
|
|
|
|
UFUNCTION()
|
2025-07-03 17:28:51 +02:00
|
|
|
|
void ProcessStageRanking(const FDTFluxStageRankings& StageRankings);
|
2025-06-29 19:04:36 +02:00
|
|
|
|
UFUNCTION()
|
2025-07-03 17:28:51 +02:00
|
|
|
|
void ProcessSplitRanking(const FDTFluxSplitRankings& SplitRankings);
|
2025-06-30 19:02:19 +02:00
|
|
|
|
UFUNCTION()
|
2025-07-08 16:50:31 +02:00
|
|
|
|
void ProcessTeamStatusUpdate(const FDTFluxTeamStatusUpdate& NewParticipantStatus);
|
2025-07-04 01:13:07 +02:00
|
|
|
|
UFUNCTION()
|
|
|
|
|
|
void ProcessSplitSensor(const FDTFluxSplitSensorInfo& SplitSensorInfo);
|
2025-06-30 19:02:19 +02:00
|
|
|
|
UFUNCTION()
|
2025-07-08 16:50:31 +02:00
|
|
|
|
void ProcessTeamUpdate(const FDTFluxTeamListDefinition& TeamListDefinition);
|
2025-06-29 19:04:36 +02:00
|
|
|
|
UFUNCTION()
|
|
|
|
|
|
void SendRequest(const FString& Message);
|
|
|
|
|
|
UFUNCTION()
|
|
|
|
|
|
void RegisterDelegates();
|
|
|
|
|
|
|
2025-07-08 16:50:31 +02:00
|
|
|
|
|
2025-06-29 19:04:36 +02:00
|
|
|
|
UPROPERTY()
|
|
|
|
|
|
UDTFluxModelAsset* DataStorage = nullptr;
|
|
|
|
|
|
};
|