添加背包拖拽功能

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",
"Modules":
{
"ProjectFish": "UnrealEditor-ProjectFish-0001.dll",
"ProjectFishEditor": "UnrealEditor-ProjectFishEditor-0001.dll"
"ProjectFish": "UnrealEditor-ProjectFish.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;
}
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)
{
@ -40,7 +52,7 @@ bool UBagConfigAsset::CanPlaceSkill(USkillAsset* SkillObject, int32 PositionX, i
return false;
}
if (CheckSkillOverlap(SkillObject, PositionX, PositionY))
if (CheckSkillOverlap(SkillObject, PositionX, PositionY, IgnoreSelf))
{
return false;
}
@ -65,7 +77,7 @@ void UBagConfigAsset::ClearAllSkills()
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)
{
@ -80,13 +92,15 @@ bool UBagConfigAsset::CheckSkillOverlap(USkillAsset* SkillObject, int32 Position
{
continue;
}
// 检查矩形重叠
if (!(PositionX >= ExistingSkill.PositionX + GetSkillSizeValue(ExistingSkill.SkillAsset->SkillSize).X ||
PositionX + GetSkillSizeValue(SkillObject->SkillSize).X <= ExistingSkill.PositionX ||
PositionY >= ExistingSkill.PositionY + GetSkillSizeValue(ExistingSkill.SkillAsset->SkillSize).Y ||
PositionY + GetSkillSizeValue(SkillObject->SkillSize).Y <= ExistingSkill.PositionY))
{
if (IgnoreSelf && ExistingSkill.SkillAsset == SkillObject)
continue;
else
return true; // 有重叠
}
}

View File

@ -79,10 +79,12 @@ public:
// 移除技能
UFUNCTION(BlueprintCallable, Category = "BagConfig")
bool RemoveSkill(int32 SkillIndex);
UFUNCTION(BlueprintCallable, Category = "BagConfig")
void RemoveSkillAsset(class USkillAsset* SkillAsset);
// 检查技能是否可以放置在指定位置
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")
@ -98,7 +100,7 @@ public:
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;