37 lines
966 B
C++
Raw Normal View History

2025-03-20 11:06:26 +01:00
// Copyright Epic Games, Inc. All Rights Reserved.
#include "PocketLevelSystem.h"
#include "PocketLevel.h"
#include "PocketLevelInstance.h"
#include UE_INLINE_GENERATED_CPP_BY_NAME(PocketLevelSystem)
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;
}