修改当技能耐久度为0的时候 UI正常进度条刷新显示

This commit is contained in:
997146918 2025-09-16 14:18:15 +08:00
parent 812cc728af
commit 1cd0265ee7
13 changed files with 55 additions and 166 deletions

View File

@ -2,7 +2,7 @@
"BuildId": "37670630", "BuildId": "37670630",
"Modules": "Modules":
{ {
"ProjectFish": "UnrealEditor-ProjectFish.dll", "ProjectFish": "UnrealEditor-ProjectFish-0001.dll",
"ProjectFishEditor": "UnrealEditor-ProjectFishEditor.dll" "ProjectFishEditor": "UnrealEditor-ProjectFishEditor-0001.dll"
} }
} }

View File

@ -115,11 +115,16 @@ void USkill::InitSkillTrigger()
bool USkill::SkillTickAble() bool USkill::SkillTickAble()
{ {
//剩余次数无限制或者拥有者没有被韧性眩晕 //剩余次数无限制 或者 剩余次数大于0次并且拥有者没有被韧性眩晕
return (RemainingEndurance >0 || RemainingEndurance == -1 ) return (RemainingEndurance == -1 || RemainingEndurance >= 0 )
&& Owner->CurrentTenacity > 0 && SkillData->triggerType == ESkillTriggerType::ActiveSkill; && Owner->CurrentTenacity > 0 && SkillData->triggerType == ESkillTriggerType::ActiveSkill;
} }
bool USkill::SkillExecuteAble()
{
return (RemainingEndurance == -1 || RemainingEndurance > 0 ) && RemainingTime <= 0;
}
FIntPoint USkill::GetSkillSize() FIntPoint USkill::GetSkillSize()
{ {
return GetSkillSizeValue(SkillData->SkillSize); return GetSkillSizeValue(SkillData->SkillSize);
@ -128,21 +133,25 @@ FIntPoint USkill::GetSkillSize()
void USkill::TickSkill(float deltaTime) void USkill::TickSkill(float deltaTime)
{ {
if (SkillTickAble()) if (SkillTickAble())
{
RemainingTime -= deltaTime * SkillData->Speed; RemainingTime -= deltaTime * SkillData->Speed;
if (RemainingTime <= 0 ) RemainingTime = FMath::Max(RemainingTime, 0);
}
if (SkillExecuteAble() )
{ {
ExecuteSkill(); ExecuteSkill();
} }
if (RemainingEndurance == 0) // if (RemainingEndurance == 0)
{ // {
FSkillContext context; // FSkillContext context;
context.OwnerSkill = this; // context.OwnerSkill = this;
context.SkillManager = SkillManager; // context.SkillManager = SkillManager;
for (auto Effect: SkillEffects) // for (auto Effect: SkillEffects)
{ // {
Effect->EffectEnded(context); // Effect->EffectEnded(context);
} // }
} // }
} }
void USkill::ExecuteSkill() void USkill::ExecuteSkill()

View File

@ -53,6 +53,9 @@ public:
UFUNCTION(BlueprintPure) UFUNCTION(BlueprintPure)
bool SkillTickAble(); bool SkillTickAble();
UFUNCTION(BlueprintPure)
bool SkillExecuteAble();
UFUNCTION(BlueprintPure) UFUNCTION(BlueprintPure)
FIntPoint GetSkillSize(); FIntPoint GetSkillSize();

View File

@ -45,134 +45,11 @@ void USkillEffect::Cancel(const FSkillContext& context)
{ {
} }
void USkillEffect::EffectEnded(const FSkillContext& context) // void USkillEffect::EffectEnded(const FSkillContext& context)
{
}
// TArray<UObject*> USkillEffect::GetApplyTargets(const FSkillContext& context)
// { // {
// TArray<UObject*> result;
// switch (effectData.SkillSelecter.SelecterType)
// {
// case EEffectTargetType::Target:
// {
// //目标是敌人
// result.Add(context.SkillManager->GetEnemyPawn(OwnerSkill->GetOwner()));
// break;;
// }
// case EEffectTargetType::Self:
// {
// //目标是敌人
// result.Add(OwnerSkill->GetOwner());
// break;;
// }
// case EEffectTargetType::TargetSkill:
// {
// TArray<USkill*> Skills = context.SkillManager->GetSkillsByOwner(context.SkillManager->GetEnemyPawn(OwnerSkill->GetOwner()));
// if (effectData.SkillSelecter.bAll)
// {
// result.Append(Skills);
// }
// else
// {
// int TargetNum = FMath::Min(effectData.SkillSelecter.MaxEffectTargetNum, Skills.Num());
// for (int i = 0; i < TargetNum; i++)
// {
// int randomIndex = FMath::RandRange(0, Skills.Num() - 1);
// result.Add(Skills[randomIndex]);
// Skills.RemoveAt(randomIndex);
// }
// }
// break;;
// }
// case EEffectTargetType::SelfSkill:
// {
// TArray<USkill*> Skills = context.SkillManager->GetSkillsByOwner(OwnerSkill->GetOwner());
// if (effectData.SkillSelecter.bAll)
// {
// result.Append(Skills);
// }
// else
// {
// int TargetNum = FMath::Min(effectData.SkillSelecter.MaxEffectTargetNum, Skills.Num());
// for (int i = 0; i < TargetNum; i++)
// {
// int randomIndex = FMath::RandRange(0, Skills.Num() - 1);
// result.Add(Skills[randomIndex]);
// Skills.RemoveAt(randomIndex);
// }
// }
// break;;
// }
// case EEffectTargetType::AroundSkill:
// {
// TArray<USkill*> aroundSkills = context.SkillManager->GetSkillsAround(context.OwnerSkill);
// for (auto skill: aroundSkills)
// {
// result.Add(skill);
// }
// break;
// }
// case EEffectTargetType::SelfSkillType:
// {
// //筛选指定类型的技能
// TArray<USkill*> Skills = context.SkillManager->GetSkillsByOwner(OwnerSkill->GetOwner());
// for (int i = Skills.Num() - 1; i >= 0; i--)
// {
// if (!Skills[i]->GetSkillData()->SkillTypes.Contains(effectData.SkillSelecter.SkillType))
// {
// Skills.RemoveAt(i);
// }
// }
//
// if (effectData.SkillSelecter.bAll)
// {
// result.Append(Skills);
// }
// else
// {
// int TargetNum = FMath::Min(effectData.SkillSelecter.MaxEffectTargetNum, Skills.Num());
// for (int i = 0; i < TargetNum; i++)
// {
// int randomIndex = FMath::RandRange(0, Skills.Num() - 1);
// result.Add(Skills[randomIndex]);
// Skills.RemoveAt(randomIndex);
// }
// }
// break;
// }
// case EEffectTargetType::TargetSkillType:
// {
// //筛选指定类型的技能
// TArray<USkill*> Skills = context.SkillManager->GetSkillsByOwner(context.SkillManager->GetEnemyPawn(OwnerSkill->GetOwner()));
// for (int i = Skills.Num() - 1; i >= 0; i--)
// {
// if (!Skills[i]->GetSkillData()->SkillTypes.Contains(effectData.SkillSelecter.SkillType))
// {
// Skills.RemoveAt(i);
// }
// }
//
// if (effectData.SkillSelecter.bAll)
// {
// result.Append(Skills);
// }
// else
// {
// int TargetNum = FMath::Min(effectData.SkillSelecter.MaxEffectTargetNum, Skills.Num());
// for (int i = 0; i < TargetNum; i++)
// {
// int randomIndex = FMath::RandRange(0, Skills.Num() - 1);
// result.Add(Skills[randomIndex]);
// Skills.RemoveAt(randomIndex);
// }
// }
// break;
// }
// }
// return result;
// } // }
FString USkillEffect::GetSkillEffectDes() FString USkillEffect::GetSkillEffectDes()
{ {
return FString(); return FString();

View File

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

View File

@ -24,24 +24,24 @@ void USkillEffect_DamageReduce::Execute(const FSkillContext& context)
} }
} }
void USkillEffect_DamageReduce::EffectEnded(const FSkillContext& context) // void USkillEffect_DamageReduce::EffectEnded(const FSkillContext& context)
{ // {
Super::EffectEnded(context); // Super::EffectEnded(context);
TArray<UObject*> targets = context.SkillManager->GetTargetsBySelector(context.OwnerSkill, effectData.SkillSelecter); // TArray<UObject*> targets = context.SkillManager->GetTargetsBySelector(context.OwnerSkill, effectData.SkillSelecter);
for (auto target: targets) // for (auto target: targets)
{ // {
if (!target->GetClass()->IsChildOf(APawnWithSkill::StaticClass())) // if (!target->GetClass()->IsChildOf(APawnWithSkill::StaticClass()))
{ // {
UE_LOG(LogTemp, Error, TEXT("skill %s apply target is not a pawn "), *(OwnerSkill->GetSkillName())); // UE_LOG(LogTemp, Error, TEXT("skill %s apply target is not a pawn "), *(OwnerSkill->GetSkillName()));
} // }
else // else
{ // {
//恢复目标护盾值 // //恢复目标护盾值
APawnWithSkill* OwnerPawn = Cast<APawnWithSkill>(target); // APawnWithSkill* OwnerPawn = Cast<APawnWithSkill>(target);
OwnerPawn->SetDamageReduce(0); // OwnerPawn->SetDamageReduce(0);
} // }
} // }
} // }
FString USkillEffect_DamageReduce::GetSkillEffectDes() FString USkillEffect_DamageReduce::GetSkillEffectDes()
{ {

View File

@ -15,6 +15,6 @@ class PROJECTFISH_API USkillEffect_DamageReduce : public USkillEffect
GENERATED_BODY() GENERATED_BODY()
public: public:
void Execute(const FSkillContext& context) override; void Execute(const FSkillContext& context) override;
void EffectEnded(const FSkillContext& context) override; //void EffectEnded(const FSkillContext& context) override;
FString GetSkillEffectDes() override; FString GetSkillEffectDes() override;
}; };

View File

@ -36,11 +36,11 @@ void USkillEffect_ModifySpeed::Execute(const FSkillContext& context)
} }
} }
void USkillEffect_ModifySpeed::EffectEnded(const FSkillContext& context) // void USkillEffect_ModifySpeed::EffectEnded(const FSkillContext& context)
{ // {
Super::EffectEnded(context); // Super::EffectEnded(context);
//GetWorld()->GetTimerManager().ClearTimer(TimerHandle); // //GetWorld()->GetTimerManager().ClearTimer(TimerHandle);
} // }
FString USkillEffect_ModifySpeed::GetSkillEffectDes() FString USkillEffect_ModifySpeed::GetSkillEffectDes()
{ {

View File

@ -17,7 +17,7 @@ class PROJECTFISH_API USkillEffect_ModifySpeed : public USkillEffect
GENERATED_BODY() GENERATED_BODY()
public: public:
void Execute(const FSkillContext& context) override; void Execute(const FSkillContext& context) override;
void EffectEnded(const FSkillContext& context) override; //void EffectEnded(const FSkillContext& context) override;
FString GetSkillEffectDes() override; FString GetSkillEffectDes() override;
private: private:
FTimerHandle TimerHandle; FTimerHandle TimerHandle;