diff --git a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0001.exp b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0001.exp index 223dba1..e159705 100644 Binary files a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0001.exp and b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0001.exp differ diff --git a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0008.exp b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0008.exp index c1b6f26..14431bf 100644 Binary files a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0008.exp and b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0008.exp differ diff --git a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0009.exp b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0009.exp index 0440764..18b3a94 100644 Binary files a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0009.exp and b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0009.exp differ diff --git a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0010.exp b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0010.exp index 2894fc5..c9c1cf3 100644 Binary files a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0010.exp and b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0010.exp differ diff --git a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0011.exp b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0011.exp index 4d2c822..172c058 100644 Binary files a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0011.exp and b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish-0011.exp differ diff --git a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish.exp b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish.exp index ab96b6b..9f92a9c 100644 Binary files a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish.exp and b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish.exp differ diff --git a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish.pdb b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish.pdb index 28e741c..e4ee2e9 100644 Binary files a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish.pdb and b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish.pdb differ diff --git a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor-0008.exp b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor-0008.exp index c477d90..2c3617c 100644 Binary files a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor-0008.exp and b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor-0008.exp differ diff --git a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor-0009.exp b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor-0009.exp index c6a4509..6697b4f 100644 Binary files a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor-0009.exp and b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor-0009.exp differ diff --git a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor-0010.exp b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor-0010.exp index 895ce1f..d4d179f 100644 Binary files a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor-0010.exp and b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor-0010.exp differ diff --git a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor-0011.exp b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor-0011.exp index 89eb10d..2c713f1 100644 Binary files a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor-0011.exp and b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor-0011.exp differ diff --git a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor.pdb b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor.pdb index fd5bfc9..85b4ce1 100644 Binary files a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor.pdb and b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor.pdb differ diff --git a/ProjectFish/Content/FishingRodSkills/UFRS_TriggerBySKill.uasset b/ProjectFish/Content/FishingRodSkills/UFRS_TriggerBySKill.uasset index 79e3397..fe0956e 100644 Binary files a/ProjectFish/Content/FishingRodSkills/UFRS_TriggerBySKill.uasset and b/ProjectFish/Content/FishingRodSkills/UFRS_TriggerBySKill.uasset differ diff --git a/ProjectFish/Content/Gameplay/BP_Dabaza_GameMode.uasset b/ProjectFish/Content/Gameplay/BP_Dabaza_GameMode.uasset index 4034fe0..e084436 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/SkillTrigger/SkillTrigger_ByAroundSkill.uasset b/ProjectFish/Content/SkillTrigger/SkillTrigger_ByAroundSkill.uasset index 7bf1505..99b4f00 100644 Binary files a/ProjectFish/Content/SkillTrigger/SkillTrigger_ByAroundSkill.uasset and b/ProjectFish/Content/SkillTrigger/SkillTrigger_ByAroundSkill.uasset differ diff --git a/ProjectFish/Content/SkillTrigger/SkillTrigger_ByTag.uasset b/ProjectFish/Content/SkillTrigger/SkillTrigger_ByTag.uasset index ba5844a..53e9ffe 100644 Binary files a/ProjectFish/Content/SkillTrigger/SkillTrigger_ByTag.uasset and b/ProjectFish/Content/SkillTrigger/SkillTrigger_ByTag.uasset differ diff --git a/ProjectFish/Content/UI/WBP_SkillCard.uasset b/ProjectFish/Content/UI/WBP_SkillCard.uasset index 8bf5777..86dde04 100644 Binary files a/ProjectFish/Content/UI/WBP_SkillCard.uasset and b/ProjectFish/Content/UI/WBP_SkillCard.uasset differ diff --git a/ProjectFish/Content/UI/WBP_SkillCell.uasset b/ProjectFish/Content/UI/WBP_SkillCell.uasset new file mode 100644 index 0000000..132679b Binary files /dev/null and b/ProjectFish/Content/UI/WBP_SkillCell.uasset differ diff --git a/ProjectFish/Content/UI/WBP_SkillContainer.uasset b/ProjectFish/Content/UI/WBP_SkillContainer.uasset index 188c100..7a3395f 100644 Binary files a/ProjectFish/Content/UI/WBP_SkillContainer.uasset and b/ProjectFish/Content/UI/WBP_SkillContainer.uasset differ diff --git a/ProjectFish/Content/UI/WBP_SkillLock.uasset b/ProjectFish/Content/UI/WBP_SkillLock.uasset deleted file mode 100644 index d4b250f..0000000 Binary files a/ProjectFish/Content/UI/WBP_SkillLock.uasset and /dev/null differ diff --git a/ProjectFish/ProjectFish.sln.DotSettings.user b/ProjectFish/ProjectFish.sln.DotSettings.user index 3dea06f..bb3f6f7 100644 --- a/ProjectFish/ProjectFish.sln.DotSettings.user +++ b/ProjectFish/ProjectFish.sln.DotSettings.user @@ -1,4 +1,5 @@  ForceIncluded ForceIncluded - ForceIncluded \ No newline at end of file + ForceIncluded + ForceIncluded \ No newline at end of file diff --git a/ProjectFish/Source/ProjectFish/DataAsset/BagShapeAsset.h b/ProjectFish/Source/ProjectFish/DataAsset/BagShapeAsset.h index 54752b3..999e376 100644 --- a/ProjectFish/Source/ProjectFish/DataAsset/BagShapeAsset.h +++ b/ProjectFish/Source/ProjectFish/DataAsset/BagShapeAsset.h @@ -33,7 +33,7 @@ struct FBagSlot /** * */ -UCLASS() +UCLASS(BlueprintType) class PROJECTFISH_API UBagShapeAsset : public UDataAsset { GENERATED_BODY() diff --git a/ProjectFish/Source/ProjectFish/DataAsset/SkillAsset.h b/ProjectFish/Source/ProjectFish/DataAsset/SkillAsset.h index dbb3bcc..ddd433e 100644 --- a/ProjectFish/Source/ProjectFish/DataAsset/SkillAsset.h +++ b/ProjectFish/Source/ProjectFish/DataAsset/SkillAsset.h @@ -12,7 +12,7 @@ /** * */ -UCLASS() +UCLASS(BlueprintType) class PROJECTFISH_API USkillAsset : public UDataAsset { GENERATED_BODY() diff --git a/ProjectFish/Source/ProjectFish/Skill/Skill.cpp b/ProjectFish/Source/ProjectFish/Skill/Skill.cpp index 76ace1e..183fabf 100644 --- a/ProjectFish/Source/ProjectFish/Skill/Skill.cpp +++ b/ProjectFish/Source/ProjectFish/Skill/Skill.cpp @@ -14,15 +14,68 @@ #include "SkillEffects/SkillEffect_ModifySpeed.h" #include "SkillEffects/SkillEffect_SER.h" -void USkill::InitSkill(APawnWithSkill* owner, USkillManager* skillManager, FSkillData skillData, FIntPoint BagPos) +// 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) +// { +// USkillEffect* skillEffect = nullptr ; +// switch (effectData.EffectType) +// { +// case ESkillEffectType::Damage: +// skillEffect = NewObject(this, USkillEffect_Damage::StaticClass()); +// break; +// case ESkillEffectType::Heal: +// skillEffect = NewObject(this, USkillEffect_Heal::StaticClass()); +// break; +// case ESkillEffectType::ModifyCooldown: +// skillEffect = NewObject(this, USkillEffect_ModifyCD::StaticClass()); +// break; +// case ESkillEffectType::Charge: +// skillEffect = NewObject(this, USkillEffect_Charge::StaticClass()); +// break; +// case ESkillEffectType::ModifySpeed: +// skillEffect = NewObject(this, USkillEffect_ModifySpeed::StaticClass()); +// break; +// case ESkillEffectType::SkillEnduranceRestore: +// skillEffect = NewObject(this, USkillEffect_SER::StaticClass()); +// break; +// case ESkillEffectType::EnhanceFishRod: +// skillEffect = NewObject(this, USkillEffect_EnhanceFishRod::StaticClass()); +// break; +// case ESkillEffectType::EnhanceSkill: +// skillEffect = NewObject(this, USkillEffect_EnhanceSkill::StaticClass()); +// break; +// case ESkillEffectType::DamageReduce: +// skillEffect = NewObject(this, USkillEffect_DamageReduce::StaticClass()); +// break; +// default: +// const UEnum* EnumPtr = StaticEnum(); +// UE_LOG(LogTemp, Error, TEXT("没有配置 %s类型的Skill Effect"), *EnumPtr->GetNameStringByValue(static_cast(effectData.EffectType))) +// } +// if (IsValid(skillEffect)) +// { +// skillEffect->InitSkillEffect(this, effectData); +// this->SkillEffects.Add(skillEffect); +// } +// +// } +// } + +void USkill::InitSkill(class APawnWithSkill* owner, USkillManager* skillManager, const FPlacedSkillInfo& PlacedSkill) { 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) + this->SkillData = PlacedSkill.SkillAsset; + this->BagPosition = FIntPoint(PlacedSkill.PositionX, PlacedSkill.PositionY); + this->RemainingTime = SkillData->CD; + this->RemainingEndurance = SkillData->Endurance; + for (auto effectData: SkillData->SkillEffects) { USkillEffect* skillEffect = nullptr ; switch (effectData.EffectType) @@ -55,8 +108,8 @@ void USkill::InitSkill(APawnWithSkill* owner, USkillManager* skillManager, FSkil skillEffect = NewObject(this, USkillEffect_DamageReduce::StaticClass()); break; default: - const UEnum* EnumPtr = StaticEnum(); - UE_LOG(LogTemp, Error, TEXT("没有配置 %s类型的Skill Effect"), *EnumPtr->GetNameStringByValue(static_cast(effectData.EffectType))) + const UEnum* EnumPtr = StaticEnum(); + UE_LOG(LogTemp, Error, TEXT("没有配置 %s类型的Skill Effect"), *EnumPtr->GetNameStringByValue(static_cast(effectData.EffectType))) } if (IsValid(skillEffect)) { @@ -69,11 +122,11 @@ void USkill::InitSkill(APawnWithSkill* owner, USkillManager* skillManager, FSkil void USkill::InitSkillTrigger() { - if (!SkillData.bActiveSkill) + if (!SkillData->bActiveSkill) { - if (SkillData.SkillTrigger) + if (SkillData->SkillTrigger) { - USkillTrigger* SkillTrigger = NewObject(this, SkillData.SkillTrigger); + USkillTrigger* SkillTrigger = NewObject(this, SkillData->SkillTrigger); FSkillContext context; context.OwnerSkill = this; context.SkillManager = SkillManager; @@ -91,13 +144,18 @@ void USkill::InitSkillTrigger() bool USkill::SkillTickAble() { //剩余次数无限制或者拥有者没有被韧性眩晕 - return (RemainingEndurance >0 || RemainingEndurance == -1 ) && Owner->CurrentTenacity > 0 && SkillData.bActiveSkill; + return (RemainingEndurance >0 || RemainingEndurance == -1 ) && Owner->CurrentTenacity > 0 && SkillData->bActiveSkill; +} + +FIntPoint USkill::GetSkillSize() +{ + return GetSkillSizeValue(SkillData->SkillSize); } void USkill::TickSkill(float deltaTime) { if (SkillTickAble()) - RemainingTime -= deltaTime * SkillData.Speed; + RemainingTime -= deltaTime * SkillData->Speed; if (RemainingTime <= 0 ) { ExecuteSkill(); @@ -126,16 +184,16 @@ void USkill::ExecuteSkill() { Effect->Execute(context); } - RemainingTime = SkillData.CD; - OnSkillExecute.Broadcast(SkillData.SkillName.ToString()); + RemainingTime = SkillData->CD; + OnSkillExecute.Broadcast(SkillData->SkillName.ToString()); } FString USkill::GetSkillName() const { - return SkillData.SkillName.ToString();; + return SkillData->SkillName.ToString();; } -FSkillData& USkill::GetSkillData() +TObjectPtr USkill::GetSkillData() { return SkillData; } @@ -145,7 +203,7 @@ FIntPoint USkill::GetBagPos() return BagPosition; } -void USkill::SetSkillData(FSkillData data) +void USkill::SetSkillData(TObjectPtr data) { SkillData = data; OnSkillUpdate.Broadcast(); @@ -158,8 +216,8 @@ void USkill::ApplyRemainingTimeOffset(int timeOffset) void USkill::ApplyRemainingRemainingEnduranceOffset(int Offset) { - if (SkillData.Endurance != -1) - this->RemainingEndurance = FMath::Max(this->RemainingEndurance + Offset, SkillData.Endurance); + if (SkillData->Endurance != -1) + this->RemainingEndurance = FMath::Max(this->RemainingEndurance + Offset, SkillData->Endurance); } class APawnWithSkill* USkill::GetOwner() diff --git a/ProjectFish/Source/ProjectFish/Skill/Skill.h b/ProjectFish/Source/ProjectFish/Skill/Skill.h index 0c7705d..efb1227 100644 --- a/ProjectFish/Source/ProjectFish/Skill/Skill.h +++ b/ProjectFish/Source/ProjectFish/Skill/Skill.h @@ -6,6 +6,7 @@ #include "SkillEffect.h" #include "ProjectFish/Definations.h" +#include "ProjectFish/DataAsset/BagConfigAsset.h" #include "UObject/Object.h" #include "Skill.generated.h" @@ -19,7 +20,8 @@ class PROJECTFISH_API USkill : public UObject { GENERATED_BODY() public: - void InitSkill(class APawnWithSkill* owner, USkillManager* skillManager, FSkillData SkillData, FIntPoint BagPos); + //void InitSkill(class APawnWithSkill* owner, USkillManager* skillManager, FSkillData SkillData, FIntPoint BagPos); + void InitSkill(class APawnWithSkill* owner, USkillManager* skillManager, const FPlacedSkillInfo& PlacedSkill); void InitSkillTrigger(); void TickSkill(float deltaTime); void ExecuteSkill(); @@ -27,20 +29,23 @@ public: FString GetSkillName() const; class APawnWithSkill* GetOwner(); - FSkillData& GetSkillData(); + TObjectPtr GetSkillData(); TArray GetAllSkillEffects() { return SkillEffects; } FIntPoint GetBagPos(); - void SetSkillData( FSkillData SkillData); + void SetSkillData( TObjectPtr SkillData); UFUNCTION(BlueprintCallable) void ApplyRemainingTimeOffset(int timeOffset); void ApplyRemainingRemainingEnduranceOffset(int Offset); UFUNCTION(BlueprintPure) bool SkillTickAble(); + + UFUNCTION(BlueprintPure) + FIntPoint GetSkillSize(); protected: UPROPERTY(BlueprintAssignable) FSkillUpdate OnSkillUpdate; @@ -48,7 +53,7 @@ protected: FSkillExecute OnSkillExecute; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (ToolTip = "技能效果")) - FSkillData SkillData; + TObjectPtr< USkillAsset> SkillData; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (ToolTip = "技能效果")) USkillManager* SkillManager; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (ToolTip = "技能效果")) diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillEffect.cpp b/ProjectFish/Source/ProjectFish/Skill/SkillEffect.cpp index b895bf8..c9233fc 100644 --- a/ProjectFish/Source/ProjectFish/Skill/SkillEffect.cpp +++ b/ProjectFish/Source/ProjectFish/Skill/SkillEffect.cpp @@ -27,7 +27,7 @@ void USkillEffect::Execute(const FSkillContext& context) } else { - strTargets += (Cast(target))->GetSkillData().SkillName.ToString() + "|" ; + strTargets += (Cast(target))->GetSkillData()->SkillName.ToString() + "|" ; } } @@ -35,7 +35,7 @@ void USkillEffect::Execute(const FSkillContext& context) FString type = EnumPtr->GetNameStringByValue(static_cast(effectData.EffectType)) ; UE_LOG(LogTemp, Warning, TEXT("技能:%s 拥有者: %s 目标: %s 效果: %s") - , *OwnerSkill->GetSkillData().SkillName.ToString() + , *OwnerSkill->GetSkillData()->SkillName.ToString() ,*OwnerSkill->GetOwner()->GetActorNameOrLabel() ,*strTargets , *( GetSkillEffectDes())); @@ -62,7 +62,7 @@ TArray USkillEffect::GetApplyTargets(const FSkillContext& context) for (auto skill: context.SkillManager->GetAllSkills()) { - if (effectData.SkillSelecter.ApplySkillTags.HasTag(skill->GetSkillData().SkillTag)) + if (effectData.SkillSelecter.ApplySkillTags.HasTag(skill->GetSkillData()->SkillTag)) { result.Add(skill); } diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillEffects/SkillEffect_ModifyCD.cpp b/ProjectFish/Source/ProjectFish/Skill/SkillEffects/SkillEffect_ModifyCD.cpp index e2eea7b..5d6e83a 100644 --- a/ProjectFish/Source/ProjectFish/Skill/SkillEffects/SkillEffect_ModifyCD.cpp +++ b/ProjectFish/Source/ProjectFish/Skill/SkillEffects/SkillEffect_ModifyCD.cpp @@ -21,7 +21,7 @@ void USkillEffect_ModifyCD::Execute(const FSkillContext& context) { //修改技能的冷却时间 USkill* skill = Cast(target); - skill->GetSkillData().CD = FMath::Max(1, skill->GetSkillData().CD + effectData.EffectValue); + skill->GetSkillData()->CD = FMath::Max(1, skill->GetSkillData()->CD + effectData.EffectValue); skill->ApplyRemainingTimeOffset(effectData.EffectValue); } diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillEffects/SkillEffect_ModifySpeed.cpp b/ProjectFish/Source/ProjectFish/Skill/SkillEffects/SkillEffect_ModifySpeed.cpp index f593203..c5df2c7 100644 --- a/ProjectFish/Source/ProjectFish/Skill/SkillEffects/SkillEffect_ModifySpeed.cpp +++ b/ProjectFish/Source/ProjectFish/Skill/SkillEffects/SkillEffect_ModifySpeed.cpp @@ -22,13 +22,13 @@ void USkillEffect_ModifySpeed::Execute(const FSkillContext& context) { //修改技能的冷却倍率 USkill* skill = Cast(target); - skill->GetSkillData().Speed = effectData.EffectValue; + skill->GetSkillData()->Speed = effectData.EffectValue; //延时结束效果 GetWorld()->GetTimerManager().SetTimer(TimerHandle, [&]() { UE_LOG(LogTemp, Log, TEXT("取消CD充能效果!")); - skill->GetSkillData().Speed = 1; + skill->GetSkillData()->Speed = 1; }, UKismetStringLibrary::Conv_StringToInt(effectData.ParamAddition), false); // 单次触发 diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillManager.cpp b/ProjectFish/Source/ProjectFish/Skill/SkillManager.cpp index 5d5f9b6..b56f627 100644 --- a/ProjectFish/Source/ProjectFish/Skill/SkillManager.cpp +++ b/ProjectFish/Source/ProjectFish/Skill/SkillManager.cpp @@ -3,6 +3,7 @@ #include "SkillManager.h" #include "Skill.h" +#include "ProjectFish/DataAsset/BagConfigAsset.h" void USkillManager::Tick(float DeltaTime) { @@ -42,49 +43,64 @@ void USkillManager::AddPawn(class APawnWithSkill* Pawn, FIntPoint BagSize) // this->SkillPawns = Pawns; // } -USkill* USkillManager::AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos) +// USkill* USkillManager::AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos) +// { +// TMap* states = PawnBagState.Find(Pawn); +// FIntPoint BagSize = *PawnInfo.Find(Pawn); +// bool bAddAble = true; +// for (int y = 0; y < BagSize.Y; y++) +// { +// 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)) != -1) +// { +// bAddAble = false; +// } +// } +// } +// //满足条件 +// 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), GetSkillIndex(skill)); +// } +// } +// +// return skill; +// } +// } +// } +// +// return nullptr; +// } + +void USkillManager::AddBagWithSkills(UBagConfigAsset* Bag, APawnWithSkill* Pawn, TArray& SkillObjects, + TArray& BagPositions) { - TMap* states = PawnBagState.Find(Pawn); FIntPoint BagSize = *PawnInfo.Find(Pawn); - bool bAddAble = true; - for (int y = 0; y < BagSize.Y; y++) + for (auto PlacedSkill: Bag->PlacedSkills) { - 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)) != -1) - { - bAddAble = false; - } - } - } - //满足条件 - 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), GetSkillIndex(skill)); - } - } - - return skill; - } - } + USkill* skill = NewObject(this); + skill->InitSkill(Pawn, this, PlacedSkill); + SkillObjects.Add(skill); + BagPositions.Add(FIntPoint(PlacedSkill.PositionX, PlacedSkill.PositionY)); } - return nullptr; + } void USkillManager::OnAllSkillAdded() @@ -100,7 +116,7 @@ class USkill* USkillManager::GetSkillByTag(FGameplayTag Tag) { for (auto Skill : Skills) { - if (Skill->GetSkillData().SkillTag == Tag) + if (Skill->GetSkillData()->SkillTag == Tag) return Skill; } return nullptr; @@ -117,7 +133,7 @@ TArray USkillManager::GetSkillsAround(USkill* TargetSkill) TMap *BagStates = PawnBagState.Find(TargetSkill->GetOwner()); FIntPoint BagPos = TargetSkill->GetBagPos(); FIntPoint BagSize = *PawnInfo.Find(TargetSkill->GetOwner()); - FSkillData data = TargetSkill->GetSkillData(); + TObjectPtr 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); diff --git a/ProjectFish/Source/ProjectFish/Skill/SkillManager.h b/ProjectFish/Source/ProjectFish/Skill/SkillManager.h index edffd5d..45f2bef 100644 --- a/ProjectFish/Source/ProjectFish/Skill/SkillManager.h +++ b/ProjectFish/Source/ProjectFish/Skill/SkillManager.h @@ -24,9 +24,12 @@ public: UFUNCTION(BlueprintCallable) void AddPawn(class APawnWithSkill* Pawn, FIntPoint BagSize); + // UFUNCTION(BlueprintCallable) + // USkill* AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos); UFUNCTION(BlueprintCallable) - USkill* AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos); - + void AddBagWithSkills(UBagConfigAsset* Bag, APawnWithSkill* Pawn, + TArray& SkillObjects, TArray& BagPositions); + UFUNCTION(BlueprintCallable) void OnAllSkillAdded();