Files
UnrealEngine/Samples/Games/Lyra/Source/LyraGame/AbilitySystem/LyraGameplayEffectContext.cpp
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

64 lines
2.0 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "LyraGameplayEffectContext.h"
#include "AbilitySystem/LyraAbilitySourceInterface.h"
#include "Engine/HitResult.h"
#include "PhysicalMaterials/PhysicalMaterial.h"
#include "Iris/ReplicationState/PropertyNetSerializerInfoRegistry.h"
#include "Serialization/GameplayEffectContextNetSerializer.h"
#include UE_INLINE_GENERATED_CPP_BY_NAME(LyraGameplayEffectContext)
class FArchive;
FLyraGameplayEffectContext* FLyraGameplayEffectContext::ExtractEffectContext(struct FGameplayEffectContextHandle Handle)
{
FGameplayEffectContext* BaseEffectContext = Handle.Get();
if ((BaseEffectContext != nullptr) && BaseEffectContext->GetScriptStruct()->IsChildOf(FLyraGameplayEffectContext::StaticStruct()))
{
return (FLyraGameplayEffectContext*)BaseEffectContext;
}
return nullptr;
}
bool FLyraGameplayEffectContext::NetSerialize(FArchive& Ar, class UPackageMap* Map, bool& bOutSuccess)
{
FGameplayEffectContext::NetSerialize(Ar, Map, bOutSuccess);
// Not serialized for post-activation use:
// CartridgeID
return true;
}
namespace UE::Net
{
// Forward to FGameplayEffectContextNetSerializer
// Note: If FLyraGameplayEffectContext::NetSerialize() is modified, a custom NetSerializer must be implemented as the current fallback will no longer be sufficient.
UE_NET_IMPLEMENT_FORWARDING_NETSERIALIZER_AND_REGISTRY_DELEGATES(LyraGameplayEffectContext, FGameplayEffectContextNetSerializer);
}
void FLyraGameplayEffectContext::SetAbilitySource(const ILyraAbilitySourceInterface* InObject, float InSourceLevel)
{
AbilitySourceObject = MakeWeakObjectPtr(Cast<const UObject>(InObject));
//SourceLevel = InSourceLevel;
}
const ILyraAbilitySourceInterface* FLyraGameplayEffectContext::GetAbilitySource() const
{
return Cast<ILyraAbilitySourceInterface>(AbilitySourceObject.Get());
}
const UPhysicalMaterial* FLyraGameplayEffectContext::GetPhysicalMaterial() const
{
if (const FHitResult* HitResultPtr = GetHitResult())
{
return HitResultPtr->PhysMaterial.Get();
}
return nullptr;
}