添加背包拖拽功能

This commit is contained in:
997146918 2025-09-18 18:57:27 +08:00
parent a1c71b57b4
commit 05983bd28d
12 changed files with 25 additions and 9 deletions

View File

@ -2,7 +2,7 @@
"BuildId": "37670630", "BuildId": "37670630",
"Modules": "Modules":
{ {
"ProjectFish": "UnrealEditor-ProjectFish-0001.dll", "ProjectFish": "UnrealEditor-ProjectFish.dll",
"ProjectFishEditor": "UnrealEditor-ProjectFishEditor-0001.dll" "ProjectFishEditor": "UnrealEditor-ProjectFishEditor.dll"
} }
} }

Binary file not shown.

Binary file not shown.

View File

@ -28,7 +28,19 @@ bool UBagConfigAsset::RemoveSkill(int32 SkillIndex)
return true; return true;
} }
bool UBagConfigAsset::CanPlaceSkill(USkillAsset* SkillObject, int32 PositionX, int32 PositionY) const void UBagConfigAsset::RemoveSkillAsset(class USkillAsset* SkillAsset)
{
for (int32 i = 0; i < PlacedSkills.Num(); i++)
{
if (PlacedSkills[i].SkillAsset == SkillAsset)
{
PlacedSkills.RemoveAt(i);
break;
}
}
}
bool UBagConfigAsset::CanPlaceSkill(USkillAsset* SkillObject, int32 PositionX, int32 PositionY, bool IgnoreSelf ) const
{ {
if (!SkillObject || !BagShapeAsset) if (!SkillObject || !BagShapeAsset)
{ {
@ -40,7 +52,7 @@ bool UBagConfigAsset::CanPlaceSkill(USkillAsset* SkillObject, int32 PositionX, i
return false; return false;
} }
if (CheckSkillOverlap(SkillObject, PositionX, PositionY)) if (CheckSkillOverlap(SkillObject, PositionX, PositionY, IgnoreSelf))
{ {
return false; return false;
} }
@ -65,7 +77,7 @@ void UBagConfigAsset::ClearAllSkills()
PlacedSkills.Empty(); PlacedSkills.Empty();
} }
bool UBagConfigAsset::CheckSkillOverlap(USkillAsset* SkillObject, int32 PositionX, int32 PositionY) const bool UBagConfigAsset::CheckSkillOverlap(USkillAsset* SkillObject, int32 PositionX, int32 PositionY, bool IgnoreSelf ) const
{ {
if (!SkillObject) if (!SkillObject)
{ {
@ -80,13 +92,15 @@ bool UBagConfigAsset::CheckSkillOverlap(USkillAsset* SkillObject, int32 Position
{ {
continue; continue;
} }
// 检查矩形重叠 // 检查矩形重叠
if (!(PositionX >= ExistingSkill.PositionX + GetSkillSizeValue(ExistingSkill.SkillAsset->SkillSize).X || if (!(PositionX >= ExistingSkill.PositionX + GetSkillSizeValue(ExistingSkill.SkillAsset->SkillSize).X ||
PositionX + GetSkillSizeValue(SkillObject->SkillSize).X <= ExistingSkill.PositionX || PositionX + GetSkillSizeValue(SkillObject->SkillSize).X <= ExistingSkill.PositionX ||
PositionY >= ExistingSkill.PositionY + GetSkillSizeValue(ExistingSkill.SkillAsset->SkillSize).Y || PositionY >= ExistingSkill.PositionY + GetSkillSizeValue(ExistingSkill.SkillAsset->SkillSize).Y ||
PositionY + GetSkillSizeValue(SkillObject->SkillSize).Y <= ExistingSkill.PositionY)) PositionY + GetSkillSizeValue(SkillObject->SkillSize).Y <= ExistingSkill.PositionY))
{ {
if (IgnoreSelf && ExistingSkill.SkillAsset == SkillObject)
continue;
else
return true; // 有重叠 return true; // 有重叠
} }
} }

View File

@ -79,10 +79,12 @@ public:
// 移除技能 // 移除技能
UFUNCTION(BlueprintCallable, Category = "BagConfig") UFUNCTION(BlueprintCallable, Category = "BagConfig")
bool RemoveSkill(int32 SkillIndex); bool RemoveSkill(int32 SkillIndex);
UFUNCTION(BlueprintCallable, Category = "BagConfig")
void RemoveSkillAsset(class USkillAsset* SkillAsset);
// 检查技能是否可以放置在指定位置 // 检查技能是否可以放置在指定位置
UFUNCTION(BlueprintCallable, Category = "BagConfig") UFUNCTION(BlueprintCallable, Category = "BagConfig")
bool CanPlaceSkill(USkillAsset* SkillObject, int32 PositionX, int32 PositionY) const; bool CanPlaceSkill(USkillAsset* SkillObject, int32 PositionX, int32 PositionY, bool IgnoreSelf = false) const;
// 获取指定位置的技能索引 // 获取指定位置的技能索引
UFUNCTION(BlueprintCallable, Category = "BagConfig") UFUNCTION(BlueprintCallable, Category = "BagConfig")
@ -98,7 +100,7 @@ public:
private: private:
// 检查技能之间是否有重叠 // 检查技能之间是否有重叠
bool CheckSkillOverlap(USkillAsset* SkillObject, int32 PositionX, int32 PositionY) const; bool CheckSkillOverlap(USkillAsset* SkillObject, int32 PositionX, int32 PositionY, bool IgnoreSelf = false) const;
// 检查技能是否在背包形状范围内 // 检查技能是否在背包形状范围内
bool IsSkillWithinBagShape(USkillAsset* SkillObject, int32 PositionX, int32 PositionY) const; bool IsSkillWithinBagShape(USkillAsset* SkillObject, int32 PositionX, int32 PositionY) const;