---@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;