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();