ModelAsset Fixed And Server Response Implementation + Notes.md for sharing problematics
This commit is contained in:
@ -81,6 +81,35 @@ void UDTFluxModelAsset::AddContestRanking(const FDTFluxContestRankings& NewConte
|
|||||||
ContestRankings.Add(NewContestRankings.ContestId, NewContestRankings);
|
ContestRankings.Add(NewContestRankings.ContestId, NewContestRankings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UDTFluxModelAsset::UpdateParticipant(const FDTFluxParticipant& Participant)
|
||||||
|
{
|
||||||
|
// TODO : If update is on Bib we are totally lost as we search by bib.
|
||||||
|
int Bib = Participant.Bib;
|
||||||
|
if(Participants.Contains(Bib))
|
||||||
|
{
|
||||||
|
TArray<FDTFluxPerson> InTeammate = Participant.Teammate;
|
||||||
|
Participants[Bib].Elite = Participant.Elite;
|
||||||
|
Participants[Bib].ContestId = Participant.ContestId;
|
||||||
|
Participants[Bib].Club = Participant.Club;
|
||||||
|
Participants[Bib].Category = Participant.Category;
|
||||||
|
Participants[Bib].Team = Participant.Team;
|
||||||
|
Participants[Bib].Status = Participant.Status;
|
||||||
|
//TODO : Update Person
|
||||||
|
for(const auto& Person : InTeammate)
|
||||||
|
{
|
||||||
|
//Don't know what to do...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UDTFluxModelAsset::UpdateParticipantStatus(const FDTFluxTeamStatusUpdate& NewParticipantStatus)
|
||||||
|
{
|
||||||
|
if(Participants.Contains(NewParticipantStatus.Bib))
|
||||||
|
{
|
||||||
|
Participants[NewParticipantStatus.Bib].Status = NewParticipantStatus.Status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void UDTFluxModelAsset::UpdateOrCreateStageRanking(const FDTFluxStageRankings& InStageRankings)
|
void UDTFluxModelAsset::UpdateOrCreateStageRanking(const FDTFluxStageRankings& InStageRankings)
|
||||||
{
|
{
|
||||||
FDTFluxStageKey StageKey = InStageRankings.GetCompositeKey();
|
FDTFluxStageKey StageKey = InStageRankings.GetCompositeKey();
|
||||||
|
|||||||
@ -103,7 +103,7 @@ FDTFluxParticipant::FDTFluxParticipant(const TSharedPtr<FJsonObject>& JsonObject
|
|||||||
, Status(static_cast<EDTFluxParticipantStatusType>(JsonObject->GetIntegerField(TEXT("status"))))
|
, Status(static_cast<EDTFluxParticipantStatusType>(JsonObject->GetIntegerField(TEXT("status"))))
|
||||||
, Team(JsonObject->GetStringField(TEXT("team")))
|
, Team(JsonObject->GetStringField(TEXT("team")))
|
||||||
, bIsMassStartParticipant(false)
|
, bIsMassStartParticipant(false)
|
||||||
, LastSplitId(-1)
|
, CurrentSplit(-1)
|
||||||
{
|
{
|
||||||
UE_LOG(logDTFluxCore, Error, TEXT("Ctor with JSON Object"))
|
UE_LOG(logDTFluxCore, Error, TEXT("Ctor with JSON Object"))
|
||||||
for(uint8 Index = 1; ; Index++)
|
for(uint8 Index = 1; ; Index++)
|
||||||
|
|||||||
@ -75,4 +75,10 @@ public:
|
|||||||
|
|
||||||
UFUNCTION()
|
UFUNCTION()
|
||||||
void AddContestRanking(const FDTFluxContestRankings& NewContestRankings);
|
void AddContestRanking(const FDTFluxContestRankings& NewContestRankings);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, CallInEditor, Category="DTFlux|Participant")
|
||||||
|
void UpdateParticipant(const FDTFluxParticipant& Participant);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, CallInEditor, Category="DTFlux|Participant")
|
||||||
|
void UpdateParticipantStatus(const FDTFluxTeamStatusUpdate& NewParticipantStatus);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -99,7 +99,7 @@ public:
|
|||||||
, Elite(false)
|
, Elite(false)
|
||||||
, Status(static_cast<EDTFluxParticipantStatusType>(0))
|
, Status(static_cast<EDTFluxParticipantStatusType>(0))
|
||||||
, bIsMassStartParticipant(false)
|
, bIsMassStartParticipant(false)
|
||||||
, LastSplitId(0)
|
, CurrentSplit(-1)
|
||||||
{
|
{
|
||||||
Teammate.Reset();
|
Teammate.Reset();
|
||||||
}
|
}
|
||||||
@ -130,7 +130,7 @@ public:
|
|||||||
UPROPERTY(BlueprintReadWrite, Category="DTFlux|model", EditAnywhere)
|
UPROPERTY(BlueprintReadWrite, Category="DTFlux|model", EditAnywhere)
|
||||||
bool bIsMassStartParticipant = false;
|
bool bIsMassStartParticipant = false;
|
||||||
UPROPERTY(BlueprintReadWrite, Category="DTFlux|model")
|
UPROPERTY(BlueprintReadWrite, Category="DTFlux|model")
|
||||||
int LastSplitId = -1;
|
int CurrentSplit = -1;
|
||||||
|
|
||||||
// void Dump() const;
|
// void Dump() const;
|
||||||
void AddTeammate(const FDTFluxPerson& Person);
|
void AddTeammate(const FDTFluxPerson& Person);
|
||||||
|
|||||||
@ -19,19 +19,12 @@ void UDTFluxCoreSubsystem::Initialize(FSubsystemCollectionBase& Collection)
|
|||||||
{
|
{
|
||||||
const UDTFluxGeneralSettings* GeneralSettings = GetDefault<UDTFluxGeneralSettings>();
|
const UDTFluxGeneralSettings* GeneralSettings = GetDefault<UDTFluxGeneralSettings>();
|
||||||
TSoftObjectPtr<UDTFluxModelAsset> ModelAsset = GeneralSettings->ModelAsset;
|
TSoftObjectPtr<UDTFluxModelAsset> ModelAsset = GeneralSettings->ModelAsset;
|
||||||
// if(ModelAsset.IsValid())
|
DataStorage = ModelAsset.LoadSynchronous();
|
||||||
// {
|
|
||||||
// }
|
|
||||||
// UE_LOG(logDTFluxCore, Error, TEXT("ModelAsset Not Valid"));
|
|
||||||
DataStorage = DataStorage = Cast<UDTFluxModelAsset>(ModelAsset.LoadSynchronous());
|
|
||||||
if(!DataStorage)
|
if(!DataStorage)
|
||||||
{
|
{
|
||||||
UE_LOG(logDTFluxCore, Error, TEXT("DataStorage Not Valid"));
|
UE_LOG(logDTFluxCore, Error, TEXT("DataStorage Not Valid"));
|
||||||
}
|
}
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// MakeStorageEditable(DataStorage);
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
//TODO REMOVE This as it's only for testing purpose
|
//TODO REMOVE This as it's only for testing purpose
|
||||||
NetworkSubsystem = GEngine->GetEngineSubsystem<UDTFluxNetworkSubsystem>();
|
NetworkSubsystem = GEngine->GetEngineSubsystem<UDTFluxNetworkSubsystem>();
|
||||||
@ -48,44 +41,13 @@ void UDTFluxCoreSubsystem::Deinitialize()
|
|||||||
|
|
||||||
void UDTFluxCoreSubsystem::SaveDataStorage()
|
void UDTFluxCoreSubsystem::SaveDataStorage()
|
||||||
{
|
{
|
||||||
|
if(!DataStorage->MarkPackageDirty())
|
||||||
|
{
|
||||||
|
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Unable to make package dirty !!!"))
|
||||||
|
}
|
||||||
if(DataStorage)
|
if(DataStorage)
|
||||||
{
|
{
|
||||||
DataStorage->MarkPackageDirty();
|
UEditorLoadingAndSavingUtils::SavePackages({DataStorage->GetPackage()}, true);
|
||||||
UPackage* Package = DataStorage->GetPackage();
|
|
||||||
if(Package->IsDirty())
|
|
||||||
{
|
|
||||||
FString PackageName = Package->GetName();
|
|
||||||
FString FileExtension = FPackageName::GetAssetPackageExtension();
|
|
||||||
FString FilePath = FPaths::ConvertRelativePathToFull(FPaths::ProjectContentDir() / PackageName.Replace(TEXT("/"), TEXT("/")) + FileExtension);
|
|
||||||
FString LongPackageName = DataStorage->GetOutermost()->GetName();
|
|
||||||
FString RealAssetPath;
|
|
||||||
bool bExists = FPackageName::DoesPackageExist(PackageName);
|
|
||||||
if (!bExists)
|
|
||||||
{
|
|
||||||
UE_LOG(logDTFluxCoreSubsystem, Error, TEXT("Le package n'existe pas ou est un redirecteur"));
|
|
||||||
}
|
|
||||||
bool bSuccess = FPackageName::SearchForPackageOnDisk(LongPackageName, &RealAssetPath);
|
|
||||||
|
|
||||||
if (bSuccess && !RealAssetPath.IsEmpty())
|
|
||||||
{
|
|
||||||
UE_LOG(logDTFluxCoreSubsystem, Log, TEXT("Vrai path trouvé : %s"), *RealAssetPath);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Aucun path valide trouvé pour sauvegarder l'asset"));
|
|
||||||
}
|
|
||||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Saving DataAsset to %s"), *FilePath);
|
|
||||||
TSoftObjectPtr<UDTFluxModelAsset> ModelAsset = GetDefault<UDTFluxGeneralSettings>()->ModelAsset;
|
|
||||||
FString RealPath = ModelAsset->GetPathName();
|
|
||||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("SoftObjectPath to %s"), *RealPath);
|
|
||||||
|
|
||||||
FSavePackageArgs Args;
|
|
||||||
Args.TopLevelFlags = RF_Public | RF_Standalone;
|
|
||||||
Args.bSlowTask = false;
|
|
||||||
Args.SaveFlags = SAVE_None;
|
|
||||||
GEditor->SavePackage(Package, DataStorage, *FilePath, Args);
|
|
||||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("DataAsset Saved"))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,6 +62,7 @@ void UDTFluxCoreSubsystem::RegisterDelegates()
|
|||||||
NetworkSubsystem->OnReceivedSplitRanking().BindUFunction(this, "ProcessSplitRanking");
|
NetworkSubsystem->OnReceivedSplitRanking().BindUFunction(this, "ProcessSplitRanking");
|
||||||
NetworkSubsystem->OnReceivedTeamUpdate().BindUFunction(this, "ProcessTeamList");
|
NetworkSubsystem->OnReceivedTeamUpdate().BindUFunction(this, "ProcessTeamList");
|
||||||
NetworkSubsystem->OnReceivedTeamStatusUpdate().BindUFunction(this, "ProcessTeamStatusUpdate");
|
NetworkSubsystem->OnReceivedTeamStatusUpdate().BindUFunction(this, "ProcessTeamStatusUpdate");
|
||||||
|
NetworkSubsystem->OnReceivedTeamUpdate().BindUFunction(this, "ProcessTeamUpdate");
|
||||||
NetworkSubsystem->OnReceivedSplitSensor().BindUFunction(this, "ProcessSplitSensor");
|
NetworkSubsystem->OnReceivedSplitSensor().BindUFunction(this, "ProcessSplitSensor");
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -153,32 +116,41 @@ void UDTFluxCoreSubsystem::ProcessContestRanking(const FDTFluxContestRankings& C
|
|||||||
NewContestRankings.SetName( DataStorage->GetContestNameForId(ContestRankings.ContestId));
|
NewContestRankings.SetName( DataStorage->GetContestNameForId(ContestRankings.ContestId));
|
||||||
DataStorage->AddContestRanking(NewContestRankings);
|
DataStorage->AddContestRanking(NewContestRankings);
|
||||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("ContestRankings added for Contest %s"), *NewContestRankings.ContestName);
|
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("ContestRankings added for Contest %s"), *NewContestRankings.ContestName);
|
||||||
DataStorage->MarkPackageDirty();
|
SaveDataStorage();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDTFluxCoreSubsystem::ProcessStageRanking(const FDTFluxStageRankings& StageRankings)
|
void UDTFluxCoreSubsystem::ProcessStageRanking(const FDTFluxStageRankings& StageRankings)
|
||||||
{
|
{
|
||||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Received StageRankings with %i Items"), StageRankings.Rankings.Num());
|
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Received StageRankings with %i Items"), StageRankings.Rankings.Num());
|
||||||
DataStorage->UpdateOrCreateStageRanking(StageRankings);
|
DataStorage->UpdateOrCreateStageRanking(StageRankings);
|
||||||
DataStorage->MarkPackageDirty();
|
SaveDataStorage();
|
||||||
}
|
}
|
||||||
void UDTFluxCoreSubsystem::ProcessSplitRanking(const FDTFluxSplitRankings& SplitRankings)
|
void UDTFluxCoreSubsystem::ProcessSplitRanking(const FDTFluxSplitRankings& SplitRankings)
|
||||||
{
|
{
|
||||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Received SplitRanking with %i Items"), SplitRankings.Rankings.Num());
|
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Received SplitRanking with %i Items"), SplitRankings.Rankings.Num());
|
||||||
DataStorage->UpdateOrCreateSplitRanking(SplitRankings);
|
DataStorage->UpdateOrCreateSplitRanking(SplitRankings);
|
||||||
DataStorage->MarkPackageDirty();
|
SaveDataStorage();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDTFluxCoreSubsystem::ProcessTeamStatusUpdate()
|
void UDTFluxCoreSubsystem::ProcessTeamStatusUpdate(const FDTFluxTeamStatusUpdate& NewParticipantStatus)
|
||||||
{
|
{
|
||||||
//TODO IMPLEMENT ME !!!!
|
DataStorage->UpdateParticipantStatus(NewParticipantStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDTFluxCoreSubsystem::ProcessSplitSensor()
|
void UDTFluxCoreSubsystem::ProcessTeamUpdate(const FDTFluxParticipant& Participant)
|
||||||
{
|
{
|
||||||
//TODO IMPLEMENT ME !!!!
|
DataStorage->UpdateParticipant(Participant);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UDTFluxCoreSubsystem::ProcessSplitSensor(const FDTFluxSplitSensorInfo& SplitSensorInfo)
|
||||||
|
{
|
||||||
|
FDTFluxContest Contest;
|
||||||
|
FDTFluxStageKey StageKey(SplitSensorInfo.ContestId, SplitSensorInfo.StageId);
|
||||||
|
DataStorage->GetContestById(SplitSensorInfo.ContestId, Contest);
|
||||||
|
UE_LOG(logDTFluxCoreSubsystem, Log, TEXT("%s %s Split %i Sensor for Participant [Bib] %i "),
|
||||||
|
*Contest.Name, *Contest.Stages[SplitSensorInfo.StageId].Name,
|
||||||
|
SplitSensorInfo.SplitId , SplitSensorInfo.Bib);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
#include "Types/Struct/DTFluxRaceDataStructs.h"
|
#include "Types/Struct/DTFluxRaceDataStructs.h"
|
||||||
#include "Types/Struct/DTFluxTeamListStruct.h"
|
#include "Types/Struct/DTFluxTeamListStruct.h"
|
||||||
#include "Types/Struct/DTFluxRankingStructs.h"
|
#include "Types/Struct/DTFluxRankingStructs.h"
|
||||||
|
#include "Types/Struct/DTFluxSplitSensor.h"
|
||||||
#include "DTFluxCoreSubsystem.generated.h"
|
#include "DTFluxCoreSubsystem.generated.h"
|
||||||
|
|
||||||
|
|
||||||
@ -87,6 +88,7 @@ protected:
|
|||||||
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
|
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
|
||||||
virtual void Deinitialize() override;
|
virtual void Deinitialize() override;
|
||||||
// ~Subsystem Interface
|
// ~Subsystem Interface
|
||||||
|
UFUNCTION()
|
||||||
void SaveDataStorage();
|
void SaveDataStorage();
|
||||||
private:
|
private:
|
||||||
UDTFluxNetworkSubsystem* NetworkSubsystem = nullptr;
|
UDTFluxNetworkSubsystem* NetworkSubsystem = nullptr;
|
||||||
@ -102,9 +104,11 @@ private:
|
|||||||
UFUNCTION()
|
UFUNCTION()
|
||||||
void ProcessSplitRanking(const FDTFluxSplitRankings& SplitRankings);
|
void ProcessSplitRanking(const FDTFluxSplitRankings& SplitRankings);
|
||||||
UFUNCTION()
|
UFUNCTION()
|
||||||
void ProcessTeamStatusUpdate();
|
void ProcessTeamStatusUpdate(const FDTFluxTeamStatusUpdate& NewParticipantStatus);
|
||||||
UFUNCTION()
|
UFUNCTION()
|
||||||
void ProcessSplitSensor();
|
void ProcessSplitSensor(const FDTFluxSplitSensorInfo& SplitSensorInfo);
|
||||||
|
UFUNCTION()
|
||||||
|
void ProcessTeamUpdate(const FDTFluxParticipant& Participant);
|
||||||
UFUNCTION()
|
UFUNCTION()
|
||||||
void SendRequest(const FString& Message);
|
void SendRequest(const FString& Message);
|
||||||
UFUNCTION()
|
UFUNCTION()
|
||||||
|
|||||||
Reference in New Issue
Block a user