修改当技能耐久度为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",
"Modules":
{
"ProjectFish": "UnrealEditor-ProjectFish.dll",
"ProjectFishEditor": "UnrealEditor-ProjectFishEditor.dll"
"ProjectFish": "UnrealEditor-ProjectFish-0001.dll",
"ProjectFishEditor": "UnrealEditor-ProjectFishEditor-0001.dll"
}
}

View File

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

View File

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

View File

@ -45,133 +45,10 @@ 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()
{

View File

@ -20,7 +20,7 @@ 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);
//virtual void EffectEnded(const FSkillContext& context);
//TArray<UObject*> GetApplyTargets(const FSkillContext& context);
UFUNCTION(BlueprintPure)

View File

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

View File

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

View File

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

View File

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