ModelAsset Fixed And Server Response Implementation + Notes.md for sharing problematics

This commit is contained in:
2025-07-04 01:13:07 +02:00
parent fa5493adcf
commit 801e946a89
6 changed files with 69 additions and 58 deletions

View File

@ -19,19 +19,12 @@ void UDTFluxCoreSubsystem::Initialize(FSubsystemCollectionBase& Collection)
{
const UDTFluxGeneralSettings* GeneralSettings = GetDefault<UDTFluxGeneralSettings>();
TSoftObjectPtr<UDTFluxModelAsset> ModelAsset = GeneralSettings->ModelAsset;
// if(ModelAsset.IsValid())
// {
// }
// UE_LOG(logDTFluxCore, Error, TEXT("ModelAsset Not Valid"));
DataStorage = DataStorage = Cast<UDTFluxModelAsset>(ModelAsset.LoadSynchronous());
DataStorage = ModelAsset.LoadSynchronous();
if(!DataStorage)
{
UE_LOG(logDTFluxCore, Error, TEXT("DataStorage Not Valid"));
}
// else
// {
// MakeStorageEditable(DataStorage);
// }
}
//TODO REMOVE This as it's only for testing purpose
NetworkSubsystem = GEngine->GetEngineSubsystem<UDTFluxNetworkSubsystem>();
@ -48,44 +41,13 @@ void UDTFluxCoreSubsystem::Deinitialize()
void UDTFluxCoreSubsystem::SaveDataStorage()
{
if(!DataStorage->MarkPackageDirty())
{
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Unable to make package dirty !!!"))
}
if(DataStorage)
{
DataStorage->MarkPackageDirty();
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"))
}
UEditorLoadingAndSavingUtils::SavePackages({DataStorage->GetPackage()}, true);
}
}
@ -100,6 +62,7 @@ void UDTFluxCoreSubsystem::RegisterDelegates()
NetworkSubsystem->OnReceivedSplitRanking().BindUFunction(this, "ProcessSplitRanking");
NetworkSubsystem->OnReceivedTeamUpdate().BindUFunction(this, "ProcessTeamList");
NetworkSubsystem->OnReceivedTeamStatusUpdate().BindUFunction(this, "ProcessTeamStatusUpdate");
NetworkSubsystem->OnReceivedTeamUpdate().BindUFunction(this, "ProcessTeamUpdate");
NetworkSubsystem->OnReceivedSplitSensor().BindUFunction(this, "ProcessSplitSensor");
}
@ -153,32 +116,41 @@ void UDTFluxCoreSubsystem::ProcessContestRanking(const FDTFluxContestRankings& C
NewContestRankings.SetName( DataStorage->GetContestNameForId(ContestRankings.ContestId));
DataStorage->AddContestRanking(NewContestRankings);
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("ContestRankings added for Contest %s"), *NewContestRankings.ContestName);
DataStorage->MarkPackageDirty();
SaveDataStorage();
}
void UDTFluxCoreSubsystem::ProcessStageRanking(const FDTFluxStageRankings& StageRankings)
{
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Received StageRankings with %i Items"), StageRankings.Rankings.Num());
DataStorage->UpdateOrCreateStageRanking(StageRankings);
DataStorage->MarkPackageDirty();
SaveDataStorage();
}
void UDTFluxCoreSubsystem::ProcessSplitRanking(const FDTFluxSplitRankings& SplitRankings)
{
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Received SplitRanking with %i Items"), SplitRankings.Rankings.Num());
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);
}