156 lines
7.4 KiB
C++
156 lines
7.4 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "AbilitySystem/Attributes/PHYAttributeSet.h"
|
|
#include "PHYElementAttributeSet.generated.h"
|
|
|
|
class UPHYCoreAttributeSet;
|
|
|
|
/**
|
|
* @brief PHY 元素进攻与防御属性集。
|
|
*/
|
|
UCLASS(BlueprintType)
|
|
class PHY_API UPHYElementAttributeSet : public UAttributeSet
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
/** @brief 构造元素属性并按默认基础属性推导首期数值。 */
|
|
UPHYElementAttributeSet();
|
|
|
|
/** @brief 注册属性复制。 */
|
|
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
|
|
|
|
/** @brief 限制元素比例属性范围。 */
|
|
virtual void PreAttributeChange(const FGameplayAttribute& Attribute, float& NewValue) override;
|
|
|
|
/** @brief 按默认配置中的基础属性计算并写入元素属性。 */
|
|
void InitializeFromConfiguredCoreDefaults();
|
|
|
|
/** @brief 按指定基础属性集计算并写入元素属性。 */
|
|
void InitializeFromCoreAttributes(const UPHYCoreAttributeSet* CoreAttributes);
|
|
|
|
/** @brief 火元素伤害加成。 */
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing=OnRep_FireDamageBonus, Category="PHY|Attributes|Element")
|
|
FGameplayAttributeData FireDamageBonus;
|
|
PHY_ATTRIBUTE_ACCESSORS(UPHYElementAttributeSet, FireDamageBonus);
|
|
|
|
/** @brief 水元素伤害加成。 */
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing=OnRep_WaterDamageBonus, Category="PHY|Attributes|Element")
|
|
FGameplayAttributeData WaterDamageBonus;
|
|
PHY_ATTRIBUTE_ACCESSORS(UPHYElementAttributeSet, WaterDamageBonus);
|
|
|
|
/** @brief 冰元素伤害加成。 */
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing=OnRep_IceDamageBonus, Category="PHY|Attributes|Element")
|
|
FGameplayAttributeData IceDamageBonus;
|
|
PHY_ATTRIBUTE_ACCESSORS(UPHYElementAttributeSet, IceDamageBonus);
|
|
|
|
/** @brief 雷元素伤害加成。 */
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing=OnRep_LightningDamageBonus, Category="PHY|Attributes|Element")
|
|
FGameplayAttributeData LightningDamageBonus;
|
|
PHY_ATTRIBUTE_ACCESSORS(UPHYElementAttributeSet, LightningDamageBonus);
|
|
|
|
/** @brief 地元素伤害加成。 */
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing=OnRep_EarthDamageBonus, Category="PHY|Attributes|Element")
|
|
FGameplayAttributeData EarthDamageBonus;
|
|
PHY_ATTRIBUTE_ACCESSORS(UPHYElementAttributeSet, EarthDamageBonus);
|
|
|
|
/** @brief 风元素伤害加成。 */
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing=OnRep_WindDamageBonus, Category="PHY|Attributes|Element")
|
|
FGameplayAttributeData WindDamageBonus;
|
|
PHY_ATTRIBUTE_ACCESSORS(UPHYElementAttributeSet, WindDamageBonus);
|
|
|
|
/** @brief 光元素伤害加成。 */
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing=OnRep_LightDamageBonus, Category="PHY|Attributes|Element")
|
|
FGameplayAttributeData LightDamageBonus;
|
|
PHY_ATTRIBUTE_ACCESSORS(UPHYElementAttributeSet, LightDamageBonus);
|
|
|
|
/** @brief 暗元素伤害加成。 */
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing=OnRep_DarkDamageBonus, Category="PHY|Attributes|Element")
|
|
FGameplayAttributeData DarkDamageBonus;
|
|
PHY_ATTRIBUTE_ACCESSORS(UPHYElementAttributeSet, DarkDamageBonus);
|
|
|
|
/** @brief 火元素抗性。 */
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing=OnRep_FireResistance, Category="PHY|Attributes|Element")
|
|
FGameplayAttributeData FireResistance;
|
|
PHY_ATTRIBUTE_ACCESSORS(UPHYElementAttributeSet, FireResistance);
|
|
|
|
/** @brief 水元素抗性。 */
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing=OnRep_WaterResistance, Category="PHY|Attributes|Element")
|
|
FGameplayAttributeData WaterResistance;
|
|
PHY_ATTRIBUTE_ACCESSORS(UPHYElementAttributeSet, WaterResistance);
|
|
|
|
/** @brief 冰元素抗性。 */
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing=OnRep_IceResistance, Category="PHY|Attributes|Element")
|
|
FGameplayAttributeData IceResistance;
|
|
PHY_ATTRIBUTE_ACCESSORS(UPHYElementAttributeSet, IceResistance);
|
|
|
|
/** @brief 雷元素抗性。 */
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing=OnRep_LightningResistance, Category="PHY|Attributes|Element")
|
|
FGameplayAttributeData LightningResistance;
|
|
PHY_ATTRIBUTE_ACCESSORS(UPHYElementAttributeSet, LightningResistance);
|
|
|
|
/** @brief 地元素抗性。 */
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing=OnRep_EarthResistance, Category="PHY|Attributes|Element")
|
|
FGameplayAttributeData EarthResistance;
|
|
PHY_ATTRIBUTE_ACCESSORS(UPHYElementAttributeSet, EarthResistance);
|
|
|
|
/** @brief 风元素抗性。 */
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing=OnRep_WindResistance, Category="PHY|Attributes|Element")
|
|
FGameplayAttributeData WindResistance;
|
|
PHY_ATTRIBUTE_ACCESSORS(UPHYElementAttributeSet, WindResistance);
|
|
|
|
/** @brief 光元素抗性。 */
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing=OnRep_LightResistance, Category="PHY|Attributes|Element")
|
|
FGameplayAttributeData LightResistance;
|
|
PHY_ATTRIBUTE_ACCESSORS(UPHYElementAttributeSet, LightResistance);
|
|
|
|
/** @brief 暗元素抗性。 */
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing=OnRep_DarkResistance, Category="PHY|Attributes|Element")
|
|
FGameplayAttributeData DarkResistance;
|
|
PHY_ATTRIBUTE_ACCESSORS(UPHYElementAttributeSet, DarkResistance);
|
|
|
|
/** @brief 通用元素穿透,首期不按元素拆分。 */
|
|
UPROPERTY(BlueprintReadOnly, ReplicatedUsing=OnRep_ElementPenetration, Category="PHY|Attributes|Element")
|
|
FGameplayAttributeData ElementPenetration;
|
|
PHY_ATTRIBUTE_ACCESSORS(UPHYElementAttributeSet, ElementPenetration);
|
|
|
|
protected:
|
|
/** @brief 复制火元素伤害加成变化。 */
|
|
UFUNCTION() void OnRep_FireDamageBonus(const FGameplayAttributeData& OldValue);
|
|
/** @brief 复制水元素伤害加成变化。 */
|
|
UFUNCTION() void OnRep_WaterDamageBonus(const FGameplayAttributeData& OldValue);
|
|
/** @brief 复制冰元素伤害加成变化。 */
|
|
UFUNCTION() void OnRep_IceDamageBonus(const FGameplayAttributeData& OldValue);
|
|
/** @brief 复制雷元素伤害加成变化。 */
|
|
UFUNCTION() void OnRep_LightningDamageBonus(const FGameplayAttributeData& OldValue);
|
|
/** @brief 复制地元素伤害加成变化。 */
|
|
UFUNCTION() void OnRep_EarthDamageBonus(const FGameplayAttributeData& OldValue);
|
|
/** @brief 复制风元素伤害加成变化。 */
|
|
UFUNCTION() void OnRep_WindDamageBonus(const FGameplayAttributeData& OldValue);
|
|
/** @brief 复制光元素伤害加成变化。 */
|
|
UFUNCTION() void OnRep_LightDamageBonus(const FGameplayAttributeData& OldValue);
|
|
/** @brief 复制暗元素伤害加成变化。 */
|
|
UFUNCTION() void OnRep_DarkDamageBonus(const FGameplayAttributeData& OldValue);
|
|
/** @brief 复制火元素抗性变化。 */
|
|
UFUNCTION() void OnRep_FireResistance(const FGameplayAttributeData& OldValue);
|
|
/** @brief 复制水元素抗性变化。 */
|
|
UFUNCTION() void OnRep_WaterResistance(const FGameplayAttributeData& OldValue);
|
|
/** @brief 复制冰元素抗性变化。 */
|
|
UFUNCTION() void OnRep_IceResistance(const FGameplayAttributeData& OldValue);
|
|
/** @brief 复制雷元素抗性变化。 */
|
|
UFUNCTION() void OnRep_LightningResistance(const FGameplayAttributeData& OldValue);
|
|
/** @brief 复制地元素抗性变化。 */
|
|
UFUNCTION() void OnRep_EarthResistance(const FGameplayAttributeData& OldValue);
|
|
/** @brief 复制风元素抗性变化。 */
|
|
UFUNCTION() void OnRep_WindResistance(const FGameplayAttributeData& OldValue);
|
|
/** @brief 复制光元素抗性变化。 */
|
|
UFUNCTION() void OnRep_LightResistance(const FGameplayAttributeData& OldValue);
|
|
/** @brief 复制暗元素抗性变化。 */
|
|
UFUNCTION() void OnRep_DarkResistance(const FGameplayAttributeData& OldValue);
|
|
/** @brief 复制通用元素穿透变化。 */
|
|
UFUNCTION() void OnRep_ElementPenetration(const FGameplayAttributeData& OldValue);
|
|
};
|