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 = "技能触发类型")) UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能触发类型"))
ESkillTriggerType triggerType = ESkillTriggerType::ActiveSkill; ESkillTriggerType triggerType = ESkillTriggerType::ActiveSkill;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能耐久度", EditConditionHides, EditCondition = "bActiveSkill")) UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能耐久度", EditConditionHides,EditCondition = "triggerType == ESkillTriggerType::ActiveSkill"))
int32 Endurance; int32 Endurance;
//主动技能属性 //主动技能属性

View File

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

View File

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

View File

@ -4,6 +4,7 @@
#include "SkillManager.h" #include "SkillManager.h"
#include "Skill.h" #include "Skill.h"
#include "ProjectFish/DataAsset/BagConfigAsset.h" #include "ProjectFish/DataAsset/BagConfigAsset.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h"
void USkillManager::Tick(float DeltaTime) void USkillManager::Tick(float DeltaTime)
{ {
@ -42,6 +43,7 @@ void USkillManager::AddBagWithSkills(UBagConfigAsset* Bag, APawnWithSkill* Pawn,
TArray<FIntPoint>& BagPositions) TArray<FIntPoint>& BagPositions)
{ {
FIntPoint BagSize = *PawnInfo.Find(Pawn); FIntPoint BagSize = *PawnInfo.Find(Pawn);
TMap<FIntPoint, int32>* states = PawnBagState.Find(Pawn);
for (auto PlacedSkill: Bag->PlacedSkills) for (auto PlacedSkill: Bag->PlacedSkills)
{ {
USkill* skill = NewObject<USkill>(this); USkill* skill = NewObject<USkill>(this);
@ -49,6 +51,14 @@ void USkillManager::AddBagWithSkills(UBagConfigAsset* Bag, APawnWithSkill* Pawn,
SkillObjects.Add(skill); SkillObjects.Add(skill);
BagPositions.Add(FIntPoint(PlacedSkill.PositionX, PlacedSkill.PositionY)); BagPositions.Add(FIntPoint(PlacedSkill.PositionX, PlacedSkill.PositionY));
Skills.Add(skill); 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; return Result;
} }

View File

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

View File

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