diff --git a/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp b/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp index 04fc39807fdc3e705666affdc3ffbd7913e46bfc..86d6b019851a01f610b99afb233e797a3de8e10e 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 35cfceedb71f68693297ccee9fce29d5121f4600..bc88b182654b8a8fea646a5c348b35eb98353b82 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 2a3836fec63d2956bb131be994fffe66ee4a9e0c..9032efce886766f8c4664313908a9e7a7c9e46e1 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 0c39bced0b7596127f2ee2c86fd8f194fee82390..c88de85eddc10bc371e3421304e0196b94d2c65e 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.