完善光环类技能的触发

This commit is contained in:
997146918 2025-09-03 17:23:01 +08:00
parent 3189d06477
commit 4ea0f2943d
6 changed files with 97 additions and 6 deletions

View File

@ -90,9 +90,7 @@ UENUM(BlueprintType)
enum class EAuraTriggerTarget: uint8
{
Self UMETA(DisplayName = "自身"),
Enemy UMETA(DisplayName = "对方"),
SelfAllItems UMETA(DisplayName = "我方全部装备"),
EnemyAllItems UMETA(DisplayName = "对方全部装备"),
Enemy UMETA(DisplayName = "对方")
};
@ -155,10 +153,10 @@ struct FAuraTriggerConfig
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "触发目标"))
EAuraTriggerTarget Target = EAuraTriggerTarget::Self;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "百分比值 (0-100)", EditConditionHides,
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "百分比值 (0-1)", EditConditionHides,
EditCondition = "Condition == EAuraTriggerCondition::HealthBelowPercent || Condition == EAuraTriggerCondition::HealthAbovePercent",
ClampMin = 0, ClampMax = 100))
float PercentageValue = 50.0f;
ClampMin = 0, ClampMax = 1))
float PercentageValue = 0.5f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "数量值", EditConditionHides,
EditCondition = "Condition == EAuraTriggerCondition::EquipmentCountNotMoreThan || Condition == EAuraTriggerCondition::EquipmentCountNotLessThan",

View File

@ -155,6 +155,17 @@ void USkill::ExecuteSkill()
OnSkillExecute.Broadcast(SkillData->SkillName.ToString());
}
void USkill::CancelSkill()
{
FSkillContext context;
context.OwnerSkill = this;
context.SkillManager = SkillManager;
for (auto Effect: SkillEffects)
{
Effect->Cancel(context);
}
}
FString USkill::GetSkillName() const
{
return SkillData->SkillName.ToString();;

View File

@ -26,6 +26,7 @@ public:
void InitSkillTrigger();
void TickSkill(float deltaTime);
void ExecuteSkill();
void CancelSkill();
FString GetSkillName() const;
class APawnWithSkill* GetOwner();

View File

@ -41,6 +41,10 @@ void USkillEffect::Execute(const FSkillContext& context)
, *( GetSkillEffectDes()));
}
void USkillEffect::Cancel(const FSkillContext& context)
{
}
void USkillEffect::EffectEnded(const FSkillContext& context)
{
}

View File

@ -18,6 +18,7 @@ class USkillEffect : public UObject
public:
void InitSkillEffect(class USkill* skill, FSkillEffectData data);
virtual void Execute(const FSkillContext& context) ;
virtual void Cancel(const FSkillContext& context) ;
virtual void EffectEnded(const FSkillContext& context);
TArray<UObject*> GetApplyTargets(const FSkillContext& context);

View File

@ -177,5 +177,81 @@ void USkillTrigger::InitPassiveConditionTriggers()
void USkillTrigger::InitAuraConditionTriggers()
{
switch (AuraTriggerConfig.Condition)
{
case EAuraTriggerCondition::None:
{
OnTrigger();
break;
}
case EAuraTriggerCondition::HealthBelowPercent:
{
//目标pawn
APawnWithSkill* TargetPawn = AuraTriggerConfig.Target == EAuraTriggerTarget::Self ? SkillContext.OwnerSkill->GetOwner():
SkillContext.SkillManager->GetEnemyPawn( SkillContext.OwnerSkill->GetOwner());
//初始检测
if (!this->bTriggered &&
TargetPawn->CurrentEndurance /TargetPawn ->MaxEndurance > this->AuraTriggerConfig.PercentageValue)
{
OnTrigger();
}
//动态检测
TargetPawn->OnReceiveDamage.AddLambda([this, TargetPawn]()
{
if (!this->bTriggered &&
TargetPawn->CurrentEndurance /TargetPawn ->MaxEndurance < this->AuraTriggerConfig.PercentageValue)
{
OnTrigger();
}
});
break;
}
case EAuraTriggerCondition::HealthAbovePercent:
{
//目标pawn
APawnWithSkill* TargetPawn = AuraTriggerConfig.Target == EAuraTriggerTarget::Self ? SkillContext.OwnerSkill->GetOwner():
SkillContext.SkillManager->GetEnemyPawn( SkillContext.OwnerSkill->GetOwner());
//初始检测
if (!this->bTriggered &&
TargetPawn->CurrentEndurance /TargetPawn ->MaxEndurance > this->AuraTriggerConfig.PercentageValue)
{
OnTrigger();
}
//动态检测
TargetPawn->OnEnduranceChanged.AddLambda([this, TargetPawn]()
{
if (!this->bTriggered &&
TargetPawn->CurrentEndurance /TargetPawn ->MaxEndurance > this->AuraTriggerConfig.PercentageValue)
{
OnTrigger();
}
});
break;
}
case EAuraTriggerCondition::EquipmentCountNotMoreThan:
{
//目标pawn
APawnWithSkill* TargetPawn = AuraTriggerConfig.Target == EAuraTriggerTarget::Self ? SkillContext.OwnerSkill->GetOwner():
SkillContext.SkillManager->GetEnemyPawn( SkillContext.OwnerSkill->GetOwner());
if (!this->bTriggered && SkillContext.SkillManager->GetSkillsByOwner(TargetPawn).Num() <= this->AuraTriggerConfig.CountValue)
{
OnTrigger();
}
}
case EAuraTriggerCondition::EquipmentCountNotLessThan:
{
//目标pawn
APawnWithSkill* TargetPawn = AuraTriggerConfig.Target == EAuraTriggerTarget::Self ? SkillContext.OwnerSkill->GetOwner():
SkillContext.SkillManager->GetEnemyPawn( SkillContext.OwnerSkill->GetOwner());
if (!this->bTriggered && SkillContext.SkillManager->GetSkillsByOwner(TargetPawn).Num() >= this->AuraTriggerConfig.CountValue)
{
OnTrigger();
}
}
default:
break;
}
}