// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "AttributeSet.h" #include "Delegates/Delegate.h" #include "HAL/PlatformMisc.h" #include "UObject/UObjectGlobals.h" #include "LyraAttributeSet.generated.h" class AActor; class ULyraAbilitySystemComponent; class UObject; class UWorld; struct FGameplayEffectSpec; /** * This macro defines a set of helper functions for accessing and initializing attributes. * * The following example of the macro: * ATTRIBUTE_ACCESSORS(ULyraHealthSet, Health) * will create the following functions: * static FGameplayAttribute GetHealthAttribute(); * float GetHealth() const; * void SetHealth(float NewVal); * void InitHealth(float NewVal); */ #define ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \ GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \ GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \ GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \ GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName) // Delegate used to broadcast attribute events. DECLARE_MULTICAST_DELEGATE_FourParams(FLyraAttributeEvent, AActor* /*EffectInstigator*/, AActor* /*EffectCauser*/, const FGameplayEffectSpec& /*EffectSpec*/, float /*EffectMagnitude*/); /** * ULyraAttributeSet * * Base attribute set class for the project. */ UCLASS() class LYRAGAME_API ULyraAttributeSet : public UAttributeSet { GENERATED_BODY() public: ULyraAttributeSet(); UWorld* GetWorld() const override; ULyraAbilitySystemComponent* GetLyraAbilitySystemComponent() const; };