#pragma once #include "CoreMinimal.h" #include "AttributeSet.h" #include "AbilitySystemComponent.h" #include "CogSampleFunctionLibrary_Gameplay.h" #include "CogSampleAttributeSet_Health.generated.h" UCLASS() class UCogSampleAttributeSet_Health : public UAttributeSet { GENERATED_BODY() public: friend struct FCogSampleDamageStatics; UCogSampleAttributeSet_Health(); ATTRIBUTE_ACCESSORS(UCogSampleAttributeSet_Health, Health); ATTRIBUTE_ACCESSORS(UCogSampleAttributeSet_Health, MaxHealth); ATTRIBUTE_ACCESSORS(UCogSampleAttributeSet_Health, HealthRegen) ATTRIBUTE_ACCESSORS(UCogSampleAttributeSet_Health, DamageResistance) UFUNCTION() virtual void OnRep_Health(const FGameplayAttributeData& PrevHealth); UFUNCTION() virtual void OnRep_MaxHealth(const FGameplayAttributeData& PrevMaxHealth); UFUNCTION() virtual void OnRep_HealthRegen(const FGameplayAttributeData& PrevHealthRegen); UFUNCTION() virtual void OnRep_DamageResistance(const FGameplayAttributeData& PrevDamageResistance); virtual void GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const override; virtual void PreAttributeChange(const FGameplayAttribute& Attribute, float& NewValue) override; virtual void PostAttributeChange(const FGameplayAttribute& Attribute, float OldValue, float NewValue) override; virtual void PreAttributeBaseChange(const FGameplayAttribute& Attribute, float& NewValue) const override; virtual void PostGameplayEffectExecute(const FGameplayEffectModCallbackData& Data) override; private: UPROPERTY(BlueprintReadOnly, Category = "Health", ReplicatedUsing = OnRep_Health, meta = (AllowPrivateAccess = "true")) FGameplayAttributeData Health; UPROPERTY(BlueprintReadOnly, Category = "Health", ReplicatedUsing = OnRep_MaxHealth, meta = (AllowPrivateAccess = "true")) FGameplayAttributeData MaxHealth; UPROPERTY(BlueprintReadOnly, Category = "Health", ReplicatedUsing = OnRep_HealthRegen, meta = (AllowPrivateAccess = "true")) FGameplayAttributeData HealthRegen; UPROPERTY(BlueprintReadOnly, Category = "Health", ReplicatedUsing = OnRep_DamageResistance, meta = (AllowPrivateAccess = "true")) FGameplayAttributeData DamageResistance; void ClampAttributes(const FGameplayAttribute& Attribute, float& NewValue) const; bool bOutOfHealth = false; };