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