Compare commits

...

2 Commits

Author SHA1 Message Date
2307baf0ca 修改物品触发逻辑bug 2025-09-04 16:44:50 +08:00
c6f31bb217 更新目标对象是物品周围的bug 2025-09-04 16:06:02 +08:00
20 changed files with 43 additions and 17 deletions

View File

@ -47,7 +47,7 @@ public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能触发类型"))
ESkillTriggerType triggerType = ESkillTriggerType::ActiveSkill;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能耐久度", EditConditionHides, EditCondition = "bActiveSkill"))
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能耐久度", EditConditionHides,EditCondition = "triggerType == ESkillTriggerType::ActiveSkill"))
int32 Endurance;
//主动技能属性

View File

@ -57,7 +57,7 @@ enum class ESkillTriggerType: uint8
UENUM(BlueprintType)
enum class EPassiveTriggerCondition: uint8
{
ItemTriggered UMETA(DisplayName = "物品触发"),
ItemTriggered UMETA(DisplayName = "自身或者敌人的物品触发时,激活"),
DealDamage UMETA(DisplayName = "造成伤害"),
SkillDurabilityDecrease UMETA(DisplayName = "物品耐久度减少"),
SkillDurabilityRestore UMETA(DisplayName = "物品耐久度回复"),

View File

@ -40,7 +40,7 @@ void APawnWithSkill::BeginPlay()
{
Super::BeginPlay();
CurrentEndurance = MaxEndurance;
CurrentTenacity += MaxTenacity;
CurrentTenacity = MaxTenacity;
}
// Called every frame

View File

@ -4,6 +4,7 @@
#include "SkillManager.h"
#include "Skill.h"
#include "ProjectFish/DataAsset/BagConfigAsset.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h"
void USkillManager::Tick(float DeltaTime)
{
@ -42,6 +43,7 @@ void USkillManager::AddBagWithSkills(UBagConfigAsset* Bag, APawnWithSkill* Pawn,
TArray<FIntPoint>& BagPositions)
{
FIntPoint BagSize = *PawnInfo.Find(Pawn);
TMap<FIntPoint, int32>* states = PawnBagState.Find(Pawn);
for (auto PlacedSkill: Bag->PlacedSkills)
{
USkill* skill = NewObject<USkill>(this);
@ -49,6 +51,14 @@ void USkillManager::AddBagWithSkills(UBagConfigAsset* Bag, APawnWithSkill* Pawn,
SkillObjects.Add(skill);
BagPositions.Add(FIntPoint(PlacedSkill.PositionX, PlacedSkill.PositionY));
Skills.Add(skill);
//设置占用状态
for (int x = 0; x < Bag->BagShapeAsset->BagWidth; x++)
{
for (int y = 0; y < Bag->BagShapeAsset->BagHeight; y++)
{
states->Add(FIntPoint(x, y) + FIntPoint(x, y), GetSkillIndex(skill));
}
}
}
@ -167,3 +177,5 @@ TArray<USkill*> USkillManager::GetSkillsByType(ESkillType SkillType) const
}
return Result;
}

View File

@ -62,6 +62,7 @@ public:
UFUNCTION(BlueprintPure)
TArray<class USkill*> GetSkillsByType(ESkillType SkillType) const;
protected:
UPROPERTY(BlueprintReadWrite)
TArray<class USkill *> Skills;

View File

@ -44,21 +44,34 @@ void USkillTrigger::InitPassiveConditionTriggers()
case EPassiveTriggerCondition::ItemTriggered:
{
//物品执行时触发
FGuid TriggerSkillID = PassiveTriggerConfig.SpecificSkillID;
if (PassiveTriggerConfig.Target == EPassiveTriggerTarget::SelfSpecificItem)
//FGuid TriggerSkillID = PassiveTriggerConfig.SpecificSkillID;
// if (PassiveTriggerConfig.Target == EPassiveTriggerTarget::SelfSpecificItem)
// {
// //自身
// TArray<USkill*> SpecificSkills = SkillContext.SkillManager->GetSkillsByOwnerAndID(SkillContext.OwnerSkill->GetOwner(), TriggerSkillID);
// for (USkill* Skill : SpecificSkills)
// {
// Skill->OnSkillExecute.AddDynamic(this, &USkillTrigger::OnSkillExecute);
//
// }
// }
// else if (PassiveTriggerConfig.Target == EPassiveTriggerTarget::EnemySpecificItem)
// {
// //敌人
// TArray<USkill*> SpecificSkills = SkillContext.SkillManager->GetSkillsByOwnerAndID(SkillContext.SkillManager->GetEnemyPawn(SkillContext.OwnerSkill->GetOwner()), TriggerSkillID);
// for (USkill* Skill : SpecificSkills)
// {
// Skill->OnSkillExecute.AddDynamic(this, &USkillTrigger::OnSkillExecute);
// }
// }
if (PassiveTriggerConfig.Target ==EPassiveTriggerTarget::Self || PassiveTriggerConfig.Target ==EPassiveTriggerTarget::Enemy)
{
TArray<USkill*> SpecificSkills = SkillContext.SkillManager->GetSkillsByOwnerAndID(SkillContext.OwnerSkill->GetOwner(), TriggerSkillID);
for (USkill* Skill : SpecificSkills)
{
Skill->OnSkillExecute.AddDynamic(this, &USkillTrigger::OnSkillExecute);
}
}
else if (PassiveTriggerConfig.Target == EPassiveTriggerTarget::EnemySpecificItem)
{
TArray<USkill*> SpecificSkills = SkillContext.SkillManager->GetSkillsByOwnerAndID(SkillContext.SkillManager->GetEnemyPawn(SkillContext.OwnerSkill->GetOwner()), TriggerSkillID);
for (USkill* Skill : SpecificSkills)
APawnWithSkill* TargetPawn = PassiveTriggerConfig.Target ==EPassiveTriggerTarget::Self ? SkillContext.OwnerSkill->GetOwner():
SkillContext.SkillManager->GetEnemyPawn(SkillContext.OwnerSkill->GetOwner());
TArray<USkill*> PawnSkills = SkillContext.SkillManager->GetSkillsByOwner(TargetPawn);
for (USkill* Skill : PawnSkills)
{
if (Skill != SkillContext.OwnerSkill)
Skill->OnSkillExecute.AddDynamic(this, &USkillTrigger::OnSkillExecute);
}
}