Files
PHY/Source/PHY/Public/AbilitySystem/Attributes/PHYElementAttributeSet.h
2026-04-26 01:30:00 +08:00

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);
};