lyra_game_ue/Source/LyraGame/GameFeatures/GameFeatureAction_WorldActionBase.cpp
Goran Lazarevski 3bcab085f8 Initial commit
2025-03-20 11:06:26 +01:00

46 lines
1.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "GameFeatureAction_WorldActionBase.h"
#include "Engine/GameInstance.h"
#include "Engine/World.h"
#include UE_INLINE_GENERATED_CPP_BY_NAME(GameFeatureAction_WorldActionBase)
void UGameFeatureAction_WorldActionBase::OnGameFeatureActivating(FGameFeatureActivatingContext& Context)
{
GameInstanceStartHandles.FindOrAdd(Context) = FWorldDelegates::OnStartGameInstance.AddUObject(this,
&UGameFeatureAction_WorldActionBase::HandleGameInstanceStart, FGameFeatureStateChangeContext(Context));
// Add to any worlds with associated game instances that have already been initialized
for (const FWorldContext& WorldContext : GEngine->GetWorldContexts())
{
if (Context.ShouldApplyToWorldContext(WorldContext))
{
AddToWorld(WorldContext, Context);
}
}
}
void UGameFeatureAction_WorldActionBase::OnGameFeatureDeactivating(FGameFeatureDeactivatingContext& Context)
{
FDelegateHandle* FoundHandle = GameInstanceStartHandles.Find(Context);
if (ensure(FoundHandle))
{
FWorldDelegates::OnStartGameInstance.Remove(*FoundHandle);
}
}
void UGameFeatureAction_WorldActionBase::HandleGameInstanceStart(UGameInstance* GameInstance, FGameFeatureStateChangeContext ChangeContext)
{
if (FWorldContext* WorldContext = GameInstance->GetWorldContext())
{
if (ChangeContext.ShouldApplyToWorldContext(*WorldContext))
{
AddToWorld(*WorldContext, ChangeContext);
}
}
}