189 lines
7.0 KiB
C++
189 lines
7.0 KiB
C++
// Copyright Echo Devgroup
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "AttributeSet.h"
|
|
#include "AbilitySystemComponent.h"
|
|
#include "AuraAttributeSet.generated.h"
|
|
|
|
#define ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \
|
|
GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \
|
|
GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \
|
|
GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \
|
|
GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName)
|
|
|
|
DECLARE_DELEGATE_RetVal(FGameplayAttribute, FAttributeSignature);
|
|
|
|
USTRUCT()
|
|
struct FEffectProperties
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
FEffectProperties(){}
|
|
|
|
FGameplayEffectContextHandle EffectContextHandle;
|
|
|
|
//Source Variables
|
|
UPROPERTY()
|
|
UAbilitySystemComponent* SourceASC = nullptr;
|
|
UPROPERTY()
|
|
AActor* SourceAvatarActor = nullptr;
|
|
UPROPERTY()
|
|
AController* SourceController = nullptr;
|
|
UPROPERTY()
|
|
ACharacter* SourceCharacter = nullptr;
|
|
//Target Variables
|
|
UPROPERTY()
|
|
UAbilitySystemComponent* TargetASC = nullptr;
|
|
UPROPERTY()
|
|
AActor* TargetAvatarActor = nullptr;
|
|
UPROPERTY()
|
|
AController* TargetController = nullptr;
|
|
UPROPERTY()
|
|
ACharacter* TargetCharacter = nullptr;
|
|
};
|
|
|
|
template<class T>
|
|
using TStaticFuncPtr = typename TBaseStaticDelegateInstance<T, FDefaultDelegateUserPolicy>::FFuncPtr;
|
|
|
|
|
|
/**
|
|
*
|
|
*/
|
|
UCLASS()
|
|
class AURA_API UAuraAttributeSet : public UAttributeSet
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
UAuraAttributeSet();
|
|
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
|
|
virtual void PreAttributeChange(const FGameplayAttribute& Attribute, float& NewValue) override;
|
|
virtual void PostGameplayEffectExecute(const struct FGameplayEffectModCallbackData& Data) override;
|
|
|
|
TMap<FGameplayTag, TStaticFuncPtr<FGameplayAttribute()>> TagsToAttributes;
|
|
|
|
/*Create Attributes
|
|
* Vital Attributes
|
|
*/
|
|
//Health
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_Health, Category = "Vital Attributes")
|
|
FGameplayAttributeData Health;
|
|
ATTRIBUTE_ACCESSORS(UAuraAttributeSet,Health);
|
|
UFUNCTION()
|
|
void OnRep_Health(const FGameplayAttributeData& OldHealth) const;
|
|
//Max Health
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_MaxHealth, Category = "Vital Attributes")
|
|
FGameplayAttributeData MaxHealth;
|
|
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, MaxHealth);
|
|
UFUNCTION()
|
|
void OnRep_MaxHealth(const FGameplayAttributeData& OldMaxHealth) const;
|
|
|
|
//Mana
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_Mana, Category = "Vital Attributes")
|
|
FGameplayAttributeData Mana;
|
|
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, Mana);
|
|
UFUNCTION()
|
|
void OnRep_Mana(const FGameplayAttributeData& OldMana) const;
|
|
//Max Mana
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_MaxMana, Category = "Vital Attributes")
|
|
FGameplayAttributeData MaxMana;
|
|
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, MaxMana);
|
|
UFUNCTION()
|
|
void OnRep_MaxMana(const FGameplayAttributeData& OldMaxMana) const;
|
|
|
|
/* Primary Attributes
|
|
* Strength, Intelligence, Resilience,
|
|
*/
|
|
//Strength
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_Strength, Category = "Primary Attributes")
|
|
FGameplayAttributeData Strength;
|
|
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, Strength);
|
|
UFUNCTION()
|
|
void OnRep_Strength(const FGameplayAttributeData& OldStrength) const;
|
|
//Intelligence
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_Intelligence, Category = "Primary Attributes")
|
|
FGameplayAttributeData Intelligence;
|
|
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, Intelligence);
|
|
UFUNCTION()
|
|
void OnRep_Intelligence(const FGameplayAttributeData& OldIntelligence) const;
|
|
//Resilience
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_Resilience, Category = "Primary Attributes")
|
|
FGameplayAttributeData Resilience;
|
|
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, Resilience);
|
|
UFUNCTION()
|
|
void OnRep_Resilience(const FGameplayAttributeData& OldResilience) const;
|
|
//Vigor
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_Vigor, Category = "Primary Attributes")
|
|
FGameplayAttributeData Vigor;
|
|
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, Vigor);
|
|
UFUNCTION()
|
|
void OnRep_Vigor(const FGameplayAttributeData& OldVigor) const;
|
|
|
|
/*Secondary Stats
|
|
*Armor, Armor Penetration, Block Chance, Critical Hit Chance, Critical Hit Damage, Critical Hit Resistance, Health Regeneration, Mana Regeneration
|
|
*/
|
|
//Armor
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_Armor, Category = "Secondary Attributes")
|
|
FGameplayAttributeData Armor;
|
|
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, Armor);
|
|
UFUNCTION()
|
|
void OnRep_Armor(const FGameplayAttributeData& OldArmor) const;
|
|
//ArmorPenetration
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_ArmorPenetration, Category = "Secondary Attributes")
|
|
FGameplayAttributeData ArmorPenetration;
|
|
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, ArmorPenetration);
|
|
UFUNCTION()
|
|
void OnRep_ArmorPenetration(const FGameplayAttributeData& OldArmorPenetration) const;
|
|
//BlockChance
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_BlockChance, Category = "Secondary Attributes")
|
|
FGameplayAttributeData BlockChance;
|
|
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, BlockChance);
|
|
UFUNCTION()
|
|
void OnRep_BlockChance(const FGameplayAttributeData& OldBlockChance) const;
|
|
//CriticalHitChance
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_CriticalHitChance, Category = "Secondary Attributes")
|
|
FGameplayAttributeData CriticalHitChance;
|
|
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, CriticalHitChance);
|
|
UFUNCTION()
|
|
void OnRep_CriticalHitChance(const FGameplayAttributeData& OldCriticalHitChance) const;
|
|
//CriticalHitDamage
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_CriticalHitDamage, Category = "Secondary Attributes")
|
|
FGameplayAttributeData CriticalHitDamage;
|
|
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, CriticalHitDamage);
|
|
UFUNCTION()
|
|
void OnRep_CriticalHitDamage(const FGameplayAttributeData& OldCriticalHitDamage) const;
|
|
//CriticalHitResistance
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_CriticalHitResistance, Category = "Secondary Attributes")
|
|
FGameplayAttributeData CriticalHitResistance;
|
|
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, CriticalHitResistance);
|
|
UFUNCTION()
|
|
void OnRep_CriticalHitResistance(const FGameplayAttributeData& OldCriticalHitResistance) const;
|
|
//HealthRegeneration
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_HealthRegeneration, Category = "Secondary Attributes")
|
|
FGameplayAttributeData HealthRegeneration;
|
|
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, HealthRegeneration);
|
|
UFUNCTION()
|
|
void OnRep_HealthRegeneration(const FGameplayAttributeData& OldHealthRegeneration) const;
|
|
//ManaRegeneration
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_ManaRegeneration, Category = "Secondary Attributes")
|
|
FGameplayAttributeData ManaRegeneration;
|
|
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, ManaRegeneration);
|
|
UFUNCTION()
|
|
void OnRep_ManaRegeneration(const FGameplayAttributeData& OldManaRegeneration) const;
|
|
|
|
/*Meta Attributes
|
|
*
|
|
*/
|
|
//incoming damage
|
|
UPROPERTY(BlueprintReadOnly, Category = "Meta Attributes")
|
|
FGameplayAttributeData IncomingDamage;
|
|
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, IncomingDamage);
|
|
|
|
private:
|
|
void SetEffectProperties(const FGameplayEffectModCallbackData& Data, FEffectProperties& Props) const;
|
|
};
|
|
|
|
|