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

130 lines
3.6 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(BlueprintType)
struct FPursuitStarterData
{
GENERATED_BODY()
public:
FPursuitStarterData() = default;
FPursuitStarterData(const TArray<FDTFluxPursuitInfo>& InPursuitFocusNext,
const TArray<FDTFluxPursuitInfo>& InPursuitNext, const FDateTime& InMassStartTime,
const bool InIsFocusTruncate)
: PursuitFocusNext(InPursuitFocusNext), PursuitNext(InPursuitNext), MassStartTime(InMassStartTime),
bIsFocusTruncate(InIsFocusTruncate)
{
};
UPROPERTY(BlueprintReadOnly, Category="DTFlux|Pursuit")
TArray<FDTFluxPursuitInfo> PursuitFocusNext = TArray<FDTFluxPursuitInfo>();
UPROPERTY(BlueprintReadOnly, Category="DTFlux|Pursuit")
TArray<FDTFluxPursuitInfo> PursuitNext = TArray<FDTFluxPursuitInfo>();
UPROPERTY(BlueprintReadOnly, Category="DTFlux|Pursuit")
FDateTime MassStartTime = FDateTime::MinValue();
UPROPERTY(BlueprintReadOnly, Category="DTFlux|Pursuit")
bool bIsFocusTruncate = false;
};
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);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnPursuitSequenceReady, const FPursuitStarterData, PursuitData);
UPROPERTY(BlueprintAssignable, Category="DTFlux|Core Subsystem")
FOnPursuitSequenceReady OnPursuitSequenceReady;
UPROPERTY(BlueprintReadOnly, VisibleAnywhere)
bool bFocusIsTruncate = false;
UPROPERTY()
2025-07-11 13:09:18 +02:00
int PursuitMaxSimultaneousPursuit = 7;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="DTFlux|Pursuit")
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);
void DebugFocusNext(const TArray<FDTFluxPursuitInfo>& OutPursuitFocusNext);
void DebugOutPoursuitNext(const TArray<FDTFluxPursuitInfo>& OutPursuitNext);
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-13 18:07:14 +02:00
void SetPursuitInfoIsMassStart(FDTFluxPursuitGroup& NextFocusGroup);
2025-07-11 13:09:18 +02:00
UFUNCTION()
2025-07-11 19:04:37 +02:00
bool LaunchPursuitSequence();
};