diff --git a/Source/StudyFrameworkPlugin/Private/Logging/SFLoggingBPLibrary.cpp b/Source/StudyFrameworkPlugin/Private/Logging/SFLoggingBPLibrary.cpp index 949ceb7d9e2b26792f20a1405714899fb109d718..1a80f5ef549131327bc4fc2b845c98f4eca6002f 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 1b7dfcae39ac551a04f87fc0f3f401827ecba381..6ac893d1d98477bda4736934806a7520ca2b6a8a 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; } diff --git a/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp b/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp index 789b77531f0e6975d7cfb55608c683ac340acbc6..544162630c1c918571bf89d29101e9c3c2d54f62 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"); @@ -327,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 8d619ff98df6cbd4b81e461dddf873a576930635..5f6080006d607d6ed1b787a117792833096bf4d9 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];