RealtimeStyleTransferRuntime/Plugins/PocketWorlds/Source/Private/PocketLevelSystem.cpp

34 lines
978 B
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "PocketLevelSystem.h"
#include "PocketLevel.h"
#include "Engine/LevelStreamingDynamic.h"
#include "PocketLevelInstance.h"
UPocketLevelInstance* UPocketLevelSubsystem::GetOrCreatePocketLevelFor(ULocalPlayer* LocalPlayer, UPocketLevel* PocketLevel, FVector DesiredSpawnPoint)
{
if (PocketLevel == nullptr)
{
return nullptr;
}
float VerticalBoundsOffset = 0;
for (UPocketLevelInstance* Instance : PocketInstances)
{
if (Instance->LocalPlayer == LocalPlayer && Instance->PocketLevel == PocketLevel)
{
return Instance;
}
VerticalBoundsOffset += Instance->PocketLevel->Bounds.Z;
}
const FVector SpawnPoint = DesiredSpawnPoint + FVector(0, 0, VerticalBoundsOffset);
UPocketLevelInstance* NewInstance = NewObject<UPocketLevelInstance>(this);
NewInstance->Initialize(LocalPlayer, PocketLevel, SpawnPoint);
PocketInstances.Add(NewInstance);
return NewInstance;
}