From 5c64267716273315304047eff508b1e5135dab57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malte=20K=C3=B6gel?= <koegel@vr.rwth-aachen.de> Date: Thu, 5 Oct 2023 11:28:14 +0200 Subject: [PATCH] When jumping into a condition directly from the HUD, also call StartStudy. Made StartCondition const for this, but this should be fine. closes #92 --- Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp | 6 ++++++ Source/StudyFrameworkPlugin/Private/SFParticipant.cpp | 6 +++--- Source/StudyFrameworkPlugin/Public/SFGameInstance.h | 4 +++- Source/StudyFrameworkPlugin/Public/SFParticipant.h | 6 +++--- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp b/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp index 04fc398..86d6b01 100644 --- a/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp +++ b/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp @@ -455,6 +455,12 @@ bool USFGameInstance::GoToCondition(const USFCondition* Condition, bool bForced FSFLoggingUtils::Log("[USFGameInstance::GoToCondition()]: Could not load next condition.", true); return false; } + + if (!bStudyStarted && !bIsStarting) { + StartCondition = Condition; //Start at this condition + bIsStarting = true; //To avoid infinite loops, when StartStudy calls GoToCondition(StartCondition) + return StartStudy(); + } GoToConditionSynced(Condition->UniqueName, bForced, Fade); return true; } diff --git a/Source/StudyFrameworkPlugin/Private/SFParticipant.cpp b/Source/StudyFrameworkPlugin/Private/SFParticipant.cpp index 35cfcee..bc88b18 100644 --- a/Source/StudyFrameworkPlugin/Private/SFParticipant.cpp +++ b/Source/StudyFrameworkPlugin/Private/SFParticipant.cpp @@ -307,19 +307,19 @@ void USFParticipant::StoreInIndependentVarLongTable() const } } -void USFParticipant::DeleteStoredDataForConditionFromLongTable(USFCondition* Condition) +void USFParticipant::DeleteStoredDataForConditionFromLongTable(const USFCondition* Condition) { const FString Filename = FPaths::ProjectDir() + "StudyFramework/StudyLogs/Phase_" + Condition->PhaseName + ".csv"; RemoveLinesOfConditionAndWriteToFile(Condition, Filename); } -void USFParticipant::DeleteStoredTrialDataForCondition(USFCondition* Condition, USFMultipleTrialDependentVariable* DependentVariable) +void USFParticipant::DeleteStoredTrialDataForCondition(const USFCondition* Condition, USFMultipleTrialDependentVariable* DependentVariable) { const FString Filename = FPaths::ProjectDir() + "StudyFramework/StudyLogs/Phase_" + Condition->PhaseName + "_" + DependentVariable->Name + ".csv"; RemoveLinesOfConditionAndWriteToFile(Condition, Filename); } -void USFParticipant::RemoveLinesOfConditionAndWriteToFile(USFCondition* Condition, const FString Filename) +void USFParticipant::RemoveLinesOfConditionAndWriteToFile(const USFCondition* Condition, const FString Filename) { TArray<FString> Lines; TArray<FString> CleanedLines; diff --git a/Source/StudyFrameworkPlugin/Public/SFGameInstance.h b/Source/StudyFrameworkPlugin/Public/SFGameInstance.h index 2a3836f..9032efc 100644 --- a/Source/StudyFrameworkPlugin/Public/SFGameInstance.h +++ b/Source/StudyFrameworkPlugin/Public/SFGameInstance.h @@ -218,12 +218,14 @@ protected: // this is used if the study should not be started from the beginning // e.g., when starting a map directly for debugging in the editor // or when continuing a crashed study run - USFCondition* StartCondition; + const USFCondition* StartCondition; // State of Study / GameInstance UPROPERTY(BlueprintReadOnly) bool bStudyStarted = false; + bool bIsStarting = false; + UPROPERTY(BlueprintReadOnly) bool bStudyEnded = false; diff --git a/Source/StudyFrameworkPlugin/Public/SFParticipant.h b/Source/StudyFrameworkPlugin/Public/SFParticipant.h index 0c39bce..c88de85 100644 --- a/Source/StudyFrameworkPlugin/Public/SFParticipant.h +++ b/Source/StudyFrameworkPlugin/Public/SFParticipant.h @@ -82,8 +82,8 @@ public: // recycling bin file name void CreateLongTableBackUp(const FString PathToSrcFile) const; void StoreTrialInTrialDVLongTable(USFMultipleTrialDependentVariable* DependentVariable, TArray<FString> Values) const; - void DeleteStoredDataForConditionFromLongTable(USFCondition* Condition); - void DeleteStoredTrialDataForCondition(USFCondition* Condition, USFMultipleTrialDependentVariable* DependentVariable); + void DeleteStoredDataForConditionFromLongTable(const USFCondition* Condition); + void DeleteStoredTrialDataForCondition(const USFCondition* Condition, USFMultipleTrialDependentVariable* DependentVariable); void SetCurrentBackUpFolderName(FString BackUpFolderName); protected: @@ -98,7 +98,7 @@ protected: void StoreInPhaseLongTable() const; void StoreInIndependentVarLongTable() const; - void RemoveLinesOfConditionAndWriteToFile(USFCondition* Condition, FString Filename); + void RemoveLinesOfConditionAndWriteToFile(const USFCondition* Condition, FString Filename); // This is the parent folder within RecyclingBin, where backups // of the current operation will be stored. -- GitLab