Core Structure cleaning

This commit is contained in:
2025-07-13 00:59:59 +02:00
parent f1d583926b
commit 700a7120f0
4 changed files with 435 additions and 306 deletions

View File

@ -89,68 +89,6 @@ public:
bool GetStage(const int StageID, FDTFluxStage& OutStage) const;
};
inline bool FDTFluxContest::IsFinished() const
{
return EndTime <= FDateTime::Now();
}
inline void FDTFluxContest::UpdateEndTime()
{
TArray<FDTFluxStage> TempStages = Stages;
TempStages.Sort([](const FDTFluxStage& A, const FDTFluxStage& B)
{
return A.EndTime < B.EndTime;
});
EndTime = TempStages.Last().EndTime;
}
inline int FDTFluxContest::GetLastStageId()
{
if (LastStageId <= 0)
{
UpdateLastStageId();
}
return LastStageId;
}
inline void FDTFluxContest::UpdateLastStageId()
{
TArray<FDTFluxStage> TempStages = Stages;
TempStages.Sort([](const FDTFluxStage& A, const FDTFluxStage& B)
{
return A.StageId < B.StageId;
});
LastStageId = TempStages.Last().StageId;
}
inline FDTFluxStage& FDTFluxContest::GetLastStage() const
{
TArray<FDTFluxStage> TempStages = Stages;
TempStages.Sort([](const FDTFluxStage& A, const FDTFluxStage& B)
{
return A.StageId < B.StageId;
});
return TempStages.Last();
}
inline bool FDTFluxContest::GetStage(const int StageID, FDTFluxStage& OutStage) const
{
if (Stages.Num() == 0)
{
return false;
}
for (const FDTFluxStage& Stage : Stages)
{
if (Stage.StageId == StageID)
{
OutStage = Stage;
return true;
}
}
return false;
}
USTRUCT()
struct DTFLUXCORE_API FDTFluxRaceData
{
@ -160,4 +98,4 @@ public:
UPROPERTY()
// ReSharper disable once IdentifierTypo
TArray<FDTFluxContest> Datas;
};
};

View File

@ -7,6 +7,10 @@
#include "Types/Enum/DTFluxModelEnums.h"
#include "DTFluxTeamListStruct.generated.h"
// Forward declarations
class UDTFluxModelAsset;
class UDTFluxParticipantFactory;
USTRUCT()
struct DTFLUXCORE_API FDTFluxTeamListItemDefinition
{
@ -15,76 +19,78 @@ struct DTFLUXCORE_API FDTFluxTeamListItemDefinition
public:
UPROPERTY()
FString Type = "team-list-item";
UPROPERTY()
int ContestId;
int ContestId = 0;
UPROPERTY()
int Bib;
int Bib = 0;
UPROPERTY()
FString FirstName;
UPROPERTY()
FString LastName;
UPROPERTY()
FString FirstName2 = "";
UPROPERTY()
FString LastName2 = "";
UPROPERTY()
FString Team = "";
UPROPERTY()
FString Gender;
UPROPERTY()
FString Gender2;
UPROPERTY()
bool Elite;
bool Elite = false;
UPROPERTY()
FString Category;
UPROPERTY()
int Status;
int Status = 0;
UPROPERTY()
FString Club;
};
USTRUCT(BlueprintType, Category="DTFlux|Model")
struct DTFLUXCORE_API FDTFluxPerson
{
GENERATED_BODY()
public:
UPROPERTY(BlueprintReadWrite, Category="DTFlux|model", EditAnywhere)
UPROPERTY(BlueprintReadWrite, Category="DTFlux|Model", EditAnywhere)
FString FirstName;
UPROPERTY(BlueprintReadWrite, Category="DTFlux|model", EditAnywhere)
UPROPERTY(BlueprintReadWrite, Category="DTFlux|Model", EditAnywhere)
FString LastName;
UPROPERTY(BlueprintReadWrite, Category="DTFlux|model", EditAnywhere)
UPROPERTY(BlueprintReadWrite, Category="DTFlux|Model", EditAnywhere)
FString Gender;
UPROPERTY(BlueprintReadWrite, Category="DTFlux|model", EditAnywhere)
UPROPERTY(BlueprintReadWrite, Category="DTFlux|Model", EditAnywhere)
FString FunctionLine1 = TEXT("");
UPROPERTY(BlueprintReadWrite, Category="DTFlux|model", EditAnywhere)
UPROPERTY(BlueprintReadWrite, Category="DTFlux|Model", EditAnywhere)
FString FunctionLine2 = TEXT("");
bool operator==(const FDTFluxPerson& Right) const
{
return FirstName.ToLower() + LastName.ToLower() + Gender.ToLower()
== Right.FirstName.ToLower() + Right.LastName.ToLower() + Right.Gender.ToLower();
}
bool operator==(const FDTFluxPerson& Right) const;
bool operator!=(const FDTFluxPerson& Right) const;
bool operator==(const int Length) const;
bool operator!=(const int Length) const;
bool operator==(const int Length) const
{
return (FirstName.ToLower() + LastName.ToLower() + Gender.ToLower()).Len() == Length;
}
FString GetNormalizedString() const;
bool operator!=(const int Length) const
{
return !(*this == Length);
}
bool operator!=(const FDTFluxPerson& Right) const
{
return FirstName.ToLower() + LastName.ToLower() + Gender.ToLower()
!= Right.FirstName.ToLower() + Right.LastName.ToLower() + Right.Gender.ToLower();
}
bool IsValid() const;
};
USTRUCT(BlueprintType, Category="DTFlux|Model")
struct DTFLUXCORE_API FDTFluxParticipant
{
@ -94,129 +100,98 @@ struct DTFLUXCORE_API FDTFluxParticipant
friend class UDTFluxParticipantFactory;
public:
// Constructeur public par défaut requis par Unreal
FDTFluxParticipant()
: Bib(-1)
, ContestId(-1)
, Elite(false)
, Status(static_cast<EDTFluxParticipantStatusType>(0))
, bIsMassStartParticipant(false)
, CurrentSplit(-1)
{
Teammate.Reset();
}
FDTFluxParticipant();
/**
* Vérifie si le participant est dans son état par défaut (non initialisé)
* @return True si tous les champs sont à leur valeur par défaut
*/
bool IsDefault() const
{
return Bib == -1
&& ContestId == -1
&& Category.IsEmpty()
&& Club.IsEmpty()
&& !Elite
&& Status == static_cast<EDTFluxParticipantStatusType>(0)
&& Team.IsEmpty()
&& !bIsMassStartParticipant
&& CurrentSplit == -1
&& Teammate.IsEmpty();
}
UPROPERTY(BlueprintReadOnly, Category="DTFlux|model", EditAnywhere)
UPROPERTY(BlueprintReadOnly, Category="DTFlux|Model", EditAnywhere)
int Bib = -1;
UPROPERTY(BlueprintReadOnly, Category="DTFlux|model", EditAnywhere)
UPROPERTY(BlueprintReadOnly, Category="DTFlux|Model", EditAnywhere)
int ContestId = -1;
UPROPERTY(BlueprintReadOnly, Category="DTFlux|model", EditAnywhere)
UPROPERTY(BlueprintReadOnly, Category="DTFlux|Model", EditAnywhere)
FString Category;
UPROPERTY(BlueprintReadWrite, Category="DTFlux|model", EditAnywhere)
UPROPERTY(BlueprintReadWrite, Category="DTFlux|Model", EditAnywhere)
FString Club;
UPROPERTY(BlueprintReadWrite, Category="DTFlux|model", EditAnywhere)
bool Elite;
UPROPERTY(BlueprintReadWrite, Category="DTFlux|model", EditAnywhere)
UPROPERTY(BlueprintReadWrite, Category="DTFlux|Model", EditAnywhere)
bool Elite = false;
UPROPERTY(BlueprintReadWrite, Category="DTFlux|Model", EditAnywhere)
EDTFluxParticipantStatusType Status;
UPROPERTY(BlueprintReadWrite, Category="DTFlux|model", EditAnywhere)
UPROPERTY(BlueprintReadWrite, Category="DTFlux|Model", EditAnywhere)
FString Team;
UPROPERTY(BlueprintReadWrite, Category="DTFlux|model", EditAnywhere)
UPROPERTY(BlueprintReadWrite, Category="DTFlux|Model", EditAnywhere)
bool bIsMassStartParticipant = false;
UPROPERTY(BlueprintReadWrite, Category="DTFlux|model")
UPROPERTY(BlueprintReadWrite, Category="DTFlux|Model")
int CurrentSplit = -1;
// void Dump() const;
bool IsDefault() const;
void AddTeammate(const FDTFluxPerson& Person);
void AddTeammate(const FString LastName, const FString FirstName, const FString Gender);
void AddTeammate(const FString& LastName, const FString& FirstName, const FString& Gender);
FText GetFormattedNameText(const int MaxChar = 15, const FString Separator = FString(". "),
const FString OverflowChar = FString("...")) const
{
return FText::FromString(GetFormattedName(MaxChar, OverflowChar));
};
int GetTeammateNum() const;
FText GetConcatFormattedNameText(const int MaxChar = 20, const FString Separator = FString(". "),
const FString OverflowChar = FString("..."),
const FString BibSeparator = FString(". ")) const
{
return FText::FromString(GetConcatFormattedName(MaxChar, Separator, OverflowChar, BibSeparator));
};
FString GetFormattedName(const int MaxChar = 15, const FString Separator = FString(". "),
const FString OverflowChar = FString("...")) const;
FString GetConcatFormattedName(const int MaxChar = 20, const FString Separator = FString(". "),
const FString OverflowChar = FString("..."),
const FString BibSeparator = FString(". ")) const;
bool IsTeam() const;
static FString GetFormattedName(const FDTFluxParticipant& Participant, const int MaxChar = 15,
const FString Separator = FString(". "),
const FString OverflowChar = FString("..."))
{
return Participant.GetFormattedName(MaxChar, Separator, OverflowChar);
};
static FString GetConcatFormattedName(const FDTFluxParticipant& Participant, const int MaxChar = 15,
const FString Separator = FString(". "),
const FString OverflowChar = FString("..."),
const FString BibSeparator = FString(". "))
{
return Participant.GetConcatFormattedName(MaxChar, Separator, OverflowChar, BibSeparator);
};
const TArray<FDTFluxPerson>& GetTeammate() const;
static FText GetFormattedNameText(const FDTFluxParticipant& Participant, const int MaxChar = 15,
const FString Separator = FString(". "),
const FString OverflowChar = FString("..."))
{
return Participant.GetFormattedNameText(MaxChar, Separator, OverflowChar);
};
FString GetFormattedName(const int MaxChar = 15,
const FString& Separator = FString(". "),
const FString& OverflowChar = FString("...")) const;
static FText GetConcatFormattedNameText(const FDTFluxParticipant& Participant, const int MaxChar = 15,
const FString Separator = FString(". "),
const FString OverflowChar = FString("..."),
const FString BibSeparator = FString(". "))
{
return Participant.GetConcatFormattedNameText(MaxChar, Separator, OverflowChar, BibSeparator);
};
const TArray<FDTFluxPerson> GetTeammate() const { return Teammate; }
FString GetConcatFormattedName(const int MaxChar = 20,
const FString& Separator = FString(". "),
const FString& OverflowChar = FString("..."),
const FString& BibSeparator = FString(". ")) const;
private:
// --- Constructeur privé ---
explicit FDTFluxParticipant(const TSharedPtr<FJsonObject>& JsonObject);
FText GetFormattedNameText(const int MaxChar = 15,
const FString& Separator = FString(". "),
const FString& OverflowChar = FString("...")) const;
FText GetConcatFormattedNameText(const int MaxChar = 20,
const FString& Separator = FString(". "),
const FString& OverflowChar = FString("..."),
const FString& BibSeparator = FString(". ")) const;
static FString GetFormattedName(const FDTFluxParticipant& Participant,
const int MaxChar = 15,
const FString& Separator = FString(". "),
const FString& OverflowChar = FString("..."));
static FString GetConcatFormattedName(const FDTFluxParticipant& Participant,
const int MaxChar = 15,
const FString& Separator = FString(". "),
const FString& OverflowChar = FString("..."),
const FString& BibSeparator = FString(". "));
static FText GetFormattedNameText(const FDTFluxParticipant& Participant,
const int MaxChar = 15,
const FString& Separator = FString(". "),
const FString& OverflowChar = FString("..."));
static FText GetConcatFormattedNameText(const FDTFluxParticipant& Participant,
const int MaxChar = 15,
const FString& Separator = FString(". "),
const FString& OverflowChar = FString("..."),
const FString& BibSeparator = FString(". "));
static FDTFluxParticipant CreateFromJson(const TSharedPtr<FJsonObject>& JsonObject);
protected:
UPROPERTY(Category="DTFlux|model", VisibleAnywhere)
UPROPERTY(Category="DTFlux|Model", VisibleAnywhere)
TArray<FDTFluxPerson> Teammate;
// Méthode publique pour construire à partir d'un JSON (utilisée par la factory)
static FDTFluxParticipant CreateFromJson(const TSharedPtr<FJsonObject>& JsonObject);
int GetTeammateNum() const;
bool IsTeam() const;
private:
explicit FDTFluxParticipant(const TSharedPtr<FJsonObject>& JsonObject);
};
/**
* @struct FDTFluxTeamListDefinition
* Struct representing the Participant List definition
* Used to exchange data between Objects in the system
*/
USTRUCT(BlueprintType)
struct DTFLUXCORE_API FDTFluxTeamListDefinition
{
@ -224,27 +199,22 @@ struct DTFLUXCORE_API FDTFluxTeamListDefinition
public:
UPROPERTY()
// ReSharper disable once IdentifierTypo
TArray<FDTFluxParticipant> Participants;
};
USTRUCT(BlueprintType)
struct FDTFluxTeamStatusUpdate
struct DTFLUXCORE_API FDTFluxTeamStatusUpdate
{
GENERATED_BODY()
public:
FDTFluxTeamStatusUpdate() = default;
FDTFluxTeamStatusUpdate(const int InBib, const int InStatus)
: Bib(InBib)
, Status(static_cast<EDTFluxParticipantStatusType>(InStatus))
{
};
FDTFluxTeamStatusUpdate(const int InBib, const int InStatus);
UPROPERTY(BlueprintReadWrite, Category="DTFlux|Participant")
int Bib = -1;
UPROPERTY(BlueprintReadWrite, Category="DTFlux|Participant")
EDTFluxParticipantStatusType Status = EDTFluxParticipantStatusType::Unknown;
};
};