local UIHonorOrderReward = UIViewClass() local EventSystem = require('Event/EventSystem') local MinLoadCount = 7 local NeedOptimizeCount = 20 function UIHonorOrderReward:OnOpened(context) self:RegistSystemEvent(EventID.UI_HonorOrder_RefreshRewardInfo, self.UpdateLevelInfo) -- 领奖后刷新界面 self:RegistSystemEvent(EventID.UI_HonorOrder_UnOpenActiveRefreshUI, self.UpdateLevelInfo) -- 活动结束刷新界面 self:RegistSystemEvent(EventID.UI_HonorOrder_ShowRenderModel, self.ShowRenderModel) self:RegistSystemEvent(EventID.UI_HonorOrder_HideRenderModel, self.HideRenderModel) self.curLoadTopIndex = 0 self.activityId = MDL.HonorOrder.HonorOrderActivityId self.cellIndexList = {} self.isInit = true UIUtils.SetActive(self.group_Show, false) self.btn_Buy:SetGray(true) -- 先保存一次字色 self.btn_Get:SetGray(true) self.btn_Up:SetGray(true) UIUtils.SetActive(self.renderModel, false) self:UpdateLevelInfo() self:StartRepeatFunc(self.ShowUIRender, 0.1, 1) UIUtils.SetActive(self.btn_Play, self.curHonorOrderConstData.PromotionalVideo ~= "") end function UIHonorOrderReward:ShowUIRender() UIUtils.SetActive(self.renderModel, true) CTL.HonorOrder.Show3DModel(self.renderModel, self.curHonorOrderConstData) end function UIHonorOrderReward:OnButtonClicked(comp) if comp == self.btn_Reward then -- 奖励预览 EventSystem.Dispatch(EventID.UI_HonorOrder_OpenRewardList) elseif comp == self.btn_Play then -- 播放大奖视频 UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonPlayMovie, {MovieName = self.curHonorOrderConstData.PromotionalVideo}) elseif comp == self.item_Normal.event_Click then -- 普通奖励 UTL.ItemTips.ShowCommonTipsById(self.seniorItemData.OrdinaryItem) elseif comp == self.item_Honor.event_Click then -- 节点奖励 UTL.ItemTips.ShowCommonTipsById(self.seniorItemData.SeniorItem) end if MDL.HonorOrder.GetCurHonorOrderIsOpen() then if comp == self.btn_Buy then -- 购买等级 self:BuyHonorOrderLevel() elseif comp == self.btn_Get then -- 一键领取 if MDL.HonorOrder.HaveCanReceive() then MDL.HonorOrder.HonorOrderAwardAutoGetRequest() else CTL.Tips.AddTipsMsg(Const_IDS["IDS_HonorOrder_ZanWuJiangLi"]) -- 暂无可领奖励 end elseif comp == self.btn_Up or comp == self.btn_Gold then -- 购买战令 if not self.curHonorOrderInfo.IsSenior then EventSystem.Dispatch(EventID.UI_HonorOrder_OpenRewardPurchase) end end else CTL.Tips.AddTipsMsg(Const_IDS["IDS_ERRORCODE_174_WarnCode_Activity_EndWrongHint"]) -- 活动已结束 end end function UIHonorOrderReward:UpdateLevelInfo() self.curHonorOrderConstData = MDL.HonorOrder.GetCurHonorOrderConstData() self.curHonorOrderInfo = MDL.HonorOrder.GetAwardInfo() self.isMaxLevel = self.curHonorOrderInfo.HonorLv == self.curHonorOrderConstData.MaxLevel UIUtils.SetLabel(self.txt_Lv, self.curHonorOrderInfo.HonorLv) -- 战令等级 local curExp = 0 local exp = self.curHonorOrderConstData.EachLevelExp if self.isMaxLevel then self.slider_Score.value = 1 curExp = exp else self.slider_Score.value = self.curHonorOrderInfo.HonorExp/exp curExp = self.curHonorOrderInfo.HonorExp end UIUtils.SetLabel(self.txt_Num, string.format("%s/%s", UTL.Color.FormatTextByColor("e8d588", curExp), exp).." ") -- 战令等级经验值 local isSenior = self.curHonorOrderInfo.IsSenior self.state_Tip:SetState(self.isMaxLevel and 1 or 0) UIUtils.SetActive(self.group_GoldLock, not isSenior) -- 是否购买战令 UIUtils.SetActive(self.btn_Buy, not self.isMaxLevel) -- 购买等级按钮 self:RefreshLevelList() local isOpen = MDL.HonorOrder.GetCurHonorOrderIsOpen() self.btn_Get:SetRedPoint(isOpen and MDL.HonorOrder.HaveCanReceive()) self.btn_Buy:SetGray(not isOpen) self.btn_Get:SetGray(not isOpen) self.btn_Up:SetGray(isSenior or not isOpen) self.state_up:SetState(isSenior and 0 or 1) -- 购买战令按钮文字IDS切换 if isOpen and not isSenior then self.effect_Btn:PlayUIEffect() else self.effect_Btn:StopUIEffect() end local grandID = MDL.HonorOrder.GetGrandRewardInfo().SeniorItem local itemData = DataSheetManager.ItemData:GetDataByID(grandID) UIUtils.SetLabel(self.label_Awards, string.FormatByIdsId(Const_IDS.IDS_HonorOrder_DaJiangTiShi, UIUtils.GetLocalizedTxt(Const_IDS[itemData.Name]))) -- 大奖提示 end --特效UI层级太高,关闭其他子页面时再显示 function UIHonorOrderReward:ShowSomeEffectUI() UIUtils.SetActive(self.group_Buttom, true) self:RefreshLevelList() end --特效UI层级太高,打开其他子页面时需要隐藏 function UIHonorOrderReward:HideSomeEffectUI() UIUtils.SetActive(self.group_Buttom, false) end function UIHonorOrderReward:RefreshLevelList() self.loop_Reward:ClearCells() local rewardList = MDL.OperationActivity.HonorOrderReward:GetDataByActivityID_HonorOrderID_RewardID(self.curHonorOrderInfo.ActivityId, self.curHonorOrderInfo.HonorOrderId) local startIndex = MDL.HonorOrder.GetMoveIndex() if startIndex > NeedOptimizeCount then local count = #rewardList if count - startIndex <= MinLoadCount then startIndex = count - MinLoadCount self.curLoadTopIndex = startIndex - 1 for i = startIndex, count do self.loop_Reward:AddData(rewardList[i], 0) end self.loop_Reward:AddData({ isAdditional = true }, 1) self.curContentX = self.loop_Reward.content:GetLocalPosition() self.loop_Reward:MoveIndex(MinLoadCount - (count - MDL.HonorOrder.GetMoveIndex())) else self.curLoadTopIndex = startIndex - 1 for i = startIndex, count do self.loop_Reward:AddData(rewardList[i], 0) end self.loop_Reward:AddData({ isAdditional = true }, 1) self.curContentX = self.loop_Reward.content:GetLocalPosition() self.loop_Reward:MoveIndex(0) end else self.curLoadTopIndex = 0 for k, v in ipairs(rewardList) do self.loop_Reward:AddData(v, 0) end self.loop_Reward:AddData({ isAdditional = true }, 1) self.loop_Reward:MoveIndex(MDL.HonorOrder.GetMoveIndex() - 1) end end function UIHonorOrderReward:OnScrollTop(comp, _isTop) --这里是为了判断此次拖拽到底是向右拖拽 还是向左拖拽 local curContentX = self.loop_Reward.content:GetLocalPosition() if _isTop and self.curLoadTopIndex > 0 and self.curContentX < curContentX then local rewardList = MDL.OperationActivity.HonorOrderReward:GetDataByActivityID_HonorOrderID_RewardID(self.curHonorOrderInfo.ActivityId, self.curHonorOrderInfo.HonorOrderId) self.loop_Reward:ClearCells() for i, v in ipairs(rewardList) do self.loop_Reward:AddData(v, 0) end local tmpValue = self.curLoadTopIndex self.curLoadTopIndex = 0 self.loop_Reward:AddData({isAdditional = true }, 1) self.loop_Reward:MoveIndex(tmpValue - 2) end end --region ************************ Loop ******************************** function UIHonorOrderReward:OnCellInit(scrollRect, index, cellTable, data) if data.isAdditional then if self.isMaxLevel then if self.curHonorOrderInfo.HonorExp > 0 and self.curHonorOrderInfo.HonorExp % self.curHonorOrderConstData.EachLevelExp == 0 then cellTable.img_ProgressBar.fillAmount = 1 else cellTable.img_ProgressBar.fillAmount = (self.curHonorOrderInfo.HonorExp % self.curHonorOrderConstData.EachLevelExp) / self.curHonorOrderConstData.EachLevelExp end UIUtils.SetLabel(cellTable.txt_Num, string.format("%s/%s", UTL.Color.FormatTextByColor("e8d588", self.curHonorOrderInfo.HonorExp), self.curHonorOrderConstData.EachLevelExp)) -- 战令等级经验值 if self.curHonorOrderInfo.HonorExp >= self.curHonorOrderConstData.EachLevelExp then cellTable.effect_Reward:PlayUIEffect() else cellTable.effect_Reward:StopUIEffect() end else cellTable.img_ProgressBar.fillAmount = 0 UIUtils.SetLabel(cellTable.txt_Num, string.format("%s/%s", UTL.Color.FormatTextByColor("e8d588", 0), self.curHonorOrderConstData.EachLevelExp)) -- 战令等级经验值 end else table.insert(self.cellIndexList, index + 1 + self.curLoadTopIndex) self:SetOrdinaryReward(cellTable, data) cellTable.effect_Normal:SetSortingCanvas(self.group_Show) local isOpen = MDL.HonorOrder.GetCurHonorOrderIsOpen() if isOpen and MDL.HonorOrder.IsCanReceiveByRewardType_Level(MDL.HonorOrder.RewardType.Ordinary, data.RewardID) then cellTable.effect_Normal:PlayUIEffect() else cellTable.effect_Normal:StopUIEffect() end self:SetAdvancedReward(cellTable, data) if self.curHonorOrderInfo.IsSenior and isOpen and MDL.HonorOrder.IsCanReceiveByRewardType_Level(MDL.HonorOrder.RewardType.Advanced, data.RewardID) then cellTable.effect_Honor:SetSortingCanvas(self.group_Show) cellTable.effect_Honor:PlayUIEffect() else cellTable.effect_Honor:StopUIEffect() end end if #self.cellIndexList > 5 then self:CheckShowSeniorIndex() else UIUtils.SetActive(self.group_Show, false) end end function UIHonorOrderReward:OnCellClicked(scrollRect, index, cellTable, target, data) if data.isAdditional then if cellTable.btn_Info == target then UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonNoteView, {id = LuaConst.NoteID.HonorOrderAddedReward}) else if self.isMaxLevel and cellTable.btn_ExtraReward == target and self.curHonorOrderInfo.HonorExp/self.curHonorOrderConstData.EachLevelExp >= 1 then if not MDL.HonorOrder.GetCurHonorOrderIsOpen() then CTL.Tips.AddTipsMsg(Const_IDS["IDS_ERRORCODE_174_WarnCode_Activity_EndWrongHint"]) -- 活动已结束 return end MDL.HonorOrder.HonorOrderAwardGetRequest(MDL.HonorOrder.TaskType.Extra, 1) end end else if cellTable.item_Normal.event_Click == target then local isAlreadyReceived = MDL.HonorOrder.IsAlreadyReceivedByRewardType_Level(MDL.HonorOrder.RewardType.Ordinary, data.RewardID) local isCanReceive = MDL.HonorOrder.IsCanReceiveByRewardType_Level(MDL.HonorOrder.RewardType.Ordinary, data.RewardID) if isCanReceive and (not isAlreadyReceived) then if not MDL.HonorOrder.GetCurHonorOrderIsOpen() then UTL.ItemTips.ShowCommonTipsById(data.OrdinaryItem) return end MDL.HonorOrder.HonorOrderAwardGetRequest(MDL.HonorOrder.RewardType.Ordinary, data.RewardID) else UTL.ItemTips.ShowCommonTipsById(data.OrdinaryItem) end elseif cellTable.item_Honor.event_Click == target then local isAlreadyReceived = MDL.HonorOrder.IsAlreadyReceivedByRewardType_Level(MDL.HonorOrder.RewardType.Advanced, data.RewardID) local isCanReceive = MDL.HonorOrder.IsCanReceiveByRewardType_Level(MDL.HonorOrder.RewardType.Advanced, data.RewardID) if self.curHonorOrderInfo.IsSenior and isCanReceive and (not isAlreadyReceived) then if not MDL.HonorOrder.GetCurHonorOrderIsOpen() then UTL.ItemTips.ShowCommonTipsById(data.SeniorItem) return end MDL.HonorOrder.HonorOrderAwardGetRequest(MDL.HonorOrder.RewardType.Advanced, data.RewardID) else UTL.ItemTips.ShowCommonTipsById(data.SeniorItem) end end end end --endregion ************************ Loop ******************************** function UIHonorOrderReward:BuyHonorOrderLevel() if self.isMaxLevel then CTL.Tips.AddTipsMsg(Const_IDS.IDS_LevelMax_Tip) return end --弹出购买道具框 UIManager.OpenView(Const_UI_Lua.UIEnum.UIItemBuyPanel, {isHonorOrder = true}) end function UIHonorOrderReward:CheckShowSeniorIndex() local showMaxIndex = 0 local seniorRewardInfoList = MDL.HonorOrder.GetSeniorRewardInfoList() local firstSeniorRewardID = seniorRewardInfoList[1].RewardID if self.isInit then showMaxIndex = firstSeniorRewardID < self.cellIndexList[#self.cellIndexList] and firstSeniorRewardID or self.cellIndexList[#self.cellIndexList] self.isInit = false else if #self.cellIndexList > 5 then if self.cellIndexList[#self.cellIndexList] < self.cellIndexList[#self.cellIndexList - 1] then local number = self.cellIndexList[#self.cellIndexList] + 5 self.cellIndexList = {} for i = 1, 5 do self.cellIndexList[i] = number - i end elseif self.cellIndexList[#self.cellIndexList] == self.cellIndexList[#self.cellIndexList - 1] then table.remove(self.cellIndexList, #self.cellIndexList) else table.remove(self.cellIndexList, 1) end end if self.cellIndexList[#self.cellIndexList] <= self.cellIndexList[#self.cellIndexList - 1] then showMaxIndex = self.cellIndexList[#self.cellIndexList] + 4 elseif self.cellIndexList[#self.cellIndexList] == self.cellIndexList[#self.cellIndexList - 1] then showMaxIndex = math.max(table.unpack(self.cellIndexList)) else showMaxIndex = self.cellIndexList[#self.cellIndexList] end end UIUtils.SetActive(self.group_Show, false) if showMaxIndex ~= seniorRewardInfoList[#seniorRewardInfoList].RewardID then for k,v in pairs(seniorRewardInfoList) do if (k == 1 and v.RewardID <= firstSeniorRewardID and showMaxIndex <= firstSeniorRewardID) then self:ShowSeniorItem(v) return elseif k == #seniorRewardInfoList then if v.RewardID >= showMaxIndex then self:ShowSeniorItem(v) return end else if v.RewardID >= showMaxIndex and seniorRewardInfoList[k - 1].RewardID <= showMaxIndex then self:ShowSeniorItem(v) return end end end end end function UIHonorOrderReward:ShowSeniorItem(data) self.seniorItemData = data UIUtils.SetActive(self.group_Show, true) self:SetOrdinaryReward(self, data) self:SetAdvancedReward(self, data) end function UIHonorOrderReward:SetOrdinaryReward(cellTable, data) UIUtils.SetLabel(cellTable.txt_Title, data.RewardID > self.curHonorOrderInfo.HonorLv and UTL.Color.FormatTextByColor("AEB0B6", string.FormatByIdsId(Const_IDS.IDS_HonorOrder_JieDianJiangLi, data.RewardID)) or UTL.Color.FormatWhiteColor(string.FormatByIdsId(Const_IDS.IDS_HonorOrder_JieDianJiangLi, data.RewardID))) -- 战令等级 UTL.Item.SetItemCell(cellTable.item_Normal, data.OrdinaryItem, data.OrdinaryNum) -- 普通奖励 local isAlreadyReceived = MDL.HonorOrder.IsAlreadyReceivedByRewardType_Level(MDL.HonorOrder.RewardType.Ordinary, data.RewardID) UIUtils.SetActive(cellTable.img_NormalMask, isAlreadyReceived or data.RewardID > self.curHonorOrderInfo.HonorLv) -- 是否已领取 UIUtils.SetActive(cellTable.img_NormalGetIcon, isAlreadyReceived) -- 是否已领取 end function UIHonorOrderReward:SetAdvancedReward(cellTable, data) UTL.Item.SetItemCell(cellTable.item_Honor, data.SeniorItem, data.SeniorNum) -- 典藏奖励 local isAdvancedAlreadyReceived = MDL.HonorOrder.IsAlreadyReceivedByRewardType_Level(MDL.HonorOrder.RewardType.Advanced, data.RewardID) UIUtils.SetActive(cellTable.img_HonorMask, isAdvancedAlreadyReceived or (self.curHonorOrderInfo.IsSenior and data.RewardID > self.curHonorOrderInfo.HonorLv)) -- 是否已领取 UIUtils.SetActive(cellTable.img_HonorGetIcon, isAdvancedAlreadyReceived) -- 是否已领取 UIUtils.SetActive(cellTable.group_Lock, not self.curHonorOrderInfo.IsSenior) -- 是否购买战令 end function UIHonorOrderReward:ShowRenderModel() self:ShowSomeEffectUI() CTL.HonorOrder.Show3DModel(self.renderModel, self.curHonorOrderConstData) end function UIHonorOrderReward:HideRenderModel() self:HideSomeEffectUI() self.renderModel:DisposeAll() end return UIHonorOrderReward