diff --git a/ProjectFish/Source/ProjectFish/Definations.h b/ProjectFish/Source/ProjectFish/Definations.h index 803f6ea..f952eda 100644 --- a/ProjectFish/Source/ProjectFish/Definations.h +++ b/ProjectFish/Source/ProjectFish/Definations.h @@ -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", diff --git a/ProjectFish/Source/ProjectFish/Skill/Skill.cpp b/ProjectFish/Source/ProjectFish/Skill/Skill.cpp index 3e2ab49..33dc16b 100644 --- a/ProjectFish/Source/ProjectFish/Skill/Skill.cpp +++ b/ProjectFish/Source/ProjectFish/Skill/Skill.cpp @@ -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();; diff --git a/ProjectFish/Source/ProjectFish/Skill/Skill.h b/ProjectFish/Source/ProjectFish/Skill/Skill.h index 3ce284f..85c1bb5 100644 --- a/ProjectFish/Source/ProjectFish/Skill/Skill.h +++ b/ProjectFish/Source/ProjectFish/Skill/Skill.h @@ -26,6 +26,7 @@ public: void InitSkillTrigger(); void TickSkill(float deltaTime); void ExecuteSkill(); + void CancelSkill(); FString GetSkillName() const; class APawnWithSkill* GetOwner(); diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillEffect.cpp b/ProjectFish/Source/ProjectFish/Skill/SkillEffect.cpp index c4183a2..a7b6e68 100644 --- a/ProjectFish/Source/ProjectFish/Skill/SkillEffect.cpp +++ b/ProjectFish/Source/ProjectFish/Skill/SkillEffect.cpp @@ -41,6 +41,10 @@ void USkillEffect::Execute(const FSkillContext& context) , *( GetSkillEffectDes())); } +void USkillEffect::Cancel(const FSkillContext& context) +{ +} + void USkillEffect::EffectEnded(const FSkillContext& context) { } diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillEffect.h b/ProjectFish/Source/ProjectFish/Skill/SkillEffect.h index a4297af..0244598 100644 --- a/ProjectFish/Source/ProjectFish/Skill/SkillEffect.h +++ b/ProjectFish/Source/ProjectFish/Skill/SkillEffect.h @@ -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 GetApplyTargets(const FSkillContext& context); diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillTrigger.cpp b/ProjectFish/Source/ProjectFish/Skill/SkillTrigger.cpp index 18b2651..6c8d8e2 100644 --- a/ProjectFish/Source/ProjectFish/Skill/SkillTrigger.cpp +++ b/ProjectFish/Source/ProjectFish/Skill/SkillTrigger.cpp @@ -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; + } }