XUiBattery = XClass(nil, "XUiBattery") local GoodsId = 1 local RewardIndex = 2 local FoEver = 0 local FoEverText = CS.XTextManager.GetText("Forever") local OverdueText = CS.XTextManager.GetText("TaskStateOverdue") local BatteryOverSelectItemNumText = CS.XTextManager.GetText("BatteryOverSelectItemNum") local LONG_CLICK_TIME = 300 function XUiBattery:Ctor(ui) self.GameObject = ui.gameObject self.Transform = ui.transform self.RootUi = ui XTool.InitUiObject(self) self.IsLockLongClick = false self:FlushSelectShow() self:AutoAddListener() end function XUiBattery:OnRecycle() if self.Timers then XScheduleManager.UnSchedule(self.Timers) self.Timers = nil end end function XUiBattery:AutoAddListener() self.BtnClick.CallBack = function() self:OnBtnClick() end self.BtnMinusSelect.CallBack = function() self:OnBtnMinusSelectCallBack() end -- 添加长按事件 local btnClickPointer = self.BtnClick.gameObject:GetComponent("XUiPointer") if btnClickPointer then XUiButtonLongClick.New(btnClickPointer, 100, self, nil, self.OnBtnLongClick, nil, true) end local btnMinusSelect = self.BtnMinusSelect:GetComponent("XUiPointer") XUiButtonLongClick.New(btnMinusSelect, 10, self, nil, self.OnBtnMinusSelectLongClick, nil, true) end function XUiBattery:OnBtnLongClick(time) if self.IsCantUse then XUiManager.TipError(OverdueText) return end local selectItemCount = self.Base:GetSelectItemCountByIndex(self.Index) if selectItemCount >= self.BagItem.Count then XUiManager.TipMsg(BatteryOverSelectItemNumText) return end self:SetSelectedCount(selectItemCount + 1) end function XUiBattery:OnBtnClick() if not self.IsCantUse then local selectItemCount = self.Base:GetSelectItemCountByIndex(self.Index) if selectItemCount < self.BagItem.Count then self:SetSelectedCount(selectItemCount + 1) else XUiManager.TipMsg(BatteryOverSelectItemNumText) end else XUiManager.TipError(OverdueText) end end function XUiBattery:SetSelectedCount(count) local onecElectricNum = self:GetOneElectricCount() self.Base:SetSelectItemCount(self.Index, count, onecElectricNum) self:FlushSelectShow() end function XUiBattery:OnBtnMinusSelectCallBack() self.Base:SubSelectItemCountByIndex(self.Index) self:FlushSelectShow() end function XUiBattery:OnBtnMinusSelectLongClick(time) if self.IsLockLongClick or time <= LONG_CLICK_TIME then return end if time > LONG_CLICK_TIME then self.IsLockLongClick = true self.BtnMinusSelect:SetButtonState(CS.UiButtonState.Normal) end self.Base:ClearSelectItemCountByIndex(self.Index) self:FlushSelectShow() self.IsLockLongClick = false end function XUiBattery:UpdateGrid(bagItem, parent, index) self.Base = parent self.BagItem = bagItem self.Index = index self.GoodsShowParams = XGoodsCommonManager.GetGoodsShowParamsByTemplateId(self.BagItem.Data.Id) local count = bagItem.Count -- 数量 if self.TxtCount and count then self.TxtCount.text = CS.XTextManager.GetText("ShopGridCommonCount", count) end -- 图标 if self.RImgIcon then local icon = self.GoodsShowParams.Icon if icon and #icon > 0 then self.RImgIcon:SetRawImage(icon) end end if self.ImgQuality and self.GoodsShowParams.Quality then local qualityIcon = self.GoodsShowParams.QualityIcon if qualityIcon then parent:SetUiSprite(self.ImgQuality, qualityIcon) else XUiHelper.SetQualityIcon(parent, self.ImgQuality, self.GoodsShowParams.Quality) end end if self.BagItem.Data.Template.TimelinessType and self.BagItem.Data.Template.TimelinessType ~= FoEver then self.Timers = XScheduleManager.ScheduleForever(function() self:SetTime() end, XScheduleManager.SECOND) end self:SetTime() self:FlushSelectShow() end function XUiBattery:SetTime() local sprite if self.TxtTime then --海外修改,爆框问题 self.TxtTime.rectTransform.sizeDelta = CS.UnityEngine.Vector2(108,30) end if not self.BagItem.Data.Template.TimelinessType or self.BagItem.Data.Template.TimelinessType == FoEver then self.TxtTime.text = FoEverText sprite = XUiHelper.TagBgPath.Green self.IsCantUse = false else local LifeTime = self.BagItem.RecycleBatch and self.BagItem.RecycleBatch.RecycleTime - XTime.GetServerNowTimestamp() or XDataCenter.ItemManager.GetRecycleLeftTime(self.BagItem.Data.Id) if LifeTime and LifeTime > 0 then local tmpTime = XUiHelper.GetTime(LifeTime, XUiHelper.TimeFormatType.MAINBATTERY) self.TxtTime.text = tmpTime if LifeTime > CS.XDateUtil.ONE_DAY_SECOND * 7 then sprite = XUiHelper.TagBgPath.Green elseif LifeTime > CS.XDateUtil.ONE_DAY_SECOND then sprite = XUiHelper.TagBgPath.Yellow else sprite = XUiHelper.TagBgPath.Red end self.IsCantUse = false else self.TxtTime.text = OverdueText sprite = XUiHelper.TagBgPath.Red self.IsCantUse = true self:OnBtnMinusSelectCallBack() end end self.Base:SetUiSprite(self.TimeTag, sprite) end function XUiBattery:FlushSelectShow() if self.Base then local selectItemCount = self.Base:GetSelectItemCountByIndex(self.Index) self:SetSelectItemCountText(selectItemCount) self:CheckShowSelect() end end function XUiBattery:SetSelectItemCountText(selectItemCount) if self.TxtSelectHide then self.TxtSelectHide.text = selectItemCount end end function XUiBattery:GetOneElectricCount() local goodsList = XRewardManager.GetRewardList(self.BagItem.Data.Template.SubTypeParams[RewardIndex]) return goodsList[GoodsId].Count end function XUiBattery:CheckShowSelect() local selectItemCount = self.Base:GetSelectItemCountByIndex(self.Index) self.ImgSelect.gameObject:SetActiveEx(selectItemCount > 0) self.BtnMinusSelect.gameObject:SetActiveEx(selectItemCount > 0) self.TxtSelectHide.gameObject:SetActiveEx(selectItemCount > 0) end return XUiBattery