Skip to content
Snippets Groups Projects
Commit 27cbc708 authored by Jonathan Ehret's avatar Jonathan Ehret
Browse files

add option for not fading between two conditions on the same map

parent 609c68fd
No related branches found
No related tags found
No related merge requests found
......@@ -49,8 +49,6 @@ void USFFadeHandler::Tick()
case EFadeState::FadingOut:
if(!NewLevelName.IsEmpty())
{
// reset logging info array for new condition, because actors in list will be destroyed and garbage collected when new level is loaded
USFGameInstance::Get()->GetLogObject()->RemoveAllTrackedComponents();
FSFLoggingUtils::Log("[USFFadeHandler::Tick()]: Opening Level now", false);
UGameplayStatics::OpenLevel(GameInstance->GetWorld(), *NewLevelName, false);
SetTimerForNextTick();
......@@ -95,7 +93,7 @@ void USFFadeHandler::Tick()
}
}
void USFFadeHandler::FadeToLevel(const FString& LevelName, const bool bStartFadeFadedOut)
void USFFadeHandler::FadeToLevel(const FString& NextLevelName, const bool bStartFadeFadedOut)
{
if (GetCameraManager() == nullptr)
{
......@@ -108,11 +106,16 @@ void USFFadeHandler::FadeToLevel(const FString& LevelName, const bool bStartFade
}
// Pause Logging Loops (e.g. position logging) between conditions
USFGameInstance::Get()->GetLogObject()->SetLoggingLoopsActive(false);
// reset logging info array for new condition, because actors in list will be destroyed and garbage collected when new level is loaded
USFGameInstance::Get()->GetLogObject()->RemoveAllTrackedComponents();
FString CurrentLevelName = USFGameInstance::Get()->GetWorld()->GetMapName();
CurrentLevelName.RemoveFromStart(USFGameInstance::Get()->GetWorld()->StreamingLevelsPrefix);
FSFLoggingUtils::Log(
"[USFFadeHandler::FadeToLevel()]: Fading From level (" + USFGameInstance::Get()->GetWorld()->GetMapName() + ") to level (" +
LevelName + ")", false);
"[USFFadeHandler::FadeToLevel()]: Fading From level (" + CurrentLevelName + ") to level (" + NextLevelName + ")", false);
if (bStartFadeFadedOut || bIsFadedOut)
{
//we only need to fade in
if (bIsFadedOut)
{
bIsFadedOut = false;
......@@ -120,14 +123,23 @@ void USFFadeHandler::FadeToLevel(const FString& LevelName, const bool bStartFade
Fade(0.0f, true);
FadeState = EFadeState::FadingOut;
}
else if (USFGameInstance::Get()->GetStudySetup()->bNoFadingOnSameMap
&& CurrentLevelName == FPackageName::GetShortName(NextLevelName))
{
//bNoFadingOnSameMap and fade to same map, so no fading, but pretend we "faded in"
FadeState = EFadeState::FadingIn;
FSFLoggingUtils::Log(
"[USFFadeHandler::FadeToLevel()]: Actually not fading but just calling OnFaded in (bNoFadingOnSameMap)", false);
}
else
{
//fade out and then in again
Fade(FadeConfig.FadeDuration, true);
FadeState = EFadeState::FadingOut;
}
NewLevelName = LevelName;
NewLevelName = NextLevelName;
SetTimerForNextTick();
}
......
......@@ -290,6 +290,7 @@ TSharedPtr<FJsonObject> ASFStudySetup::GetAsJson() const
if(UseGazeTracker == EGazeTrackerMode::HeadRotationOnly) Json->SetStringField("UseGazeTracker", "HeadRotationOnly");
if(UseGazeTracker == EGazeTrackerMode::EyeTracking) Json->SetStringField("UseGazeTracker", "EyeTracking");
Json->SetBoolField("bIgnoreNonGazeTargetActors", bIgnoreNonGazeTargetActors);
Json->SetBoolField("bNoFadingOnSameMap", bNoFadingOnSameMap);
return Json;
}
......@@ -326,6 +327,7 @@ void ASFStudySetup::FromJson(TSharedPtr<FJsonObject> Json)
if(Json->GetStringField("UseGazeTracker") == "HeadRotationOnly") UseGazeTracker = EGazeTrackerMode::HeadRotationOnly;
if(Json->GetStringField("UseGazeTracker") == "EyeTracking") UseGazeTracker = EGazeTrackerMode::EyeTracking;
bIgnoreNonGazeTargetActors = Json->GetBoolField("bIgnoreNonGazeTargetActors");
bNoFadingOnSameMap = Json->GetBoolField("bNoFadingOnSameMap");
}
void ASFStudySetup::LoadSetupFile()
......
......@@ -103,6 +103,12 @@ public:
UPROPERTY(BlueprintReadOnly, EditAnywhere, meta = (Category = "Study Setup"))
bool bUseCustomParticipantIDs = false;
//this will allow studies to do no fading -in and -out when having two consecutive conditions on the same map
//instead OnFadedIn() is directly called. This also means that BeginPlay cannot be used to set up everything according to factor levels,
//since the map is not started/loaded anew. Developers need to take care themselves to clean up everything during OnFadedIn delegate calls
UPROPERTY(BlueprintReadOnly, EditAnywhere, meta = (Category = "Study Setup"))
bool bNoFadingOnSameMap = false;
// ****************************************************************** //
// ******* Getters ************************************************** //
// ****************************************************************** //
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment