implement Pursuit Sequence Logic

This commit is contained in:
2025-07-11 13:09:18 +02:00
parent bc6a928312
commit 73413e44b4
4 changed files with 146 additions and 68 deletions

View File

@ -18,7 +18,7 @@ class UDTFluxPursuitManager;
/**
*
*/
UCLASS()
UCLASS(BlueprintType, meta=(DisplayName="DTFlux Core Subsystem"))
class DTFLUXCORESUBSYSTEM_API UDTFluxCoreSubsystem : public UEngineSubsystem
{
GENERATED_BODY()
@ -28,34 +28,24 @@ public:
UPROPERTY(BlueprintAssignable, Category="DTFlux|Core Subsystem")
FOnSplitRankings OnSplitRankings;
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnStageRankings, FDTFluxStageRankings&, StageRankings);
UPROPERTY(BlueprintAssignable, Category="DTFlux|Core Subsystem")
FOnStageRankings OnStageRankings;
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnContestRankings, FDTFluxContestRankings&, ContestRankings);
UPROPERTY(BlueprintAssignable, Category="DTFlux|Core Subsystem")
FOnContestRankings OnContestRankings;
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnTeamList);
UPROPERTY(BlueprintAssignable, Category="DTFlux|Core Subsystem")
FOnTeamList OnTeamList;
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnTeamStatusUpdate, FDTFluxParticipant, TeamUpdated);
UPROPERTY(BlueprintAssignable, Category="DTFlux|Core Subsystem")
FOnTeamStatusUpdate OnTeamStatusUpdate;
DECLARE_DELEGATE_TwoParams(FOnRequestedStageRankings, const FDTFluxStageKey&, const FDTFluxContestRankings&);
FOnRequestedStageRankings OnRequestedStageRankings;
//
// DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnTeamUpdate, FDateTime, ReceivedAt, FDTFluxParticipant, TeamUpdatedList);
// UPROPERTY(BlueprintAssignable, Category="DTFlux|Core Subsystem")
// FOnTeamUpdate OnTeamUpdate;
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
void SendTeamListRequest();
@ -106,24 +96,21 @@ public:
UFUNCTION()
TArray<FDTFluxContest> GetContests();
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
void LaunchPursuitSequenceFor(const TArray<int> ContestIds);
UPROPERTY(BlueprintReadOnly, Category="DTFlux|Core Subsystem")
UDTFluxPursuitManager* PursuitManager = nullptr;
protected:
// ~Subsystem Interface
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
virtual void Deinitialize() override;
// ~Subsystem Interface
UPROPERTY()
UDTFluxPursuitManager* PursuitManager = nullptr;
UFUNCTION()
void SaveDataStorage();
private:
UDTFluxNetworkSubsystem* NetworkSubsystem = nullptr;
UPROPERTY()
UDTFluxModelAsset* DataStorage = nullptr;
UFUNCTION()
void ProcessRaceData(const FDTFluxRaceData& RaceDataDefinition);
@ -145,8 +132,4 @@ private:
void SendRequest(const FString& Message);
UFUNCTION()
void RegisterDelegates();
UPROPERTY()
UDTFluxModelAsset* DataStorage = nullptr;
};

View File

@ -8,6 +8,8 @@
#include "DTFluxPursuitManager.generated.h"
class UDTFluxCoreSubsystem;
USTRUCT()
struct FRequestData
{
@ -27,7 +29,7 @@ struct FRequestData
FRequestData() = default;
FRequestData(const TArray<FGuid>& InRequestIds, const TMap<FGuid, FDTFluxStageRankings>& InStageRankings)
: RequestIds(InRequestIds), StageRankings(InStageRankings)
: RequestIds(InRequestIds), StageRankings(InStageRankings), ContestId(-1)
{
};
@ -63,9 +65,10 @@ struct FDTFluxPursuitGroup
bool bIsFocus = false;
};
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOnPursuitSequenceReady, const TArray<FDTFluxPursuitInfo>,
NextFocusPursuits,
const TArray<FDTFluxPursuitInfo>, NextPursuit, bool, bIsTrtuncate);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_FourParams(FOnPursuitSequenceReady, const FDateTime, MassStartTime,
const TArray<FDTFluxPursuitInfo>,
NextFocusPursuits,
const TArray<FDTFluxPursuitInfo>, NextPursuit, bool, bIsTrtuncate);
/**
*
@ -86,28 +89,32 @@ public:
UPROPERTY(BlueprintReadOnly, VisibleAnywhere)
bool bFocusIsTruncate = false;
//
// UPROPERTY()
// TArray<FDTFluxStage> TargetStages;
UPROPERTY()
int MaxSimultaneousPursuit = 7;
int PursuitMaxSimultaneousPursuit = 7;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="DTFlux|Pursuit",
meta=(ClampMin="1", ClampMax="60", UIMin="0", UIMax="60"))
int MassStartDelay = 10;
UPROPERTY()
TArray<FDTFluxPursuitGroup> PursuitGrouped;
FDateTime MassStartTime = FDateTime::MinValue();
UPROPERTY()
TArray<FDTFluxPursuitGroup> GroupedPursuit;
UPROPERTY()
int CurrentIndex = -1;
UPROPERTY(BlueprintCallable, Category="DTFlux|Pursuit")
UPROPERTY(BlueprintAssignable, Category="DTFlux|Pursuit")
FOnPursuitSequenceReady OnPursuitSequenceReady;
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"))
void LaunchPursuitSequenceFor(const TArray<FDTFluxContest> InContests);
void GetPursuit(TArray<FDTFluxPursuitInfo>& OutPursuitFocusNext, TArray<FDTFluxPursuitInfo>& OutPursuitNext,
bool& BIsFocusTruncate, const int MaxSimultaneousPursuit = 7);
UFUNCTION()
void OnRequestResponse(const FGuid& RequestId, FDTFluxServerResponse& Response);
@ -123,11 +130,15 @@ public:
private:
TArray<FRequestData> PendingRequestData;
public:
UFUNCTION()
bool InitPursuit(FRequestData Data);
private:
UDTFluxCoreSubsystem* CoreSubsystem = nullptr;
UDTFluxNetworkSubsystem* NetworkSubsystem = nullptr;
UPROPERTY()
bool bIsSequenceDone = true;
UFUNCTION()
void SetPursuitInfoIsMassStart(FDTFluxPursuitGroup NextFocusGroup);
UFUNCTION()
void InitPursuitForContests(const TArray<FDTFluxContest> InContests);
UFUNCTION()
bool InitPursuitForRequest(FRequestData Data);
};