2022-05-23 18:41:30 +00:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
|
|
#include "PocketLevelSystem.h"
|
2022-09-13 07:18:28 +00:00
|
|
|
|
|
|
|
#include "Math/Vector.h"
|
2022-05-23 18:41:30 +00:00
|
|
|
#include "PocketLevel.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;
|
|
|
|
}
|