UGCProjects/GZJ/Script/UI/ChildWidgets/WBP_GenerateInfo.lua

194 lines
5.7 KiB
Lua
Raw Permalink Normal View History

2025-01-08 22:46:12 +08:00
---@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;