更新技能背包占用
This commit is contained in:
parent
f5db40d884
commit
2c30f24aad
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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;
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user