// © 2024 Long Ly. All rights reserved. Any unauthorized use, reproduction, or distribution of this trademark is strictly prohibited and may result in legal action. #pragma once #include "GameplayEffectTypes.h" #include "OLSGameplayEffectContext.generated.h" USTRUCT() struct FOLSGameplayEffectContext : public FGameplayEffectContext { GENERATED_BODY() FOLSGameplayEffectContext() : FGameplayEffectContext() { } FOLSGameplayEffectContext(AActor* InInstigator, AActor* InEffectCauser) : FGameplayEffectContext(InInstigator, InEffectCauser) { } /** Returns the wrapped FLyraGameplayEffectContext from the handle, or nullptr if it doesn't exist or is the wrong type */ static OLS_API FOLSGameplayEffectContext* ExtractEffectContext(struct FGameplayEffectContextHandle handle); /** Sets the object used as the ability source */ void SetAbilitySource(const class IOLSAbilitySourceInterface* object, float sourceLevel); /** Returns the ability source interface associated with the source object. Only valid on the authority. */ const IOLSAbilitySourceInterface* GetAbilitySource() const; virtual FGameplayEffectContext* Duplicate() const override; virtual UScriptStruct* GetScriptStruct() const override; /** Overridden to serialize new fields */ virtual bool NetSerialize(FArchive& Ar, class UPackageMap* Map, bool& bOutSuccess) override; /** Returns the physical material from the hit result if there is one */ const UPhysicalMaterial* GetPhysicalMaterial() const; public: /** ID to allow the identification of multiple bullets that were part of the same cartridge */ UPROPERTY() int32 CartridgeID = -1; protected: /** Ability Source object (should implement ILyraAbilitySourceInterface). NOT replicated currently */ UPROPERTY() TWeakObjectPtr AbilitySourceObject; }; template<> struct TStructOpsTypeTraits : public TStructOpsTypeTraitsBase2 { enum { WithNetSerializer = true, WithCopy = true }; };