// Copyright Epic Games, Inc. All Rights Reserved. #include "LyraGameplayEffectContext.h" #include "AbilitySystem/LyraAbilitySourceInterface.h" #include "Engine/HitResult.h" #include "PhysicalMaterials/PhysicalMaterial.h" #include "Templates/Casts.h" #include "UObject/Object.h" #if UE_WITH_IRIS #include "Iris/ReplicationState/PropertyNetSerializerInfoRegistry.h" #include "Serialization/GameplayEffectContextNetSerializer.h" #endif 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; } #if UE_WITH_IRIS namespace UE::Net { // Forward to FGameplayEffectContextNetSerializer // Note: If FLyraGameplayEffectContext::NetSerialize() is modified, a custom NetSerializesr must be implemented as the current fallback will no longer be sufficient. UE_NET_IMPLEMENT_FORWARDING_NETSERIALIZER_AND_REGISTRY_DELEGATES(LyraGameplayEffectContext, FGameplayEffectContextNetSerializer); } #endif void FLyraGameplayEffectContext::SetAbilitySource(const ILyraAbilitySourceInterface* InObject, float InSourceLevel) { AbilitySourceObject = MakeWeakObjectPtr(Cast(InObject)); //SourceLevel = InSourceLevel; } const ILyraAbilitySourceInterface* FLyraGameplayEffectContext::GetAbilitySource() const { return Cast(AbilitySourceObject.Get()); } const UPhysicalMaterial* FLyraGameplayEffectContext::GetPhysicalMaterial() const { if (const FHitResult* HitResultPtr = GetHitResult()) { return HitResultPtr->PhysMaterial.Get(); } return nullptr; }