34 lines
978 B
C++
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;
|
|
} |