修改背包UI

This commit is contained in:
997146918 2025-09-01 11:54:05 +08:00
parent cd4bf0109d
commit bd3961c614
30 changed files with 158 additions and 75 deletions

Binary file not shown.

View File

@ -1,4 +1,5 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=72263A5F_002DD5F9_002D3915_002D8DA0_002DCD45C38A70E5_002Fdl_003ASource_003AF_0021_003FEpic_003FUE_005F5_002E5_003FEngine_003FSource_002Fd_003ARuntime_002Fd_003ACoreUObject_002Fd_003APublic_002Fd_003AAssetRegistry_002Ff_003AAssetData_002Eh/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=72263A5F_002DD5F9_002D3915_002D8DA0_002DCD45C38A70E5_002Fdl_003ASource_003AF_0021_003FEpic_003FUE_005F5_002E5_003FEngine_003FSource_002Fd_003ARuntime_002Fd_003ACoreUObject_002Fd_003APublic_002Fd_003AAssetRegistry_002Ff_003AAssetData_002Eh/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=72263A5F_002DD5F9_002D3915_002D8DA0_002DCD45C38A70E5_002Fdl_003ASource_003AF_0021_003FEpic_003FUE_005F5_002E5_003FEngine_003FSource_002Fd_003AEditor_002Fd_003APropertyEditor_002Fd_003APublic_002Ff_003APropertyCustomizationHelpers_002Eh/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=72263A5F_002DD5F9_002D3915_002D8DA0_002DCD45C38A70E5_002Fdl_003ASource_003AF_0021_003FEpic_003FUE_005F5_002E5_003FEngine_003FSource_002Fd_003AEditor_002Fd_003APropertyEditor_002Fd_003APublic_002Ff_003APropertyCustomizationHelpers_002Eh/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=72263A5F_002DD5F9_002D3915_002D8DA0_002DCD45C38A70E5_002Fdl_003ASource_003AF_0021_003FEpic_003FUE_005F5_002E5_003FEngine_003FSource_002Fd_003ARuntime_002Fd_003ACoreUObject_002Fd_003APublic_002Fd_003AUObject_002Ff_003AUObjectBaseUtility_002Eh/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=72263A5F_002DD5F9_002D3915_002D8DA0_002DCD45C38A70E5_002Fdl_003ASource_003AF_0021_003FEpic_003FUE_005F5_002E5_003FEngine_003FSource_002Fd_003ARuntime_002Fd_003ACoreUObject_002Fd_003APublic_002Fd_003AUObject_002Ff_003AUObjectBaseUtility_002Eh/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=72263A5F_002DD5F9_002D3915_002D8DA0_002DCD45C38A70E5_002Fdl_003ASource_003AF_0021_003FEpic_003FUE_005F5_002E5_003FEngine_003FSource_002Fd_003ARuntime_002Fd_003ACore_002Fd_003APublic_002Fd_003AMisc_002Ff_003AMTAccessDetector_002Eh/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary>

View File

@ -33,7 +33,7 @@ struct FBagSlot
/** /**
* *
*/ */
UCLASS() UCLASS(BlueprintType)
class PROJECTFISH_API UBagShapeAsset : public UDataAsset class PROJECTFISH_API UBagShapeAsset : public UDataAsset
{ {
GENERATED_BODY() GENERATED_BODY()

View File

@ -12,7 +12,7 @@
/** /**
* *
*/ */
UCLASS() UCLASS(BlueprintType)
class PROJECTFISH_API USkillAsset : public UDataAsset class PROJECTFISH_API USkillAsset : public UDataAsset
{ {
GENERATED_BODY() GENERATED_BODY()

View File

@ -14,15 +14,68 @@
#include "SkillEffects/SkillEffect_ModifySpeed.h" #include "SkillEffects/SkillEffect_ModifySpeed.h"
#include "SkillEffects/SkillEffect_SER.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<USkillEffect>(this, USkillEffect_Damage::StaticClass());
// break;
// case ESkillEffectType::Heal:
// skillEffect = NewObject<USkillEffect>(this, USkillEffect_Heal::StaticClass());
// break;
// case ESkillEffectType::ModifyCooldown:
// skillEffect = NewObject<USkillEffect>(this, USkillEffect_ModifyCD::StaticClass());
// break;
// case ESkillEffectType::Charge:
// skillEffect = NewObject<USkillEffect>(this, USkillEffect_Charge::StaticClass());
// break;
// case ESkillEffectType::ModifySpeed:
// skillEffect = NewObject<USkillEffect>(this, USkillEffect_ModifySpeed::StaticClass());
// break;
// case ESkillEffectType::SkillEnduranceRestore:
// skillEffect = NewObject<USkillEffect>(this, USkillEffect_SER::StaticClass());
// break;
// case ESkillEffectType::EnhanceFishRod:
// skillEffect = NewObject<USkillEffect>(this, USkillEffect_EnhanceFishRod::StaticClass());
// break;
// case ESkillEffectType::EnhanceSkill:
// skillEffect = NewObject<USkillEffect>(this, USkillEffect_EnhanceSkill::StaticClass());
// break;
// case ESkillEffectType::DamageReduce:
// skillEffect = NewObject<USkillEffect>(this, USkillEffect_DamageReduce::StaticClass());
// break;
// default:
// const UEnum* EnumPtr = StaticEnum<ESkillEffectType>();
// UE_LOG(LogTemp, Error, TEXT("没有配置 %s类型的Skill Effect"), *EnumPtr->GetNameStringByValue(static_cast<int64>(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->Owner = owner;
this->SkillManager = skillManager; this->SkillManager = skillManager;
this->SkillData = skillData; this->SkillData = PlacedSkill.SkillAsset;
this->BagPosition = BagPos; this->BagPosition = FIntPoint(PlacedSkill.PositionX, PlacedSkill.PositionY);
this->RemainingTime = SkillData.CD; this->RemainingTime = SkillData->CD;
this->RemainingEndurance = SkillData.Endurance; this->RemainingEndurance = SkillData->Endurance;
for (auto effectData: skillData.SkillEffects) for (auto effectData: SkillData->SkillEffects)
{ {
USkillEffect* skillEffect = nullptr ; USkillEffect* skillEffect = nullptr ;
switch (effectData.EffectType) switch (effectData.EffectType)
@ -55,8 +108,8 @@ void USkill::InitSkill(APawnWithSkill* owner, USkillManager* skillManager, FSkil
skillEffect = NewObject<USkillEffect>(this, USkillEffect_DamageReduce::StaticClass()); skillEffect = NewObject<USkillEffect>(this, USkillEffect_DamageReduce::StaticClass());
break; break;
default: default:
const UEnum* EnumPtr = StaticEnum<ESkillEffectType>(); const UEnum* EnumPtr = StaticEnum<ESkillEffectType>();
UE_LOG(LogTemp, Error, TEXT("没有配置 %s类型的Skill Effect"), *EnumPtr->GetNameStringByValue(static_cast<int64>(effectData.EffectType))) UE_LOG(LogTemp, Error, TEXT("没有配置 %s类型的Skill Effect"), *EnumPtr->GetNameStringByValue(static_cast<int64>(effectData.EffectType)))
} }
if (IsValid(skillEffect)) if (IsValid(skillEffect))
{ {
@ -69,11 +122,11 @@ void USkill::InitSkill(APawnWithSkill* owner, USkillManager* skillManager, FSkil
void USkill::InitSkillTrigger() void USkill::InitSkillTrigger()
{ {
if (!SkillData.bActiveSkill) if (!SkillData->bActiveSkill)
{ {
if (SkillData.SkillTrigger) if (SkillData->SkillTrigger)
{ {
USkillTrigger* SkillTrigger = NewObject<USkillTrigger>(this, SkillData.SkillTrigger); USkillTrigger* SkillTrigger = NewObject<USkillTrigger>(this, SkillData->SkillTrigger);
FSkillContext context; FSkillContext context;
context.OwnerSkill = this; context.OwnerSkill = this;
context.SkillManager = SkillManager; context.SkillManager = SkillManager;
@ -91,13 +144,18 @@ void USkill::InitSkillTrigger()
bool USkill::SkillTickAble() 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) void USkill::TickSkill(float deltaTime)
{ {
if (SkillTickAble()) if (SkillTickAble())
RemainingTime -= deltaTime * SkillData.Speed; RemainingTime -= deltaTime * SkillData->Speed;
if (RemainingTime <= 0 ) if (RemainingTime <= 0 )
{ {
ExecuteSkill(); ExecuteSkill();
@ -126,16 +184,16 @@ void USkill::ExecuteSkill()
{ {
Effect->Execute(context); Effect->Execute(context);
} }
RemainingTime = SkillData.CD; RemainingTime = SkillData->CD;
OnSkillExecute.Broadcast(SkillData.SkillName.ToString()); OnSkillExecute.Broadcast(SkillData->SkillName.ToString());
} }
FString USkill::GetSkillName() const FString USkill::GetSkillName() const
{ {
return SkillData.SkillName.ToString();; return SkillData->SkillName.ToString();;
} }
FSkillData& USkill::GetSkillData() TObjectPtr<USkillAsset> USkill::GetSkillData()
{ {
return SkillData; return SkillData;
} }
@ -145,7 +203,7 @@ FIntPoint USkill::GetBagPos()
return BagPosition; return BagPosition;
} }
void USkill::SetSkillData(FSkillData data) void USkill::SetSkillData(TObjectPtr<USkillAsset> data)
{ {
SkillData = data; SkillData = data;
OnSkillUpdate.Broadcast(); OnSkillUpdate.Broadcast();
@ -158,8 +216,8 @@ void USkill::ApplyRemainingTimeOffset(int timeOffset)
void USkill::ApplyRemainingRemainingEnduranceOffset(int Offset) void USkill::ApplyRemainingRemainingEnduranceOffset(int Offset)
{ {
if (SkillData.Endurance != -1) if (SkillData->Endurance != -1)
this->RemainingEndurance = FMath::Max(this->RemainingEndurance + Offset, SkillData.Endurance); this->RemainingEndurance = FMath::Max(this->RemainingEndurance + Offset, SkillData->Endurance);
} }
class APawnWithSkill* USkill::GetOwner() class APawnWithSkill* USkill::GetOwner()

View File

@ -6,6 +6,7 @@
#include "SkillEffect.h" #include "SkillEffect.h"
#include "ProjectFish/Definations.h" #include "ProjectFish/Definations.h"
#include "ProjectFish/DataAsset/BagConfigAsset.h"
#include "UObject/Object.h" #include "UObject/Object.h"
#include "Skill.generated.h" #include "Skill.generated.h"
@ -19,7 +20,8 @@ class PROJECTFISH_API USkill : public UObject
{ {
GENERATED_BODY() GENERATED_BODY()
public: 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 InitSkillTrigger();
void TickSkill(float deltaTime); void TickSkill(float deltaTime);
void ExecuteSkill(); void ExecuteSkill();
@ -27,20 +29,23 @@ public:
FString GetSkillName() const; FString GetSkillName() const;
class APawnWithSkill* GetOwner(); class APawnWithSkill* GetOwner();
FSkillData& GetSkillData(); TObjectPtr<USkillAsset> GetSkillData();
TArray<USkillEffect*> GetAllSkillEffects() TArray<USkillEffect*> GetAllSkillEffects()
{ {
return SkillEffects; return SkillEffects;
} }
FIntPoint GetBagPos(); FIntPoint GetBagPos();
void SetSkillData( FSkillData SkillData); void SetSkillData( TObjectPtr<USkillAsset> SkillData);
UFUNCTION(BlueprintCallable) UFUNCTION(BlueprintCallable)
void ApplyRemainingTimeOffset(int timeOffset); void ApplyRemainingTimeOffset(int timeOffset);
void ApplyRemainingRemainingEnduranceOffset(int Offset); void ApplyRemainingRemainingEnduranceOffset(int Offset);
UFUNCTION(BlueprintPure) UFUNCTION(BlueprintPure)
bool SkillTickAble(); bool SkillTickAble();
UFUNCTION(BlueprintPure)
FIntPoint GetSkillSize();
protected: protected:
UPROPERTY(BlueprintAssignable) UPROPERTY(BlueprintAssignable)
FSkillUpdate OnSkillUpdate; FSkillUpdate OnSkillUpdate;
@ -48,7 +53,7 @@ protected:
FSkillExecute OnSkillExecute; FSkillExecute OnSkillExecute;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (ToolTip = "技能效果")) UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (ToolTip = "技能效果"))
FSkillData SkillData; TObjectPtr< USkillAsset> SkillData;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (ToolTip = "技能效果")) UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (ToolTip = "技能效果"))
USkillManager* SkillManager; USkillManager* SkillManager;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (ToolTip = "技能效果")) UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (ToolTip = "技能效果"))

View File

@ -27,7 +27,7 @@ void USkillEffect::Execute(const FSkillContext& context)
} }
else else
{ {
strTargets += (Cast<USkill>(target))->GetSkillData().SkillName.ToString() + "|" ; strTargets += (Cast<USkill>(target))->GetSkillData()->SkillName.ToString() + "|" ;
} }
} }
@ -35,7 +35,7 @@ void USkillEffect::Execute(const FSkillContext& context)
FString type = EnumPtr->GetNameStringByValue(static_cast<int64>(effectData.EffectType)) ; FString type = EnumPtr->GetNameStringByValue(static_cast<int64>(effectData.EffectType)) ;
UE_LOG(LogTemp, Warning, TEXT("技能:%s 拥有者: %s 目标: %s 效果: %s") UE_LOG(LogTemp, Warning, TEXT("技能:%s 拥有者: %s 目标: %s 效果: %s")
, *OwnerSkill->GetSkillData().SkillName.ToString() , *OwnerSkill->GetSkillData()->SkillName.ToString()
,*OwnerSkill->GetOwner()->GetActorNameOrLabel() ,*OwnerSkill->GetOwner()->GetActorNameOrLabel()
,*strTargets ,*strTargets
, *( GetSkillEffectDes())); , *( GetSkillEffectDes()));
@ -62,7 +62,7 @@ TArray<UObject*> USkillEffect::GetApplyTargets(const FSkillContext& context)
for (auto skill: context.SkillManager->GetAllSkills()) 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); result.Add(skill);
} }

View File

@ -21,7 +21,7 @@ void USkillEffect_ModifyCD::Execute(const FSkillContext& context)
{ {
//修改技能的冷却时间 //修改技能的冷却时间
USkill* skill = Cast<USkill>(target); USkill* skill = Cast<USkill>(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); skill->ApplyRemainingTimeOffset(effectData.EffectValue);
} }

View File

@ -22,13 +22,13 @@ void USkillEffect_ModifySpeed::Execute(const FSkillContext& context)
{ {
//修改技能的冷却倍率 //修改技能的冷却倍率
USkill* skill = Cast<USkill>(target); USkill* skill = Cast<USkill>(target);
skill->GetSkillData().Speed = effectData.EffectValue; skill->GetSkillData()->Speed = effectData.EffectValue;
//延时结束效果 //延时结束效果
GetWorld()->GetTimerManager().SetTimer(TimerHandle, [&]() GetWorld()->GetTimerManager().SetTimer(TimerHandle, [&]()
{ {
UE_LOG(LogTemp, Log, TEXT("取消CD充能效果")); UE_LOG(LogTemp, Log, TEXT("取消CD充能效果"));
skill->GetSkillData().Speed = 1; skill->GetSkillData()->Speed = 1;
}, UKismetStringLibrary::Conv_StringToInt(effectData.ParamAddition), false); // 单次触发 }, UKismetStringLibrary::Conv_StringToInt(effectData.ParamAddition), false); // 单次触发

View File

@ -3,6 +3,7 @@
#include "SkillManager.h" #include "SkillManager.h"
#include "Skill.h" #include "Skill.h"
#include "ProjectFish/DataAsset/BagConfigAsset.h"
void USkillManager::Tick(float DeltaTime) void USkillManager::Tick(float DeltaTime)
{ {
@ -42,49 +43,64 @@ void USkillManager::AddPawn(class APawnWithSkill* Pawn, FIntPoint BagSize)
// this->SkillPawns = Pawns; // this->SkillPawns = Pawns;
// } // }
USkill* USkillManager::AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos) // USkill* USkillManager::AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos)
// {
// TMap<FIntPoint, int32>* 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<USkill>(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<USkill*>& SkillObjects,
TArray<FIntPoint>& BagPositions)
{ {
TMap<FIntPoint, int32>* states = PawnBagState.Find(Pawn);
FIntPoint BagSize = *PawnInfo.Find(Pawn); FIntPoint BagSize = *PawnInfo.Find(Pawn);
bool bAddAble = true; for (auto PlacedSkill: Bag->PlacedSkills)
for (int y = 0; y < BagSize.Y; y++)
{ {
for (int x = 0; x < BagSize.X; x++) USkill* skill = NewObject<USkill>(this);
{ skill->InitSkill(Pawn, this, PlacedSkill);
bAddAble = true; SkillObjects.Add(skill);
for (int skillX = 0; skillX < data.SkillWeight.X; skillX++) BagPositions.Add(FIntPoint(PlacedSkill.PositionX, PlacedSkill.PositionY));
{
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<USkill>(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::OnAllSkillAdded() void USkillManager::OnAllSkillAdded()
@ -100,7 +116,7 @@ class USkill* USkillManager::GetSkillByTag(FGameplayTag Tag)
{ {
for (auto Skill : Skills) for (auto Skill : Skills)
{ {
if (Skill->GetSkillData().SkillTag == Tag) if (Skill->GetSkillData()->SkillTag == Tag)
return Skill; return Skill;
} }
return nullptr; return nullptr;
@ -117,7 +133,7 @@ TArray<USkill*> USkillManager::GetSkillsAround(USkill* TargetSkill)
TMap<FIntPoint, int32> *BagStates = PawnBagState.Find(TargetSkill->GetOwner()); TMap<FIntPoint, int32> *BagStates = PawnBagState.Find(TargetSkill->GetOwner());
FIntPoint BagPos = TargetSkill->GetBagPos(); FIntPoint BagPos = TargetSkill->GetBagPos();
FIntPoint BagSize = *PawnInfo.Find(TargetSkill->GetOwner()); FIntPoint BagSize = *PawnInfo.Find(TargetSkill->GetOwner());
FSkillData data = TargetSkill->GetSkillData(); TObjectPtr<USkillAsset> data = TargetSkill->GetSkillData();
int beginX = FMath::Max(0, BagPos.X- 1); int beginX = FMath::Max(0, BagPos.X- 1);
int endX = FMath::Min(BagSize.X - 1, BagPos.X + 1); int endX = FMath::Min(BagSize.X - 1, BagPos.X + 1);
int beginY = FMath::Max(0, BagPos.Y - 1); int beginY = FMath::Max(0, BagPos.Y - 1);

View File

@ -24,9 +24,12 @@ public:
UFUNCTION(BlueprintCallable) UFUNCTION(BlueprintCallable)
void AddPawn(class APawnWithSkill* Pawn, FIntPoint BagSize); void AddPawn(class APawnWithSkill* Pawn, FIntPoint BagSize);
// UFUNCTION(BlueprintCallable)
// USkill* AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos);
UFUNCTION(BlueprintCallable) UFUNCTION(BlueprintCallable)
USkill* AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos); void AddBagWithSkills(UBagConfigAsset* Bag, APawnWithSkill* Pawn,
TArray<USkill*>& SkillObjects, TArray<FIntPoint>& BagPositions);
UFUNCTION(BlueprintCallable) UFUNCTION(BlueprintCallable)
void OnAllSkillAdded(); void OnAllSkillAdded();