diff --git a/ProjectFish/Content/DataTable/PawnSkills.uasset b/ProjectFish/Content/DataTable/PawnSkills.uasset index 9b50995..6160351 100644 Binary files a/ProjectFish/Content/DataTable/PawnSkills.uasset and b/ProjectFish/Content/DataTable/PawnSkills.uasset differ diff --git a/ProjectFish/Content/Gameplay/BP_Dabaza_GameMode.uasset b/ProjectFish/Content/Gameplay/BP_Dabaza_GameMode.uasset index 3dff77c..4bf6bd3 100644 Binary files a/ProjectFish/Content/Gameplay/BP_Dabaza_GameMode.uasset and b/ProjectFish/Content/Gameplay/BP_Dabaza_GameMode.uasset differ diff --git a/ProjectFish/Content/UI/WBP_SkillContainer.uasset b/ProjectFish/Content/UI/WBP_SkillContainer.uasset index 78c1989..f29507a 100644 Binary files a/ProjectFish/Content/UI/WBP_SkillContainer.uasset and b/ProjectFish/Content/UI/WBP_SkillContainer.uasset differ diff --git a/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/8/VO/DV1AKH9EUYVRMVYP3DYZVH.uasset b/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/8/VO/DV1AKH9EUYVRMVYP3DYZVH.uasset index d03bfa1..6ef9b08 100644 Binary files a/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/8/VO/DV1AKH9EUYVRMVYP3DYZVH.uasset and b/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/8/VO/DV1AKH9EUYVRMVYP3DYZVH.uasset differ diff --git a/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/9/GX/KCVNFI6L6PBCQ844W3A926.uasset b/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/9/GX/KCVNFI6L6PBCQ844W3A926.uasset index 91159a7..530c619 100644 Binary files a/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/9/GX/KCVNFI6L6PBCQ844W3A926.uasset and b/ProjectFish/Content/__ExternalActors__/Maps/Dabaza/9/GX/KCVNFI6L6PBCQ844W3A926.uasset differ diff --git a/ProjectFish/Source/ProjectFish/Definations.h b/ProjectFish/Source/ProjectFish/Definations.h index f27c5f8..2525c0a 100644 --- a/ProjectFish/Source/ProjectFish/Definations.h +++ b/ProjectFish/Source/ProjectFish/Definations.h @@ -125,7 +125,7 @@ struct FSkillData: public FTableRowBase FGameplayTag SkillTag; UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "背包占用")) - int32 WeightLimit; + FIntPoint SkillWeight; UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能效果组")) TArray SkillEffects; diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillManager.cpp b/ProjectFish/Source/ProjectFish/Skill/SkillManager.cpp index 7639ee5..5bf5e68 100644 --- a/ProjectFish/Source/ProjectFish/Skill/SkillManager.cpp +++ b/ProjectFish/Source/ProjectFish/Skill/SkillManager.cpp @@ -22,17 +22,69 @@ TStatId USkillManager::GetStatId() const return Super::GetStatID(); } -void USkillManager::InitPawns(TArray Pawns) +void USkillManager::AddPawn(class APawnWithSkill* Pawn, FIntPoint BagSize) { - this->SkillPawns = Pawns; + PawnInfo.Add(Pawn, BagSize); + TMap states; + for (int y = 0; y < BagSize.Y; y++) + { + for (int x = 0; x < BagSize.X; x++) + { + states.Add(FIntPoint(x, y), false); + + } + } + PawnBagState.Add(Pawn, states); } -USkill* USkillManager::CreateSkill(FSkillData data, APawnWithSkill* Pawn) +// void USkillManager::InitPawns(TArray Pawns) +// { +// this->SkillPawns = Pawns; +// } + +USkill* USkillManager::AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos) { - USkill* skill = NewObject(this); - skill->InitSkill(Pawn, this, data); - Skills.Add(skill); - return skill; + 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; + for (int skillX = 0; skillX < data.SkillWeight.X; skillX++) + { + 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) + { + bAddAble = false; + } + } + } + //满足条件 + if (bAddAble) + { + //设置占用状态 + 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); + } + } + BagPos = FIntPoint(x, y); + USkill* skill = NewObject(this); + skill->InitSkill(Pawn, this, data); + Skills.Add(skill); + return skill; + } + } + } + + return nullptr; } @@ -44,7 +96,12 @@ void USkillManager::RemoveSkill(USkill* Skill) TArray USkillManager::GetAllPawns() { - return SkillPawns; + TArray Pawns; + for (auto info: PawnInfo) + { + Pawns.Add(info.Key); + } + return Pawns; } TArray USkillManager::GetSkillsByOwner(APawnWithSkill* Pawn) diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillManager.h b/ProjectFish/Source/ProjectFish/Skill/SkillManager.h index 5d40c37..14cdb5f 100644 --- a/ProjectFish/Source/ProjectFish/Skill/SkillManager.h +++ b/ProjectFish/Source/ProjectFish/Skill/SkillManager.h @@ -20,10 +20,13 @@ public: virtual bool IsTickable() const override; virtual TStatId GetStatId() const override; + // UFUNCTION(BlueprintCallable) + // void InitPawns(TArray Pawns); UFUNCTION(BlueprintCallable) - void InitPawns(TArray Pawns); + void AddPawn(class APawnWithSkill* Pawn, FIntPoint BagSize); + UFUNCTION(BlueprintCallable) - USkill* CreateSkill(FSkillData data, APawnWithSkill* Pawn); + USkill* AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos); UFUNCTION(BlueprintCallable) @@ -41,7 +44,9 @@ protected: UPROPERTY(BlueprintReadWrite) TArray Skills; UPROPERTY(BlueprintReadWrite) - TArray SkillPawns; + TMap PawnInfo; UPROPERTY(BlueprintReadWrite) bool bGameEnd = false; + + TMap> PawnBagState; };