更新技能背包占用

This commit is contained in:
997146918 2025-07-21 09:22:17 +08:00
parent f5db40d884
commit 2c30f24aad
8 changed files with 74 additions and 12 deletions

View File

@ -125,7 +125,7 @@ struct FSkillData: public FTableRowBase
FGameplayTag SkillTag; FGameplayTag SkillTag;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "背包占用")) UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "背包占用"))
int32 WeightLimit; FIntPoint SkillWeight;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能效果组")) UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能效果组"))
TArray<FSkillEffectData> SkillEffects; TArray<FSkillEffectData> SkillEffects;

View File

@ -22,17 +22,69 @@ TStatId USkillManager::GetStatId() const
return Super::GetStatID(); return Super::GetStatID();
} }
void USkillManager::InitPawns(TArray<APawnWithSkill*> Pawns) void USkillManager::AddPawn(class APawnWithSkill* Pawn, FIntPoint BagSize)
{ {
this->SkillPawns = Pawns; PawnInfo.Add(Pawn, BagSize);
TMap<FIntPoint, bool> 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<APawnWithSkill*> Pawns)
// {
// this->SkillPawns = Pawns;
// }
USkill* USkillManager::AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos)
{ {
USkill* skill = NewObject<USkill>(this); TMap<FIntPoint, bool>* states = PawnBagState.Find(Pawn);
skill->InitSkill(Pawn, this, data); FIntPoint BagSize = *PawnInfo.Find(Pawn);
Skills.Add(skill); bool bAddAble = true;
return skill; 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<USkill>(this);
skill->InitSkill(Pawn, this, data);
Skills.Add(skill);
return skill;
}
}
}
return nullptr;
} }
@ -44,7 +96,12 @@ void USkillManager::RemoveSkill(USkill* Skill)
TArray<APawnWithSkill*> USkillManager::GetAllPawns() TArray<APawnWithSkill*> USkillManager::GetAllPawns()
{ {
return SkillPawns; TArray<APawnWithSkill*> Pawns;
for (auto info: PawnInfo)
{
Pawns.Add(info.Key);
}
return Pawns;
} }
TArray<class USkill*> USkillManager::GetSkillsByOwner(APawnWithSkill* Pawn) TArray<class USkill*> USkillManager::GetSkillsByOwner(APawnWithSkill* Pawn)

View File

@ -20,10 +20,13 @@ public:
virtual bool IsTickable() const override; virtual bool IsTickable() const override;
virtual TStatId GetStatId() const override; virtual TStatId GetStatId() const override;
// UFUNCTION(BlueprintCallable)
// void InitPawns(TArray<APawnWithSkill*> Pawns);
UFUNCTION(BlueprintCallable) UFUNCTION(BlueprintCallable)
void InitPawns(TArray<APawnWithSkill*> Pawns); void AddPawn(class APawnWithSkill* Pawn, FIntPoint BagSize);
UFUNCTION(BlueprintCallable) UFUNCTION(BlueprintCallable)
USkill* CreateSkill(FSkillData data, APawnWithSkill* Pawn); USkill* AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos);
UFUNCTION(BlueprintCallable) UFUNCTION(BlueprintCallable)
@ -41,7 +44,9 @@ protected:
UPROPERTY(BlueprintReadWrite) UPROPERTY(BlueprintReadWrite)
TArray<class USkill *> Skills; TArray<class USkill *> Skills;
UPROPERTY(BlueprintReadWrite) UPROPERTY(BlueprintReadWrite)
TArray<class APawnWithSkill *> SkillPawns; TMap<class APawnWithSkill*, FIntPoint> PawnInfo;
UPROPERTY(BlueprintReadWrite) UPROPERTY(BlueprintReadWrite)
bool bGameEnd = false; bool bGameEnd = false;
TMap<APawnWithSkill*, TMap<FIntPoint, bool>> PawnBagState;
}; };