From 7eab44fc105edda500f20e2695672fa834b581dc Mon Sep 17 00:00:00 2001
From: Ehret <jw210150@WIN.RZ.RWTH-AACHEN.DE>
Date: Mon, 26 Sep 2022 23:33:21 +0200
Subject: [PATCH 1/3] move where sanity checks and warnings for logging data is
 done. This avoids logging data for upcoming conditions, when attemoting to
 log data multiple times

---
 .../Private/Logging/SFLoggingBPLibrary.cpp    |  3 ---
 .../Private/SFCondition.cpp                   | 21 +++++++++++++++++++
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/Source/StudyFrameworkPlugin/Private/Logging/SFLoggingBPLibrary.cpp b/Source/StudyFrameworkPlugin/Private/Logging/SFLoggingBPLibrary.cpp
index 949ceb7..1a80f5e 100644
--- a/Source/StudyFrameworkPlugin/Private/Logging/SFLoggingBPLibrary.cpp
+++ b/Source/StudyFrameworkPlugin/Private/Logging/SFLoggingBPLibrary.cpp
@@ -13,9 +13,6 @@
      USFCondition* CurrCondition = USFGameInstance::Get()->GetParticipant()->GetCurrentCondition();
      if (!CurrCondition->StoreDependentVariableData(DependentVariableName, Value))
      {
-         FSFLoggingUtils::Log(
-             "Cannot log data '" + Value + "' for dependent variable '" + DependentVariableName +
-             "' since it does not exist for this condition!", true);
          return;
      }
      LogComment("Recorded " + DependentVariableName + ": " + Value);
diff --git a/Source/StudyFrameworkPlugin/Private/SFCondition.cpp b/Source/StudyFrameworkPlugin/Private/SFCondition.cpp
index 1b7dfca..6ac893d 100644
--- a/Source/StudyFrameworkPlugin/Private/SFCondition.cpp
+++ b/Source/StudyFrameworkPlugin/Private/SFCondition.cpp
@@ -3,6 +3,7 @@
 #include "UObject/UObjectGlobals.h"
 
 #include "SFMapFactor.h"
+#include "Logging/SFLoggingUtils.h"
 
 USFCondition::USFCondition()
 {
@@ -104,6 +105,22 @@ bool USFCondition::operator==(USFCondition& Other)
 
 bool USFCondition::StoreDependentVariableData(const FString& VarName, const FString& Value)
 {
+	if(!WasStarted())
+	{
+		FSFLoggingUtils::Log(
+			"Cannot log data '" + Value + "' for dependent variable '" + VarName +
+			"' since condition was not started yet, probably still fading!", true);
+		return false;
+	}
+
+	if (IsFinished())
+	{
+		FSFLoggingUtils::Log(
+			"Cannot log data '" + Value + "' for dependent variable '" + VarName +
+			"' since condition was has finished, probably already fading!", true);
+		return false;
+	}
+
 	for (auto& Var : DependentVariablesValues)
 	{
 		if (Var.Key->Name == VarName)
@@ -112,6 +129,10 @@ bool USFCondition::StoreDependentVariableData(const FString& VarName, const FStr
 			return true;
 		}
 	}
+
+	FSFLoggingUtils::Log(
+		"Cannot log data '" + Value + "' for dependent variable '" + VarName +
+		"' since it does not exist for this condition!", true);
 	return false;
 }
 
-- 
GitLab


From f25b379ce3e18cfc9463398dec14f96d6f139788 Mon Sep 17 00:00:00 2001
From: Ehret <jw210150@WIN.RZ.RWTH-AACHEN.DE>
Date: Mon, 26 Sep 2022 23:51:25 +0200
Subject: [PATCH 2/3] only "EndStudy" once so no double entries are written
 into the long table!

---
 Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp b/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp
index 789b775..2f84cab 100644
--- a/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp
+++ b/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp
@@ -310,9 +310,10 @@ bool USFGameInstance::StartStudy()
 void USFGameInstance::EndStudy()
 {
 	USFCondition* LastCondition = Participant->GetCurrentCondition();
-	if (LastCondition && LastCondition->WasStarted())
-		LastCondition->End();
-
+	if (!LastCondition || !LastCondition->WasStarted() || LastCondition->IsFinished())
+		return;
+		
+	LastCondition->End();
 	Participant->EndStudy();
 
 	UpdateHUD("Study ended");
-- 
GitLab


From c402370ebc88baa699054e3ad957a1da08df9a58 Mon Sep 17 00:00:00 2001
From: Ehret <jw210150@WIN.RZ.RWTH-AACHEN.DE>
Date: Mon, 26 Sep 2022 23:53:15 +0200
Subject: [PATCH 3/3] improve logging

---
 Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp | 8 ++++++++
 Source/StudyFrameworkPlugin/Private/SFParticipant.cpp  | 1 -
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp b/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp
index 2f84cab..5441626 100644
--- a/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp
+++ b/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp
@@ -328,9 +328,17 @@ void USFGameInstance::EndStudy()
 
 bool USFGameInstance::NextCondition(bool bForced /*=false*/)
 {
+	// Check if is already fading
+	if (FadeHandler->GetIsFading())
+	{
+		FSFLoggingUtils::Log("[USFGameInstance::NextCondition()]: Already Fading between levels", true);
+		return false;
+	}
+
 	USFCondition* NextCondition = Participant->GetNextCondition();
 	if (!NextCondition)
 	{
+		FSFLoggingUtils::Log("[SFGameInstance::NextCondition]: All conditions already ran, no NextCondition", false);
 		EndStudy();
 		return false;
 	}
diff --git a/Source/StudyFrameworkPlugin/Private/SFParticipant.cpp b/Source/StudyFrameworkPlugin/Private/SFParticipant.cpp
index 8d619ff..5f60800 100644
--- a/Source/StudyFrameworkPlugin/Private/SFParticipant.cpp
+++ b/Source/StudyFrameworkPlugin/Private/SFParticipant.cpp
@@ -169,7 +169,6 @@ USFCondition* USFParticipant::GetNextCondition() const
 	// Get next Condition
 	if (CurrentConditionIdx + 1 >= Conditions.Num())
 	{
-		FSFLoggingUtils::Log("[USFParticipant::NextCondition()]: All conditions already ran, no NextCondition", false);
 		return nullptr;
 	}
 	USFCondition* UpcomingCondition = Conditions[CurrentConditionIdx + 1];
-- 
GitLab