local MessageBoxItemCtrl = class("MessageBoxItemCtrl", BaseCtrl) MessageBoxItemCtrl._mapNodeConfig = { aniMessageBox = { sNodeName = "goMessageBox", sComponentName = "Animator" }, txtWindowTitle = { sComponentName = "TMP_Text", sLanguageId = "MessageBox_Title" }, txtContentMain = {sComponentName = "TMP_Text"}, txtContentSub = {sComponentName = "TMP_Text"}, rtItem = {}, goItem = { nCount = 5, sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl" }, btnItem = { nCount = 5, sNodeName = "goItem", sComponentName = "UIButton", callback = "OnBtnClick_Tips" }, goItemList = {}, sv = { sComponentName = "LoopScrollView" }, btnClose = {sComponentName = "UIButton"}, btnCancel = {sComponentName = "UIButton"}, btnConfirm = {nCount = 2, sComponentName = "UIButton"}, txtCancel = { sComponentName = "TMP_Text", sLanguageId = "MessageBox_Cancel" }, txtConfirm = { nCount = 2, sComponentName = "TMP_Text", sLanguageId = "MessageBox_Confirm" } } MessageBoxItemCtrl._mapEventConfig = {} function MessageBoxItemCtrl:OpenBox(mapMsg, ctrlBase) self:RefreshConfirm(mapMsg, ctrlBase) end function MessageBoxItemCtrl:RefreshConfirm(mapMsg, ctrlBase) local sContent = mapMsg.sContent local sContentSub = mapMsg.sContentSub local tbItem = mapMsg.tbItem self.tbItem = tbItem local sTitle = mapMsg.sTitle local sConfirm = mapMsg.sConfirm local sCancel = mapMsg.sCancel local callbackConfirm = mapMsg.callbackConfirm local callbackCancel = mapMsg.callbackCancel self.bDisableSnap = mapMsg.bDisableSnap self._mapNode.txtContentSub.gameObject:SetActive(sContentSub) self._mapNode.btnConfirm[1].gameObject:SetActive(true) self._mapNode.btnConfirm[2].gameObject:SetActive(false) self._mapNode.btnCancel.gameObject:SetActive(true) if sContentSub then NovaAPI.SetTMPText(self._mapNode.txtContentSub, sContentSub) end if sConfirm then NovaAPI.SetTMPText(self._mapNode.txtConfirm[1], sConfirm) end if sCancel then NovaAPI.SetTMPText(self._mapNode.txtCancel, sCancel) end local nItemCount = #tbItem self._mapNode.rtItem:SetActive(nItemCount <= 5) self._mapNode.goItemList:SetActive(5 < nItemCount) if nItemCount <= 5 then for i = 1, 5 do self._mapNode.goItem[i].gameObject:SetActive(i <= nItemCount) if i <= nItemCount then self._mapNode.goItem[i]:SetItem(tbItem[i].nTid, nil, tbItem[i].nCount) end end else self._mapNode.sv:Init(nItemCount, self, self.OnGridRefresh, self.OnGridBtnClick) end NovaAPI.SetTMPText(self._mapNode.txtContentMain, sContent) if sTitle then NovaAPI.SetTMPText(self._mapNode.txtWindowTitle, sTitle) end if self.handlerConfirm then self._mapNode.btnConfirm[1].onClick:RemoveListener(self.handlerConfirm) end self.handlerConfirm = nil local func_confirm = function() if self._panel.bBlur then self._mapNode.aniMessageBox:Play("t_window_04_t_out") end ctrlBase:DefaultClick(callbackConfirm) end self.handlerConfirm = ui_handler(self, func_confirm, self._mapNode.btnConfirm[1]) self._mapNode.btnConfirm[1].onClick:AddListener(self.handlerConfirm) if self.handlerCancel then self._mapNode.btnCancel.onClick:RemoveListener(self.handlerCancel) end self.handlerCancel = nil local func_cancel = function() if self._panel.bBlur then self._mapNode.aniMessageBox:Play("t_window_04_t_out") end ctrlBase:DefaultClick(callbackCancel) end self.handlerCancel = ui_handler(self, func_cancel, self._mapNode.btnCancel) self._mapNode.btnCancel.onClick:AddListener(self.handlerCancel) if self.handlerClose then self._mapNode.btnClose.onClick:RemoveListener(self.handlerClose) end self.handlerClose = nil local func_close = function() if self._panel.bBlur then self._mapNode.aniMessageBox:Play("t_window_04_t_out") end ctrlBase:DefaultClick(callbackCancel) end self.handlerClose = ui_handler(self, func_close, self._mapNode.btnClose) self._mapNode.btnClose.onClick:AddListener(self.handlerClose) self._mapNode.aniMessageBox:Play("t_window_04_t_in", 0, 0) EventManager.Hit(EventId.TemporaryBlockInput, 0.3) end function MessageBoxItemCtrl:OnGridRefresh(goGrid, gridIndex) local nIndex = gridIndex + 1 local mapItem = self.tbItem[nIndex] local nInstanceId = goGrid:GetInstanceID() if not self.tbGridCtrl[nInstanceId] then self.tbGridCtrl[nInstanceId] = self:BindCtrlByNode(goGrid.transform:Find("btnGrid").gameObject, "Game.UI.TemplateEx.TemplateItemCtrl") end self.tbGridCtrl[nInstanceId]:SetItem(mapItem.nTid, nil, mapItem.nCount) end function MessageBoxItemCtrl:OnGridBtnClick(goGrid, gridIndex) local nIndex = gridIndex + 1 local mapItemCfgData = ConfigTable.GetData_Item(self.tbItem[nIndex].nTid) if mapItemCfgData and (mapItemCfgData.Type == GameEnum.itemType.Disc or mapItemCfgData.Type == GameEnum.itemType.Char) then return end self._mapNode.sv:SetScrollGridPos(gridIndex, 0.1, 1) EventManager.Hit(EventId.TemporaryBlockInput, 0.1) self:AddTimer(1, 0.1, function() UTILS.ClickItemGridWithTips(self.tbItem[nIndex].nTid, goGrid.transform:Find("btnGrid"), true, true, false) end, true, true, true) end function MessageBoxItemCtrl:Close() if self.bDisableSnap then return end if self.handlerClose then self.handlerClose() end end function MessageBoxItemCtrl:Awake() self.tbGridCtrl = {} end function MessageBoxItemCtrl:OnDisable() for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do self:UnbindCtrlByNode(objCtrl) self.tbGridCtrl[nInstanceId] = nil end self.tbGridCtrl = {} end function MessageBoxItemCtrl:OnBtnClick_Tips(btn, nIndex) local mapItemCfgData = ConfigTable.GetData_Item(self.tbItem[nIndex].nTid) if mapItemCfgData and (mapItemCfgData.Type == GameEnum.itemType.Disc or mapItemCfgData.Type == GameEnum.itemType.Char) then return end UTILS.ClickItemGridWithTips(self.tbItem[nIndex].nTid, btn.transform, true, true, false) end return MessageBoxItemCtrl