From ff0b6f3261e7054a963fb01c440ce10b18a35de7 Mon Sep 17 00:00:00 2001 From: Ange-Marie MAURIN Date: Thu, 18 Jul 2024 01:02:12 +0200 Subject: [PATCH] Added Poursuit Handle --- .../DTFluxDataStorage/DTFluxDataStorage.cpp | 65 +++++++++++++++++++ .../DTFluxDataStorage/DTFluxDataStorage.h | 7 ++ .../Public/DTFluxModel/DTFluxModel.h | 11 ++++ 3 files changed, 83 insertions(+) diff --git a/Source/DTFluxAPI/Private/DTFluxDataStorage/DTFluxDataStorage.cpp b/Source/DTFluxAPI/Private/DTFluxDataStorage/DTFluxDataStorage.cpp index 5aebc8f..4a5d326 100644 --- a/Source/DTFluxAPI/Private/DTFluxDataStorage/DTFluxDataStorage.cpp +++ b/Source/DTFluxAPI/Private/DTFluxDataStorage/DTFluxDataStorage.cpp @@ -537,6 +537,71 @@ const FString UDTFluxDataStorage::GetConcurrentFormatedName(int Bib, bool Trunca }; } +// ReSharper disable once IdentifierTypo +TArray UDTFluxDataStorage::GetPoursuitWithStageTime(const TArray ContestIds, const int StageId, float DelaTimeSeconds) +{ + TArray RemoveIdx; + int Idx = 0; + TArray StagesRankingsTemp; + TArray ReturnStageRankings; + FDateTime PresumedStartStage; + for(const int ContestId : ContestIds) + { + FDTFluxStage StageTemp; + if(GetStage(ContestId, StageId, StageTemp)) + { + PresumedStartStage = StageTemp.StartTime; + StagesRankingsTemp .Append(StageTemp.StageRanking); + // ContestsRankings + } + } + StagesRankingsTemp.Sort([](const FDTFluxStageRanking& A, const FDTFluxStageRanking& B) + { + return A.TimeStart > B.TimeStart; + }); + FDateTime MassStartDate = PresumedStartStage + FTimespan::FromSeconds(DelaTimeSeconds) ; + for( auto & StageRanking : StagesRankingsTemp) + { + if ( StageRanking.TimeStart < MassStartDate ) + { + ReturnStageRankings.Add(StageRanking); + } + } + return ReturnStageRankings; + +} +// ReSharper disable once IdentifierTypo +TArray UDTFluxDataStorage::GetPoursuitWithTimeStart(const TArray ContestIds, const int StageId, float DelaTimeSeconds) +{ + TArray RemoveIdx; + int Idx = 0; + TArray StagesRankingsTemp; + TArray ReturnStageRankings; + for(const int ContestId : ContestIds) + { + FDTFluxStage StageTemp; + if(GetStage(ContestId, StageId, StageTemp)) + { + StagesRankingsTemp .Append(StageTemp.StageRanking); + // ContestsRankings + } + } + StagesRankingsTemp.Sort([](const FDTFluxStageRanking& A, const FDTFluxStageRanking& B) + { + return A.TimeStart > B.TimeStart; + }); + FDateTime MassStartDate = StagesRankingsTemp[0].TimeStart + FTimespan::FromSeconds(DelaTimeSeconds) ; + for( auto & StageRanking : StagesRankingsTemp) + { + if ( StageRanking.TimeStart < MassStartDate ) + { + ReturnStageRankings.Add(StageRanking); + } + } + return ReturnStageRankings; + +} + bool UDTFluxDataStorage::GetFirstStageOfContest(const int ContestId, FDTFluxStage& Stage) { if(Contests.IsEmpty()) diff --git a/Source/DTFluxAPI/Public/DTFluxDataStorage/DTFluxDataStorage.h b/Source/DTFluxAPI/Public/DTFluxDataStorage/DTFluxDataStorage.h index 356542c..ace41ba 100644 --- a/Source/DTFluxAPI/Public/DTFluxDataStorage/DTFluxDataStorage.h +++ b/Source/DTFluxAPI/Public/DTFluxDataStorage/DTFluxDataStorage.h @@ -112,6 +112,13 @@ public: void ChangeCurrentContest(); UFUNCTION(BlueprintCallable, Category="DTFlux|DataStorage") const FString GetConcurrentFormatedName( int Bib, bool Truncate = true, int MaxSize = 20); + UFUNCTION(BlueprintCallable, Category="DTFlux|DataStorage") + // ReSharper disable once IdentifierTypo + TArray GetPoursuitWithStageTime(const TArray ContestIds, const int StageId, float DelaTimeSeconds = 300.0f); + UFUNCTION(BlueprintCallable, Category="DTFlux|DataStorage") + // ReSharper disable once IdentifierTypo + TArray GetPoursuitWithTimeStart(const TArray ContestIds, const int StageId, float DelaTimeSeconds); + UFUNCTION() bool GetFirstStageOfContest(const int ContestId, FDTFluxStage& Stage); void DumpContest(); diff --git a/Source/DTFluxAPI/Public/DTFluxModel/DTFluxModel.h b/Source/DTFluxAPI/Public/DTFluxModel/DTFluxModel.h index a88f871..8ba5de6 100644 --- a/Source/DTFluxAPI/Public/DTFluxModel/DTFluxModel.h +++ b/Source/DTFluxAPI/Public/DTFluxModel/DTFluxModel.h @@ -567,3 +567,14 @@ struct DTFLUXAPI_API FDTFluxContestFinished UPROPERTY(BlueprintReadOnly, Category="DTFlux|Subsystem|Events") TArray Rankings; }; + +USTRUCT(BlueprintType, Category="DTFlux|Subsystem") +struct FDTFluxPoursuit +{ + GENERATED_BODY() + + UPROPERTY(BlueprintReadOnly, Category="DTFlux|Subsystem") + int Bib; + UPROPERTY(BlueprintReadOnly, Category="DTFlux|Subsystem") + FDateTime TimeStart; +}; \ No newline at end of file