Files
DTFluxAPI/Source/DTFluxCoreSubsystem/Public/DTFluxPursuitManager.h

135 lines
3.1 KiB
C
Raw Normal View History

#pragma once
#include "CoreMinimal.h"
#include "Subsystems/DTFluxNetworkSubsystem.h"
#include "Types/Struct/DTFluxRaceDataStructs.h"
#include "Types/Struct/FDTFluxPursuitInfo.h"
#include "UObject/Object.h"
#include "DTFluxPursuitManager.generated.h"
2025-07-11 13:09:18 +02:00
class UDTFluxCoreSubsystem;
USTRUCT()
struct FRequestData
{
GENERATED_BODY()
UPROPERTY()
TArray<FGuid> RequestIds;
UPROPERTY()
TMap<FGuid, FDTFluxStageRankings> StageRankings;
UPROPERTY()
int ContestId;
UPROPERTY()
bool bIsReady = false;
FRequestData() = default;
FRequestData(const TArray<FGuid>& InRequestIds, const TMap<FGuid, FDTFluxStageRankings>& InStageRankings)
2025-07-11 13:09:18 +02:00
: RequestIds(InRequestIds), StageRankings(InStageRankings), ContestId(-1)
{
};
/**
*
* @param RequestId
* @param InRankings
* @return True if all needed requests have responses
*/
bool IsWaitingFor(const FGuid& RequestId, const FDTFluxStageRankings& InRankings)
{
if (!StageRankings.Contains(RequestId))
{
StageRankings.Add(RequestId, InRankings);
}
bIsReady = StageRankings.Num() <= RequestIds.Num();
return bIsReady;
}
};
USTRUCT()
struct FDTFluxPursuitGroup
{
GENERATED_BODY()
UPROPERTY()
TArray<FDTFluxPursuitInfo> PursuitGroup = TArray<FDTFluxPursuitInfo>();
UPROPERTY()
FDateTime StartTimeGlobal = FDateTime::MinValue();
UPROPERTY()
bool bHasStarted = false;
UPROPERTY()
bool bIsFocus = false;
};
/**
*
*/
UCLASS(BlueprintType)
class DTFLUXCORESUBSYSTEM_API UDTFluxPursuitManager : public UObject
{
GENERATED_BODY()
public:
UDTFluxPursuitManager(const FObjectInitializer& ObjectInitializer);
UPROPERTY(BlueprintReadOnly, VisibleAnywhere)
bool bFocusIsTruncate = false;
UPROPERTY()
2025-07-11 13:09:18 +02:00
int PursuitMaxSimultaneousPursuit = 7;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="DTFlux|Pursuit",
meta=(ClampMin="1", ClampMax="60", UIMin="0", UIMax="60"))
int MassStartDelay = 10;
UPROPERTY()
2025-07-11 13:09:18 +02:00
FDateTime MassStartTime = FDateTime::MinValue();
UPROPERTY()
TArray<FDTFluxPursuitGroup> GroupedPursuit;
UPROPERTY()
int CurrentIndex = -1;
2025-07-11 13:09:18 +02:00
UFUNCTION(BlueprintCallable, Category="DTFlux|Pursuit", meta=(Keywords="pursuit, launch, poursuite"))
void InitPursuit(const TArray<int> InContestIds, const int MaxSimultaneousPursuit = 7);
UFUNCTION(BlueprintCallable, Category="DTFlux|Pursuit", meta=(Keywords="pursuit, launch, poursuite"))
2025-07-11 13:09:18 +02:00
void GetPursuit(TArray<FDTFluxPursuitInfo>& OutPursuitFocusNext, TArray<FDTFluxPursuitInfo>& OutPursuitNext,
bool& BIsFocusTruncate, const int MaxSimultaneousPursuit = 7);
UFUNCTION()
2025-07-11 19:04:37 +02:00
bool InitSubSystems();
UFUNCTION()
2025-07-11 19:04:37 +02:00
bool BindRankings();
UFUNCTION()
2025-07-11 19:04:37 +02:00
void UnbindRankings();
UFUNCTION()
2025-07-11 19:04:37 +02:00
void OnRankingsReceived(const FDTFluxStageKey NewStageKey, const FDTFluxStageRankings NewStageRankings);
private:
2025-07-11 19:04:37 +02:00
TMap<FDTFluxStageKey, bool> PendingStageRanking;
TArray<FDTFluxStageRankings> AllRankings;
2025-07-11 13:09:18 +02:00
UDTFluxCoreSubsystem* CoreSubsystem = nullptr;
UDTFluxNetworkSubsystem* NetworkSubsystem = nullptr;
2025-07-11 13:09:18 +02:00
UPROPERTY()
bool bIsSequenceDone = true;
2025-07-11 19:04:37 +02:00
UPROPERTY()
bool bIsRankingBounded = false;
UFUNCTION()
2025-07-11 13:09:18 +02:00
void SetPursuitInfoIsMassStart(FDTFluxPursuitGroup NextFocusGroup);
UFUNCTION()
2025-07-11 19:04:37 +02:00
bool LaunchPursuitSequence();
};