From 9762d2cb0fee56d03bd532655a385d73d44ff585 Mon Sep 17 00:00:00 2001 From: 997146918 <997146918@qq.com> Date: Mon, 21 Jul 2025 17:59:58 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=20=E6=8A=80=E8=83=BD?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E4=BD=8D=E7=BD=AE=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Content/DataTable/PawnSkills.uasset | Bin 15524 -> 15488 bytes .../Dabaza/8/VO/DV1AKH9EUYVRMVYP3DYZVH.uasset | Bin 6634 -> 6844 bytes .../Dabaza/9/GX/KCVNFI6L6PBCQ844W3A926.uasset | Bin 6425 -> 6425 bytes ProjectFish/Source/ProjectFish/Definations.h | 11 ++-- .../Source/ProjectFish/Skill/Skill.cpp | 8 ++- ProjectFish/Source/ProjectFish/Skill/Skill.h | 6 ++- .../Source/ProjectFish/Skill/SkillEffect.cpp | 49 +++-------------- .../Source/ProjectFish/Skill/SkillManager.cpp | 50 ++++++++++++++---- .../Source/ProjectFish/Skill/SkillManager.h | 8 ++- 9 files changed, 71 insertions(+), 61 deletions(-) diff --git a/ProjectFish/Content/DataTable/PawnSkills.uasset b/ProjectFish/Content/DataTable/PawnSkills.uasset index 11609e3004471e1dc1c9ea0c52ea93d7b3f602a0..02cddfd3764eab84e890afcfab2cd985738ddf7a 100644 GIT binary patch literal 15488 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 literal 15524 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 L5OVW!5ocBapd&OD delta 158 zcmdmE`pS4i9izb0d70A#xS5>$x9OX=ZCk!(>BRTOj1m{Bsa@2ad30xF)@Ha zg7D;p{8E!Wcr}>Pm?jtTYB8M?1&i$94PlBBo6N_T$23O_EHZ;Hgz1wwn90E(!o({H xVs5VBpUNUO0caLe;SA-f8?Ko?b4AO_I9X3VWtzNR#CCFmh#Mov=1Ng#Rsdw_Fg5@H diff --git a/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/9/GX/KCVNFI6L6PBCQ844W3A926.uasset b/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/9/GX/KCVNFI6L6PBCQ844W3A926.uasset index e41ef7562707b94ec4cdbf0e72a51dad2a4a2795..c3e4a5d32c402d0c8e760319cf4d53172dbac275 100644 GIT binary patch delta 29 ncmV+&0OJ3dGMO^4k^vCR58uSRpe99@)Y8F$>PsZEq5*do(Hsrx delta 29 ncmV+&0OJ3dGMO^4k^vANHNZvFYy?B2u->|$Sk%e0q5*dox*H8F diff --git a/ProjectFish/Source/ProjectFish/Definations.h b/ProjectFish/Source/ProjectFish/Definations.h index 531e4e5..f738b35 100644 --- a/ProjectFish/Source/ProjectFish/Definations.h +++ b/ProjectFish/Source/ProjectFish/Definations.h @@ -25,10 +25,11 @@ enum class ESkillTargetType: uint8 { Self UMETA(DisplayName = "自身"), Other UMETA(DisplayName = "对方"), - AdjacentLeft UMETA(DisplayName = "左侧相邻"), - AdjacentRight UMETA(DisplayName = "右侧相邻"), - AllLeft UMETA(DisplayName = "左侧全部"), - AllRight UMETA(DisplayName = "右侧全部"), + Around UMETA(DisplayName = "格子周围") + // AdjacentLeft UMETA(DisplayName = "左侧相邻"), + // AdjacentRight UMETA(DisplayName = "右侧相邻"), + // AllLeft UMETA(DisplayName = "左侧全部"), + // AllRight UMETA(DisplayName = "右侧全部"), }; //随机对象类型 UENUM(BlueprintType) @@ -116,7 +117,7 @@ struct FSkillData: public FTableRowBase FGameplayTag SkillTag; UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "背包占用")) - FIntPoint SkillWeight; + FIntPoint SkillWeight = FIntPoint(1, 1); UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "是否为主动技能")) bool bActiveSkill = true; diff --git a/ProjectFish/Source/ProjectFish/Skill/Skill.cpp b/ProjectFish/Source/ProjectFish/Skill/Skill.cpp index 3f1ed94..94cbd3f 100644 --- a/ProjectFish/Source/ProjectFish/Skill/Skill.cpp +++ b/ProjectFish/Source/ProjectFish/Skill/Skill.cpp @@ -11,11 +11,12 @@ #include "SkillEffects/SkillEffect_ModifySpeed.h" #include "SkillEffects/SkillEffect_SER.h" -void USkill::InitSkill(APawnWithSkill* owner, USkillManager* skillManager, FSkillData skillData) +void USkill::InitSkill(APawnWithSkill* owner, USkillManager* skillManager, FSkillData skillData, FIntPoint BagPos) { this->Owner = owner; this->SkillManager = skillManager; this->SkillData = skillData; + this->BagPosition = BagPos; this->RemainingTime = SkillData.CD; this->RemainingEndurance = SkillData.Endurance; for (auto effectData: skillData.SkillEffects) @@ -113,6 +114,11 @@ FSkillData& USkill::GetSkillData() return SkillData; } +FIntPoint USkill::GetBagPos() +{ + return BagPosition; +} + void USkill::SetSkillData(FSkillData data) { SkillData = data; diff --git a/ProjectFish/Source/ProjectFish/Skill/Skill.h b/ProjectFish/Source/ProjectFish/Skill/Skill.h index 3dfbcb1..1c544d9 100644 --- a/ProjectFish/Source/ProjectFish/Skill/Skill.h +++ b/ProjectFish/Source/ProjectFish/Skill/Skill.h @@ -19,7 +19,7 @@ class PROJECTFISH_API USkill : public UObject { GENERATED_BODY() public: - void InitSkill(class APawnWithSkill* owner, USkillManager* skillManager, FSkillData SkillData); + void InitSkill(class APawnWithSkill* owner, USkillManager* skillManager, FSkillData SkillData, FIntPoint BagPos); void InitSkillTrigger(); void TickSkill(float deltaTime); void ExecuteSkill(); @@ -28,6 +28,7 @@ public: class APawnWithSkill* GetOwner(); FSkillData& GetSkillData(); + FIntPoint GetBagPos(); void SetSkillData( FSkillData SkillData); UFUNCTION(BlueprintCallable) void ApplyRemainingTimeOffset(int timeOffset); @@ -53,6 +54,9 @@ protected: float RemainingTime; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (ToolTip = "剩余耐久度")) int32 RemainingEndurance; + + UPROPERTY(BlueprintReadOnly, EditAnywhere, meta = (ToolTip = "背包位置")) + FIntPoint BagPosition; }; diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillEffect.cpp b/ProjectFish/Source/ProjectFish/Skill/SkillEffect.cpp index 354f363..cab60b8 100644 --- a/ProjectFish/Source/ProjectFish/Skill/SkillEffect.cpp +++ b/ProjectFish/Source/ProjectFish/Skill/SkillEffect.cpp @@ -132,52 +132,15 @@ void USkillEffect::GetEffectTargetsByTargetType(const FSkillContext& context, TA } break; } - case ESkillTargetType::AdjacentLeft: + case ESkillTargetType::Around: + { + //技能左侧的技能 + TArray aroundSkills = context.SkillManager->GetSkillsAround(context.OwnerSkill); + for (auto skill: aroundSkills) { - //技能左侧的技能 - TArray< USkill*> allSkills = context.SkillManager->GetAllSkills(); - int32 index = allSkills.Find(OwnerSkill); - if ((index - 1) >= 0) - { - result.Add(allSkills[index - 1]); - } - break;; - } - case ESkillTargetType::AdjacentRight: - { - //技能右侧的技能 - TArray< USkill*> allSkills = context.SkillManager->GetAllSkills(); - int32 index = allSkills.Find(OwnerSkill); - if ((index + 1) < allSkills.Num()) - { - result.Add(allSkills[index + 1]); + result.Add(skill); } break;; - } - case ESkillTargetType::AllLeft: - { - //所有当前技能左侧的技能 - TArray< USkill*> allSkills = context.SkillManager->GetAllSkills(); - int32 index = allSkills.Find(OwnerSkill); - for (int i = 0; i < index; ++i) - { - if (allSkills[i]->GetOwner() == OwnerSkill->GetOwner()) - result.Add(allSkills[i]); - } - break; - } - - case ESkillTargetType::AllRight: - { - //所有当前技能右侧的技能 - TArray< USkill*> allSkills = context.SkillManager->GetAllSkills(); - int32 index = allSkills.Find(OwnerSkill); - for (int i = index + 1; i < allSkills.Num(); ++i) - { - if (allSkills[i]->GetOwner() == OwnerSkill->GetOwner()) - result.Add(allSkills[i]); - } - break; } } } diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillManager.cpp b/ProjectFish/Source/ProjectFish/Skill/SkillManager.cpp index f97a7b7..5d5f9b6 100644 --- a/ProjectFish/Source/ProjectFish/Skill/SkillManager.cpp +++ b/ProjectFish/Source/ProjectFish/Skill/SkillManager.cpp @@ -25,12 +25,12 @@ TStatId USkillManager::GetStatId() const void USkillManager::AddPawn(class APawnWithSkill* Pawn, FIntPoint BagSize) { PawnInfo.Add(Pawn, BagSize); - TMap states; + TMap states; for (int y = 0; y < BagSize.Y; y++) { for (int x = 0; x < BagSize.X; x++) { - states.Add(FIntPoint(x, y), false); + states.Add(FIntPoint(x, y), -1); } } @@ -44,12 +44,11 @@ void USkillManager::AddPawn(class APawnWithSkill* Pawn, FIntPoint BagSize) USkill* USkillManager::AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos) { - TMap* states = PawnBagState.Find(Pawn); + TMap* states = PawnBagState.Find(Pawn); FIntPoint BagSize = *PawnInfo.Find(Pawn); bool bAddAble = true; for (int y = 0; y < BagSize.Y; y++) { - bAddAble = true; for (int x = 0; x < BagSize.X; x++) { bAddAble = true; @@ -58,7 +57,7 @@ USkill* USkillManager::AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoin for (int skillY = 0; skillY < data.SkillWeight.Y; skillY++) { if (states->Find(FIntPoint(x, y) + FIntPoint(skillX, skillY)) == nullptr - || *states->Find(FIntPoint(x, y) + FIntPoint(skillX, skillY)) == true) + || *states->Find(FIntPoint(x, y) + FIntPoint(skillX, skillY)) != -1) { bAddAble = false; } @@ -67,18 +66,19 @@ USkill* USkillManager::AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoin //满足条件 if (bAddAble) { + BagPos = FIntPoint(x, y); + USkill* skill = NewObject(this); + skill->InitSkill(Pawn, this, data, BagPos); + Skills.Add(skill); //设置占用状态 for (int xTemp = 0; xTemp < data.SkillWeight.X; xTemp++) { for (int yTemp = 0; yTemp < data.SkillWeight.Y; yTemp++) { - states->Add(FIntPoint(xTemp, yTemp) + FIntPoint(x, y), true); + states->Add(FIntPoint(xTemp, yTemp) + FIntPoint(x, y), GetSkillIndex(skill)); } } - BagPos = FIntPoint(x, y); - USkill* skill = NewObject(this); - skill->InitSkill(Pawn, this, data); - Skills.Add(skill); + return skill; } } @@ -106,6 +106,36 @@ class USkill* USkillManager::GetSkillByTag(FGameplayTag Tag) return nullptr; } +int32 USkillManager::GetSkillIndex(USkill* Skill) +{ + return Skills.Find(Skill); +} + +TArray USkillManager::GetSkillsAround(USkill* TargetSkill) +{ + TArray aroundSkills; + TMap *BagStates = PawnBagState.Find(TargetSkill->GetOwner()); + FIntPoint BagPos = TargetSkill->GetBagPos(); + FIntPoint BagSize = *PawnInfo.Find(TargetSkill->GetOwner()); + FSkillData data = TargetSkill->GetSkillData(); + int beginX = FMath::Max(0, BagPos.X- 1); + int endX = FMath::Min(BagSize.X - 1, BagPos.X + 1); + int beginY = FMath::Max(0, BagPos.Y - 1); + int endY = FMath::Min(BagSize.Y - 1, BagPos.Y + 1); + for (int x = beginX; x <= endX; x++) + { + for (int y = beginY; y <= endY; y++) + { + + int32 skillIndex = *BagStates->Find(FIntPoint(x, y)); + if (skillIndex != -1 && skillIndex != GetSkillIndex(TargetSkill) && !aroundSkills.Contains(Skills[skillIndex])) + { + aroundSkills.Add(Skills[skillIndex]); + } + } + } + return aroundSkills; +} void USkillManager::RemoveSkill(USkill* Skill) { diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillManager.h b/ProjectFish/Source/ProjectFish/Skill/SkillManager.h index 647407e..edffd5d 100644 --- a/ProjectFish/Source/ProjectFish/Skill/SkillManager.h +++ b/ProjectFish/Source/ProjectFish/Skill/SkillManager.h @@ -32,7 +32,11 @@ public: UFUNCTION(BlueprintPure) class USkill* GetSkillByTag(FGameplayTag Tag); + + int32 GetSkillIndex(USkill* Skill); + UFUNCTION(BlueprintPure) + TArray GetSkillsAround(USkill *TargetSkill); UFUNCTION(BlueprintCallable) void RemoveSkill(class USkill *Skill); @@ -53,5 +57,7 @@ protected: UPROPERTY(BlueprintReadWrite) bool bGameEnd = false; - TMap> PawnBagState; + TMap> PawnBagState; }; + +