From bf98a6a0ea0c8875f56ddfb6be917f91a7a5ecbd Mon Sep 17 00:00:00 2001
From: jehret <ehret@vr.rwth-aachen.de>
Date: Mon, 15 Jan 2024 20:42:23 +0100
Subject: [PATCH] fix continuing a study run containing unfinished but started
 conditions closes #107

---
 .../Private/HUD/SFConditionListEntry.cpp                   | 3 ++-
 Source/StudyFrameworkPlugin/Private/HUD/SFMasterHUD.cpp    | 2 +-
 Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp     | 7 ++++++-
 Source/StudyFrameworkPlugin/Public/SFGameInstance.h        | 5 ++++-
 4 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/Source/StudyFrameworkPlugin/Private/HUD/SFConditionListEntry.cpp b/Source/StudyFrameworkPlugin/Private/HUD/SFConditionListEntry.cpp
index dcc74e6..0569bb9 100644
--- a/Source/StudyFrameworkPlugin/Private/HUD/SFConditionListEntry.cpp
+++ b/Source/StudyFrameworkPlugin/Private/HUD/SFConditionListEntry.cpp
@@ -98,7 +98,8 @@ void USFConditionListEntry::GoTo()
 void USFConditionListEntry::UpdateData()
 {
 	IsActive = USFGameInstance::Get()->GetParticipant()->GetCurrentCondition() == Condition && USFGameInstance::Get()->
-		GetParticipant()->GetCurrentCondition()->WasStarted();
+		GetParticipant()->GetCurrentCondition()->WasStarted() && USFGameInstance::Get()->IsStarted();
+	//the last part IsStarted() is needed when continuing a run where the first condition was already started
 	IsDone = Condition->IsFinished();
 
 	if (IsHeader)
diff --git a/Source/StudyFrameworkPlugin/Private/HUD/SFMasterHUD.cpp b/Source/StudyFrameworkPlugin/Private/HUD/SFMasterHUD.cpp
index b91bdd7..e118d4b 100644
--- a/Source/StudyFrameworkPlugin/Private/HUD/SFMasterHUD.cpp
+++ b/Source/StudyFrameworkPlugin/Private/HUD/SFMasterHUD.cpp
@@ -101,7 +101,7 @@ void ASFMasterHUD::BeginPlay()
 		SetNextConditionButtonVisibility(ESlateVisibility::Collapsed);
 	}
 
-	if (USFGameInstance::Get()->GetParticipant() && USFGameInstance::Get()->GetParticipant()->GetAllConditions()[0]->IsFinished())
+	if (USFGameInstance::Get()->IsContinueStudyStart())
 	{
 		Cast<UTextBlock>(HUDWidget->GetStartButton()->GetAllChildren()[0])->SetText(
 			FText::FromString("Continue Study"));
diff --git a/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp b/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp
index 15f0a96..c138a6a 100644
--- a/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp
+++ b/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp
@@ -381,7 +381,7 @@ bool USFGameInstance::StartStudy()
 		return false;
 	}
 
-	if (!StartCondition)
+	if (!bInDebugMode)
 	{
 		//we are actually doing a real start and not just a "debug-start"
 		if (!Participant->StartStudy())
@@ -625,6 +625,11 @@ bool USFGameInstance::IsInDebugMode() const
 	return bInDebugMode;
 }
 
+bool USFGameInstance::IsContinueStudyStart() const
+{
+	return !bInDebugMode && StartCondition;
+}
+
 bool USFGameInstance::HasEnded() const
 {
 	return bStudyEnded;
diff --git a/Source/StudyFrameworkPlugin/Public/SFGameInstance.h b/Source/StudyFrameworkPlugin/Public/SFGameInstance.h
index c4c1b5e..051d561 100644
--- a/Source/StudyFrameworkPlugin/Public/SFGameInstance.h
+++ b/Source/StudyFrameworkPlugin/Public/SFGameInstance.h
@@ -72,12 +72,15 @@ public:
 	UFUNCTION(BlueprintCallable)
 	bool IsInDebugMode() const;
 
+	UFUNCTION(BlueprintCallable)
+	bool IsContinueStudyStart() const;
+
 
 	//Whether the study is done (this is actually only true for a short duration), as once faded out Unreal is quit
 	UFUNCTION(BlueprintCallable)
 	bool HasEnded() const;
 
-	
+
 
 	//the time that passed since the start of the study in seconds
 	UFUNCTION(BlueprintCallable)
-- 
GitLab