// 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(this); NewInstance->Initialize(LocalPlayer, PocketLevel, SpawnPoint); PocketInstances.Add(NewInstance); return NewInstance; }