194 lines
5.7 KiB
Lua
194 lines
5.7 KiB
Lua
---@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; |