From 51e5898d4be1cd38a0da7d334f46ab9f8ba54bba Mon Sep 17 00:00:00 2001 From: Ange-Marie MAURIN Date: Mon, 14 Jul 2025 09:33:25 +0200 Subject: [PATCH] Cosmetic CoreSubsystem cleaning + Added DTFluxDetailedRanking Casting functions --- .../Private/DTFluxCoreSubsystem.cpp | 75 +++++++++ .../Public/DTFluxCoreSubsystem.h | 152 ++++-------------- .../DTFluxUtilities/DTFluxUtilities.Build.cs | 2 +- Source/DTFluxUtilities/Public/FTDFluxUtils.h | 43 +++++ 4 files changed, 153 insertions(+), 119 deletions(-) diff --git a/Source/DTFluxCoreSubsystem/Private/DTFluxCoreSubsystem.cpp b/Source/DTFluxCoreSubsystem/Private/DTFluxCoreSubsystem.cpp index f45cc22..4af6d6f 100644 --- a/Source/DTFluxCoreSubsystem/Private/DTFluxCoreSubsystem.cpp +++ b/Source/DTFluxCoreSubsystem/Private/DTFluxCoreSubsystem.cpp @@ -617,3 +617,78 @@ TArray UDTFluxCoreSubsystem::GetContests() } return TArray(); } + +void UDTFluxCoreSubsystem::GetContest(const int ContestId, FDTFluxContest& OutContest) +{ + OutContest = FDTFluxContest(); + if (GetContestForId(ContestId, OutContest)) + { + return; + } + UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("ContestId %d not found in ContestDefinition"), ContestId) +} + +bool UDTFluxCoreSubsystem::GetStageDefinition(const FDTFluxStageKey StageKey, FDTFluxStage& OutStageDefinition) +{ + int ContestId = StageKey.ContestId; + int StageId = StageKey.StageId; + FDTFluxContest ContestDefinition; + if (GetContestForId(ContestId, ContestDefinition)) + { + for (auto& Stage : ContestDefinition.Stages) + { + if (Stage.StageId == StageId) + { + OutStageDefinition = Stage; + return true; + } + } + } + OutStageDefinition = FDTFluxStage(); + UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("ContestId %d, StageId %d not found in ContestDefinition"), + ContestId, StageId) + return false; +} + +bool UDTFluxCoreSubsystem::GetSplitDefinition(const FDTFluxSplitKey SplitKey, FDTFluxSplit& OutSplitDefinition) +{ + int ContestId = SplitKey.ContestId; + int SplitId = SplitKey.SplitId; + FDTFluxContest ContestDefinition; + if (GetContestForId(ContestId, ContestDefinition)) + { + for (auto& Split : ContestDefinition.Splits) + { + if (Split.SplitId == SplitId) + { + OutSplitDefinition = Split; + return true; + } + } + } + OutSplitDefinition = FDTFluxSplit(); + UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("ContestId %d, SplitId %d not found in ContestDefinition"), + ContestId, SplitId); + return false; +} + +void UDTFluxCoreSubsystem::GetStage(const int ContestId, const int StageId, FDTFluxStage& OutStageDefinition) +{ + if (GetStageDefinition(FDTFluxStageKey(ContestId, StageId), + OutStageDefinition)) + { + return; + } + OutStageDefinition = FDTFluxStage(); +} + +void UDTFluxCoreSubsystem::GetSplit(const int ContestId, const int StageId, const int SplitId, + FDTFluxSplit& OutSplitDefinition) +{ + if (GetSplitDefinition(FDTFluxSplitKey(ContestId, StageId, SplitId), + OutSplitDefinition)) + { + return; + } + OutSplitDefinition = FDTFluxSplit(); +} diff --git a/Source/DTFluxCoreSubsystem/Public/DTFluxCoreSubsystem.h b/Source/DTFluxCoreSubsystem/Public/DTFluxCoreSubsystem.h index 0f17fd7..31e156c 100644 --- a/Source/DTFluxCoreSubsystem/Public/DTFluxCoreSubsystem.h +++ b/Source/DTFluxCoreSubsystem/Public/DTFluxCoreSubsystem.h @@ -74,53 +74,39 @@ public: UPROPERTY(BlueprintReadOnly, Category="DTFlux|Core Subsystem") FOnWinner OnWinner; - - UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - bool GetStageRankingForBib(const int ContestId, const int StageId, const int Bib, - FDTFluxStageRanking& OutStageRankings); - - UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - bool GetSplitRankingForBib(const int ContestId, const int StageId, const int SplitId, const int Bib, - FDTFluxSplitRanking& OutSplitRankings); - - UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - bool GetContestRanking(const int ContestId, FDTFluxContestRanking& OutContestRanking); - - UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - bool GetContestRankings(const int ContestId, FDTFluxContestRankings& OutContestRankings); - - UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - bool GetStageRankings(const int ContestId, const int StageId, FDTFluxStageRankings& OutStageRankings); - - UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - bool GetSplitRankings(const int ContestId, const int StageId, const int SplitId, - FDTFluxSplitRankings& OutSplitRankings); - - UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - bool GetStageRankingsWithKey(const FDTFluxStageKey StageKey, FDTFluxStageRankings& OutStageRankings, - const bool bShouldUseCached = true); - - UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - bool GetSplitRankingsWithKey(const FDTFluxSplitKey SplitKey, FDTFluxSplitRankings& OutSplitRankings, - const bool bShouldUseCached = true); - - UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - TArray TrackedRequestContestRankings(const TArray ForContests, bool bEnableCache = true); - - UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - TArray TrackedRequestStageRankings(const TArray ForStages, bool bEnableCache = true); - - UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - TArray TrackedRequestSplitRankings(const TArray ForSplits, bool bEnableCache = true); - - - UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - bool GetParticipant(int InBib, FDTFluxParticipant& OutParticipant); - //TODO : this must be a ProjectSetting UPROPERTY(BlueprintReadOnly, Category="DTFlux|Core Subsystem") bool bShouldKeepRankings = true; + UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") + bool GetStageRankingForBib(const int ContestId, const int StageId, const int Bib, + FDTFluxStageRanking& OutStageRankings); + UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") + bool GetSplitRankingForBib(const int ContestId, const int StageId, const int SplitId, const int Bib, + FDTFluxSplitRanking& OutSplitRankings); + UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") + bool GetContestRanking(const int ContestId, FDTFluxContestRanking& OutContestRanking); + UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") + bool GetContestRankings(const int ContestId, FDTFluxContestRankings& OutContestRankings); + UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") + bool GetStageRankings(const int ContestId, const int StageId, FDTFluxStageRankings& OutStageRankings); + UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") + bool GetSplitRankings(const int ContestId, const int StageId, const int SplitId, + FDTFluxSplitRankings& OutSplitRankings); + UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") + bool GetStageRankingsWithKey(const FDTFluxStageKey StageKey, FDTFluxStageRankings& OutStageRankings, + const bool bShouldUseCached = true); + UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") + bool GetSplitRankingsWithKey(const FDTFluxSplitKey SplitKey, FDTFluxSplitRankings& OutSplitRankings, + const bool bShouldUseCached = true); + UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") + TArray TrackedRequestContestRankings(const TArray ForContests, bool bEnableCache = true); + UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") + TArray TrackedRequestStageRankings(const TArray ForStages, bool bEnableCache = true); + UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") + TArray TrackedRequestSplitRankings(const TArray ForSplits, bool bEnableCache = true); + UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") + bool GetParticipant(int InBib, FDTFluxParticipant& OutParticipant); UFUNCTION() TArray GetCurrentContestsId(); UFUNCTION() @@ -131,90 +117,20 @@ public: bool GetContestForId(const int Id, FDTFluxContest& OutContest); UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") TArray GetContestsForTime(const FDateTime Time); - UFUNCTION() void RequestRankingsForStages(const TArray RequestedStages) const; UFUNCTION() TArray GetContests(); - UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - void GetContest(const int ContestId, FDTFluxContest& OutContest) - { - OutContest = FDTFluxContest(); - if (GetContestForId(ContestId, OutContest)) - { - return; - } - UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("ContestId %d not found in ContestDefinition"), ContestId) - } - + void GetContest(const int ContestId, FDTFluxContest& OutContest); UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - bool GetStageDefinition(const FDTFluxStageKey StageKey, FDTFluxStage& OutStageDefinition) - { - int ContestId = StageKey.ContestId; - int StageId = StageKey.StageId; - FDTFluxContest ContestDefinition; - if (GetContestForId(ContestId, ContestDefinition)) - { - for (auto& Stage : ContestDefinition.Stages) - { - if (Stage.StageId == StageId) - { - OutStageDefinition = Stage; - return true; - } - } - } - OutStageDefinition = FDTFluxStage(); - UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("ContestId %d, StageId %d not found in ContestDefinition"), - ContestId, StageId) - return false; - } - + bool GetStageDefinition(const FDTFluxStageKey StageKey, FDTFluxStage& OutStageDefinition); UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - bool GetSplitDefinition(const FDTFluxSplitKey SplitKey, FDTFluxSplit& OutSplitDefinition) - { - int ContestId = SplitKey.ContestId; - int SplitId = SplitKey.SplitId; - FDTFluxContest ContestDefinition; - if (GetContestForId(ContestId, ContestDefinition)) - { - for (auto& Split : ContestDefinition.Splits) - { - if (Split.SplitId == SplitId) - { - OutSplitDefinition = Split; - return true; - } - } - } - OutSplitDefinition = FDTFluxSplit(); - UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("ContestId %d, SplitId %d not found in ContestDefinition"), - ContestId, SplitId); - return false; - } - + bool GetSplitDefinition(const FDTFluxSplitKey SplitKey, FDTFluxSplit& OutSplitDefinition); UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - void GetStage(const int ContestId, const int StageId, FDTFluxStage& OutStageDefinition) - { - if (GetStageDefinition(FDTFluxStageKey(ContestId, StageId), - OutStageDefinition)) - { - return; - } - OutStageDefinition = FDTFluxStage(); - } - + void GetStage(const int ContestId, const int StageId, FDTFluxStage& OutStageDefinition); UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem") - void GetSplit(const int ContestId, const int StageId, const int SplitId, FDTFluxSplit& OutSplitDefinition) - { - if (GetSplitDefinition(FDTFluxSplitKey(ContestId, StageId, SplitId), - OutSplitDefinition)) - { - return; - } - OutSplitDefinition = FDTFluxSplit(); - } + void GetSplit(const int ContestId, const int StageId, const int SplitId, FDTFluxSplit& OutSplitDefinition); protected: // ~Subsystem Interface diff --git a/Source/DTFluxUtilities/DTFluxUtilities.Build.cs b/Source/DTFluxUtilities/DTFluxUtilities.Build.cs index 7564a76..90a32b7 100644 --- a/Source/DTFluxUtilities/DTFluxUtilities.Build.cs +++ b/Source/DTFluxUtilities/DTFluxUtilities.Build.cs @@ -9,7 +9,7 @@ public class DTFluxUtilities : ModuleRules PublicDependencyModuleNames.AddRange( new string[] { - "Core", + "Core" } ); diff --git a/Source/DTFluxUtilities/Public/FTDFluxUtils.h b/Source/DTFluxUtilities/Public/FTDFluxUtils.h index 7449a76..059f75b 100644 --- a/Source/DTFluxUtilities/Public/FTDFluxUtils.h +++ b/Source/DTFluxUtilities/Public/FTDFluxUtils.h @@ -5,6 +5,7 @@ #include "CoreMinimal.h" #include "DTFluxCore/Public/Types/Struct/DTFluxTeamListStruct.h" #include "Kismet/BlueprintFunctionLibrary.h" +#include "Types/Struct/DTFluxRankingStructs.h" #include "FTDFluxUtils.generated.h" /** @@ -23,4 +24,46 @@ public: static FText GetParticipantFormatedName(FDTFluxParticipant& Participant, const int MaxChar = 10, const FString Separator = ".", const FString OverFlowChar = "..."); + + UFUNCTION(BlueprintCallable, Category="DTFlux|Utils", Meta=(Keywords="convert, StageRankings, DTFlux")) + static void CastToDTFluxStageRanking(const FDTFluxDetailedRankingItem& ItemRanking, FDTFluxStageRanking& OutRanking) + { + CastRankingItem(ItemRanking, OutRanking); + } + + UFUNCTION(BlueprintCallable, Category="DTFlux|Utils", Meta=(Keywords="convert, StageRankings, DTFlux")) + static void CastToDTFluxStageRankingArray(const TArray& ItemRanking, + TArray& OutRanking) + { + CastRankingArray(ItemRanking, OutRanking); + } + + UFUNCTION(BlueprintCallable, Category="DTFlux|Utils", Meta=(Keywords="convert, StageRankings, DTFlux")) + static void CastToDTFluxSplitRanking(const FDTFluxDetailedRankingItem& ItemRanking, FDTFluxSplitRanking& OutRanking) + { + CastRankingItem(ItemRanking, OutRanking); + } + + UFUNCTION(BlueprintCallable, Category="DTFlux|Utils", Meta=(Keywords="convert, StageRankings, DTFlux")) + static void CastToDTFluxSplitRankingArray(const TArray& ItemRanking, + TArray& OutRanking) + { + CastRankingArray(ItemRanking, OutRanking); + } + + template + static void CastRankingItem(const FDTFluxDetailedRankingItem& ItemRanking, T& OutRanking) + { + OutRanking = static_cast(ItemRanking); + } + + template + static void CastRankingArray(const TArray& ItemRanking, TArray& OutRanking) + { + OutRanking.Empty(); + for (auto& Item : ItemRanking) + { + OutRanking.Add(static_cast(Item)); + } + } };