2025-07-09 03:27:23 +02:00
|
|
|
|
#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;
|
|
|
|
|
|
|
2025-07-12 09:41:15 +02:00
|
|
|
|
|
|
|
|
|
|
USTRUCT(BlueprintType)
|
|
|
|
|
|
struct FPursuitStarterData
|
2025-07-09 03:27:23 +02:00
|
|
|
|
{
|
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
|
2025-07-12 09:41:15 +02:00
|
|
|
|
public:
|
|
|
|
|
|
FPursuitStarterData() = default;
|
2025-07-09 03:27:23 +02:00
|
|
|
|
|
2025-07-12 09:41:15 +02:00
|
|
|
|
FPursuitStarterData(const TArray<FDTFluxPursuitInfo>& InPursuitFocusNext,
|
|
|
|
|
|
const TArray<FDTFluxPursuitInfo>& InPursuitNext, const FDateTime& InMassStartTime,
|
|
|
|
|
|
const bool InIsFocusTruncate)
|
|
|
|
|
|
: PursuitFocusNext(InPursuitFocusNext), PursuitNext(InPursuitNext), MassStartTime(InMassStartTime),
|
|
|
|
|
|
bIsFocusTruncate(InIsFocusTruncate)
|
2025-07-09 03:27:23 +02:00
|
|
|
|
{
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2025-07-12 09:41:15 +02:00
|
|
|
|
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;
|
2025-07-09 03:27:23 +02:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
USTRUCT()
|
|
|
|
|
|
struct FDTFluxPursuitGroup
|
|
|
|
|
|
{
|
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
|
2025-07-12 09:41:15 +02:00
|
|
|
|
|
2025-07-09 03:27:23 +02:00
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-12 09:41:15 +02:00
|
|
|
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnPursuitSequenceReady, const FPursuitStarterData, PursuitData);
|
|
|
|
|
|
|
|
|
|
|
|
UPROPERTY(BlueprintAssignable, Category="DTFlux|Core Subsystem")
|
|
|
|
|
|
FOnPursuitSequenceReady OnPursuitSequenceReady;
|
|
|
|
|
|
|
2025-07-09 03:27:23 +02:00
|
|
|
|
UPROPERTY(BlueprintReadOnly, VisibleAnywhere)
|
|
|
|
|
|
bool bFocusIsTruncate = false;
|
|
|
|
|
|
|
|
|
|
|
|
UPROPERTY()
|
2025-07-11 13:09:18 +02:00
|
|
|
|
int PursuitMaxSimultaneousPursuit = 7;
|
|
|
|
|
|
|
2025-07-12 09:41:15 +02:00
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="DTFlux|Pursuit")
|
2025-07-09 03:27:23 +02:00
|
|
|
|
int MassStartDelay = 10;
|
|
|
|
|
|
|
|
|
|
|
|
UPROPERTY()
|
2025-07-11 13:09:18 +02:00
|
|
|
|
FDateTime MassStartTime = FDateTime::MinValue();
|
|
|
|
|
|
|
|
|
|
|
|
UPROPERTY()
|
|
|
|
|
|
TArray<FDTFluxPursuitGroup> GroupedPursuit;
|
2025-07-09 03:27:23 +02:00
|
|
|
|
|
|
|
|
|
|
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);
|
2025-07-09 03:27:23 +02:00
|
|
|
|
|
|
|
|
|
|
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);
|
2025-07-09 03:27:23 +02:00
|
|
|
|
|
|
|
|
|
|
UFUNCTION()
|
2025-07-11 19:04:37 +02:00
|
|
|
|
bool InitSubSystems();
|
2025-07-09 03:27:23 +02:00
|
|
|
|
|
|
|
|
|
|
UFUNCTION()
|
2025-07-11 19:04:37 +02:00
|
|
|
|
bool BindRankings();
|
2025-07-09 03:27:23 +02:00
|
|
|
|
|
|
|
|
|
|
UFUNCTION()
|
2025-07-11 19:04:37 +02:00
|
|
|
|
void UnbindRankings();
|
2025-07-09 03:27:23 +02:00
|
|
|
|
|
|
|
|
|
|
UFUNCTION()
|
2025-07-11 19:04:37 +02:00
|
|
|
|
void OnRankingsReceived(const FDTFluxStageKey NewStageKey, const FDTFluxStageRankings NewStageRankings);
|
2025-07-09 03:27:23 +02:00
|
|
|
|
|
2025-07-12 16:07:37 +02:00
|
|
|
|
|
|
|
|
|
|
void DebugFocusNext(const TArray<FDTFluxPursuitInfo>& OutPursuitFocusNext);
|
|
|
|
|
|
void DebugOutPoursuitNext(const TArray<FDTFluxPursuitInfo>& OutPursuitNext);
|
|
|
|
|
|
|
2025-07-09 03:27:23 +02:00
|
|
|
|
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-09 03:27:23 +02:00
|
|
|
|
|
2025-07-11 13:09:18 +02:00
|
|
|
|
UPROPERTY()
|
|
|
|
|
|
bool bIsSequenceDone = true;
|
2025-07-11 19:04:37 +02:00
|
|
|
|
UPROPERTY()
|
|
|
|
|
|
bool bIsRankingBounded = false;
|
2025-07-09 03:27:23 +02:00
|
|
|
|
UFUNCTION()
|
2025-07-11 13:09:18 +02:00
|
|
|
|
void SetPursuitInfoIsMassStart(FDTFluxPursuitGroup NextFocusGroup);
|
|
|
|
|
|
UFUNCTION()
|
2025-07-11 19:04:37 +02:00
|
|
|
|
bool LaunchPursuitSequence();
|
2025-07-09 03:27:23 +02:00
|
|
|
|
};
|