UGCProjects/GZJ/Script/UI/ChildWidgets/WBP_GenerateInfo.lua
2025-01-08 22:46:12 +08:00

194 lines
5.7 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---@class WBP_GenerateInfo_C:UUserWidget
---@field Button_Cancel UButton
---@field Button_Ok UButton
---@field VerticalBox_ItemList UVerticalBox
--Edit Below--
local WBP_GenerateInfo = {
bInitDoOnce = false;
SelectedItems = {}, -- 这里面只是几个Id
OwningPawn = nil,
};
function WBP_GenerateInfo:Construct()
EventSystem:AddListener(EventType.CloseGenerateItem, WBP_GenerateInfo.OnCancelGenerateItem, self)
self.Button_Ok.OnClicked:Add(WBP_GenerateInfo.OnClickOk, self)
self.Button_Cancel.OnClicked:Add(WBP_GenerateInfo.OnClickCancel, self)
for i = 1, 3 do
self.VerticalBox_ItemList:GetChildAt(i - 1):SetVisibility(ESlateVisibility.Collapsed)
end
end
-- function WBP_GenerateInfo:Tick(MyGeometry, InDeltaTime)
-- end
function WBP_GenerateInfo:Destruct()
EventSystem:RemoveListener(EventType.CloseGenerateItem, WBP_GenerateInfo.OnCancelGenerateItem, self)
self.Button_Ok.OnClicked:Remove(WBP_GenerateInfo.OnClickOk, self)
self.Button_Cancel.OnClicked:Remove(WBP_GenerateInfo.OnClickCancel, self)
end
function WBP_GenerateInfo:OnClickOk()
if #self.SelectedItems ~= 3 then
UIManager:ShowGeneralNotice(string.format("当前选择的数量太少,无法进行合成"))
return
end
-- 判断一下是否都是同样的东西(配件 / 技能)
local PC = GameDataManager.GetLocalPlayerController()
PC:GenerateItemList(self.SelectedItems)
print(string.format('合成结束,检查一下'))
UIManager.AllPanel[EUIType.Backpack]:CloseOperation(EBagOperateType.Generate)
self:Clear()
end
function WBP_GenerateInfo:Clear()
for i = 1, 3 do
self.VerticalBox_ItemList:GetChildAt(i - 1):SetVisibility(ESlateVisibility.Collapsed)
end
self.SelectedItems = {}
end
function WBP_GenerateInfo:GetOwningBackpackComponent()
local PlayerController = STExtraGameplayStatics.GetFirstPlayerController(self)
if PlayerController then
self.OwningPawn = PlayerController:GetPlayerCharacterSafety()
end
end
function WBP_GenerateInfo:OnClickCancel()
self:Clear()
UIManager.AllPanel[EUIType.Backpack]:CloseOperation(EBagOperateType.Generate)
end
function WBP_GenerateInfo:OnCancelGenerateItem(InItemId)
-- 查找一下
local AttRemoveId = 0
for i, v in pairs(self.SelectedItems) do
if v == InItemId then
AttRemoveId = i
end
end
table.remove(self.SelectedItems, AttRemoveId)
-- 刷新一下
self:RefreshItems()
end
--当拖拽的时候放到的位置
function WBP_GenerateInfo:OnDrop(MyGeometry, PointerEvent, Operation)
WBP_GenerateInfo.SuperClass:OnDrop(MyGeometry, PointerEvent, Operation)
local ItemData = Operation:GetItemData()
if ItemData ~= nil then
self:AddItem(ItemData)
end
end
function WBP_GenerateInfo:RemoveItem(InItemId)
local RemoveIdIndex = 0
print(string.format('[WBP_GenerateInfo:RemoveItem] 开始移除物品'))
for i = 1, #self.SelectedItems do
print(string.format('拥有的 Id == %d', self.SelectedItems[i]))
if self.SelectedItems[i] == InItemId then
RemoveIdIndex = i
--break
end
end
if RemoveIdIndex ~= 0 then
table.remove(self.SelectedItems, RemoveIdIndex)
print('[WBP_GenerateInfo:RemoveItem] 移除成功')
else
print(string.format('[WBP_GenerateInfo:RemoveItem] 未找到对应Id的请检查 Id = %d', InItemId))
end
self:RefreshItems()
end
function WBP_GenerateInfo:CheckItemType(InItemId)
local NewAddItemQuality = GetItemQualityLevel(InItemId)
local CurrentItemQuality = 0
local bHadCheck = false
if #self.SelectedItems > 0 then
CurrentItemQuality = GetItemQualityLevel(self.SelectedItems[1])
if CurrentItemQuality == NewAddItemQuality then
bHadCheck = true
else
UIManager:ShowGeneralNotice(string.format("您选择的物品品质跟之前选择的不同,请选择相同品质的物品进行合成"))
end
else
bHadCheck = true
end
if bHadCheck then
if #self.SelectedItems > 0 then
if GetItemGrantTypeById(InItemId) ~= GetItemGrantTypeById(self.SelectedItems[1]) then
bHadCheck = false
UIManager:ShowGeneralNotice(string.format("您选择的物品类型跟之前选择的不同,请选择相同类型的物品进行合成"))
end
end
end
return bHadCheck
end
function WBP_GenerateInfo:FindInnerCountById(InId)
local TotalCount = 0
for _, v in pairs(self.SelectedItems) do
if InId == v then
TotalCount = TotalCount + 1
end
end
return TotalCount
end
function WBP_GenerateInfo:AddItem(ItemData)
print('【WBP_GenerateInfo:AddItem】进入')
if GetItemQualityLevel(ItemData.ItemID) >= EQualityType.Super then
UIManager:ShowGeneralNotice("超级的物品无法合成", true)
return
end
local Count = UIManager.AllPanel[EUIType.Backpack]:FindItemCountById(ItemData.ItemID)
local HadAddCount = self:FindInnerCountById(ItemData.ItemID)
local bHadCheck = self:CheckItemType(ItemData.ItemID)
if not bHadCheck then
return
end
if Count <= HadAddCount then
--提示一下
UIManager:ShowGeneralNotice(string.format("当前选择的数量已经足够了,无法继续添加"))
else
if table.getCount(self.SelectedItems) < 3 then
--放进来
table.insert(self.SelectedItems, ItemData.ItemID)
--else
-- UIManager:ShowGeneralNotice(string.format("当前已经满员了,请移除之后再添加"))
end
end
self:RefreshItems()
end
function WBP_GenerateInfo:RefreshItems()
for i = 1, 3 do
if i <= #self.SelectedItems then
self.VerticalBox_ItemList:GetChildAt(i - 1):SetGenerateData(self.SelectedItems[i])
self.VerticalBox_ItemList:GetChildAt(i - 1):SetVisibility(ESlateVisibility.Visible)
else
self.VerticalBox_ItemList:GetChildAt(i - 1):SetVisibility(ESlateVisibility.Collapsed)
end
end
end
-- 获取当前将要合成的类型
function WBP_GenerateInfo:GetCurrentType()
if #self.SelectedItems == 0 then
return -1
end
return GetItemTypeByItemId(self.SelectedItems[1])
end
return WBP_GenerateInfo;