--- 累充礼包界面 local UIHeroLightEffectTool = require "View/Common/UIHeroLightEffectTool" local UITotalTopUp = UIViewClass() local EventSystem = require 'Event/EventSystem' local TYPE_EMPTY = "" local TYPE_NUMBER = "number" local SHOW_TITLE_LEVEL = DataSheetManager.ConstData:GetDataByID("TotalTopUpShowTitleLevel").IntValue local SHOW_TITLE_150w = DataSheetManager.ConstData:GetDataByID("TotalTopUpShowTitle150w").IntValue local LvBuFaXingLightEffectId = 204001 --吕布法相光效id function UITotalTopUp:OnCreated() self.heroLightEffectDatas = UIHeroLightEffectTool.CreateHeroLightEffectDatas(true) self.modelComponentDataHandle = UTL.UIRender.CreateModelComponentDatas(self.newRenderModel) end function UITotalTopUp:OnOpened(context) self.dataArray = {} self:RegistSystemEvent(EventID.UI_TotalTopUp_RefreshInfo, self.RefreshUI) -- 领取奖励刷新列表状态 self:RegistSystemEvent(EventID.UI_TotalTopUp_RefreshGetBtn, self.RefreshGetBtn) -- 领取刷新 self.parentContext = context.parentContext self:RefreshUI() self.loop_Goals:SelectIndex(self.parentContext.subIndex or self.ChargeRewardDefaultIndex,true) end function UITotalTopUp:OnClosed() UIHeroLightEffectTool.StopHeroLightEffect(self.heroLightEffectDatas) self.heroLightEffectDatas = nil self:ClearAllRenderTextures() UTL.UIRender.DisposeModelComponentData(self.modelComponentDataHandle) end function UITotalTopUp:RefreshUI() self:InitData() self:UpdateInfo() --充值面板 self:RefreshLoopGoals() end function UITotalTopUp:RefreshGetBtn() self.loop_Goals:SelectIndex(MDL.MultilevelRecharge.GetLastRewardReqId() - 1, true) end function UITotalTopUp:InitData() self.chargeStateIndex = MDL.MultilevelRecharge.GetCurrentChargeStateId() - 1 self.ChargeRewardDefaultIndex = MDL.MultilevelRecharge.GetChargeRewardDefaultState() - 1 self.creditAmount = MDL.Currency.GetTotalRechargeCredit() self.curSelectIndex = nil end function UITotalTopUp:RefreshLoopGoals() local cellNum = DataSheetManager.TotalTopUp:GetDataByID(MDL.MultilevelRecharge.GetCurrentChargeStateId()).Preview cellNum = cellNum + MDL.MultilevelRecharge.GetCurrentChargeStateId() for i = 1, cellNum do self.dataArray[i] = i end for i = cellNum + 1, #self.dataArray do self.dataArray[i] = nil end self.loop_Goals:ReloadAll(self.dataArray) end function UITotalTopUp:OnCellInit(scrollRect, index, cellTable, data) if scrollRect == self.loop_Goals then data = DataSheetManager.TotalTopUp:GetDataByID(index + 1) if data == nil then return end UIUtils.SetLabelText(cellTable.txt_Unselected, Const_IDS[data.Title]) UIUtils.SetLabelText(cellTable.txt_Selected, Const_IDS[data.Title]) cellTable.cell:SetRedPoint(CTL.MultilevelRecharge.IsChargeStateHasRedPoint(index + 1)) UIUtils.SetActive(cellTable.group_Now, index == self.chargeStateIndex) end end function UITotalTopUp:OnCellClicked(scrollRect, index, cellTable, target, data) if scrollRect == self.loop_Goals then if self.curSelectIndex == index then return end self.newRenderModel.transform:SetLocalPosition(-50, 0, 0) --恢复RT位置 if self.curSelectIndex ~= index then self.curSelectIndex = index end data = DataSheetManager.TotalTopUp:GetDataByID(index + 1) self.parentContext.subIndex = index self.loop_Goals:RefreshCells(true) -- 判断 当前是已领取、未领取、未到达 local isReceived = MDL.MultilevelRecharge.IsGetReward(index + 1) local isNotReached = index >= self.chargeStateIndex UIUtils.SetActive(self.group_Preview.gameObject, isReceived) UIUtils.SetActive(self.group_Detail.gameObject, not isReceived) if not isReceived and not isNotReached then UIUtils.SetLabelText(self.lab_Preview, Const_IDS[data.ShowResourceTips]) self.obj_State:SetState(2) elseif isNotReached then self.obj_State:SetState(1) UIUtils.SetLabelText(self.lab_Preview, Const_IDS[data.ShowResourceTips]) else self.obj_State:SetState(0) end -- 处理金额超出情况,档位未最后一档 if MDL.Currency.GetTotalRechargeCredit() >= MDL.MultilevelRecharge.GetLastChargeAmountVal() then if isReceived then self.obj_State:SetState(0) else self.obj_State:SetState(2) end end local rewardText = string.format(UIUtils.GetLocalizedTxt(Const_IDS["IDS_TotalTopUp_RewardTitle"]), UIUtils.GetLocalizedTxt(Const_IDS[data.Title])) UIUtils.SetLabel(self.txt_RewardTitle, rewardText) -- 模型展示 self:UpdateRenderShowInfo(data.ID) -- 设置奖励图标 self:SetRewards(data.Reward) --充值光效 UIHeroLightEffectTool.StopHeroLightEffect(self.heroLightEffectDatas) if data.LightEffectID > 0 then self:ChangePreviewLightEffect(data.LightEffectID) end --定制称号 if index + 1 == SHOW_TITLE_LEVEL then UIUtils.SetActive(self.titleTemplate.gameObject, true) local titleConfig = DataSheetManager.Title:GetDataByID(SHOW_TITLE_150w) CTL.Title.SetTitleShow(self.titleTemplate, titleConfig) else UIUtils.SetActive(self.titleTemplate.gameObject, false) end end end function UITotalTopUp:UpdateInfo() -- 设置充值档位文字 local data = DataSheetManager.TotalTopUp:GetDataByID(MDL.MultilevelRecharge.GetCurrentChargeStateId()) UIUtils.SetLabelText(self.txt_Gear, Const_IDS[data.Title]) -- 设置充值金额 local targetCredit = data.Amount self.slider_Score.value = self.creditAmount / targetCredit local str = string.format("%d/%d", self.creditAmount, targetCredit) UIUtils.SetLabel(self.txt_Num, str) end function UITotalTopUp:SetRewards(rewardId) local rewardData = DataSheetManager.TotalTopUpReward:GetDataByID(rewardId) for i, v in pairs(rewardData.Item_Table) do local contentItem = self.reward_Content[i] if not contentItem then contentItem = self:InstantiateCollection(self.reward_Content, self.reward_Item.gameObject) end contentItem.ItemID = v.ItemID UTL.Item.SetItemCell(contentItem, v.ItemID, v.ItemNum) UIUtils.SetActive(contentItem.gameObject, true) end for i = #rewardData.Item_Table + 1 , #self.reward_Content do UIUtils.SetActive(self.reward_Content[i].gameObject, false) end end function UITotalTopUp:UpdateRenderShowInfo(stateId) local info = DataSheetManager.TotalTopUp:GetDataByID(stateId) local showType = info.ShowType UIUtils.SetActive(self.newRenderModel, showType ~= CTL.MultilevelRecharge.Reward_Type.Picture and showType ~= TYPE_EMPTY) UIUtils.SetActive(self.renderModel, showType ~= CTL.MultilevelRecharge.Reward_Type.Picture and showType ~= TYPE_EMPTY) UIUtils.SetActive(self.img_Item, showType == CTL.MultilevelRecharge.Reward_Type.Picture) self:ClearAllRenderTextures() UTL.UIRender.DisposeModelComponentData(self.modelComponentDataHandle, true) self.renderModel:DisposeAll() if showType == CTL.MultilevelRecharge.Reward_Type.HeroAndFollower then self:ShowHeroAndFollower(info) elseif showType == CTL.MultilevelRecharge.Reward_Type.Hero then self:ShowHeroModel(info) elseif showType == CTL.MultilevelRecharge.Reward_Type.Horse then self:ShowHorseModel(info) elseif showType == CTL.MultilevelRecharge.Reward_Type.Treasure then self:ShowTreasureModel(info) elseif showType == CTL.MultilevelRecharge.Reward_Type.Weapon then self:ShowWeaponModel(info) elseif showType == CTL.MultilevelRecharge.Reward_Type.Picture then local path = info.ShowResource UIUtils.SetImageByAssetBundle(self.img_Item, path) if info.PictureParam ~= TYPE_EMPTY then -- TODO 根据配置 调整图片大小 else self.img_Item:SetNativeSize() end end end function UITotalTopUp:ShowWeaponModel(data) local weaponId = tonumber(data.ShowResource) local weaponWearAppearanceID = data.WeaponAppearanceID local modelParam = data.RenderModelID if type(weaponId) ~= TYPE_NUMBER then UIUtils.SetActive(self.newRenderModel, false) UIUtils.SetActive(self.renderModel, false) return end UIUtils.SetActive(self.newRenderModel, GameAppInfo.IsVersionGreaterThan19000()) UIUtils.SetActive(self.renderModel, not GameAppInfo.IsVersionGreaterThan19000()) if GameAppInfo.IsVersionGreaterThan19000() then UTL.UIRender.CreateMagicWeaponRTByWeaponId(self.modelComponentDataHandle, weaponId, weaponWearAppearanceID, modelParam) else if weaponWearAppearanceID == 0 then self.renderModel:ShowWeapon(UTL.UIRender.LoadWeaponWihoutAppearance(weaponId, modelParam)) else self.renderModel:ShowWeapon(UTL.UIRender.LoadShowWeaponDataWithAppearance(weaponWearAppearanceID, modelParam)) end end end function UITotalTopUp:ShowHorseModel(data) local horseId = tonumber(data.ShowResource) local modelParam = data.RenderModelID if type(horseId) ~= TYPE_NUMBER then UIUtils.SetActive(self.newRenderModel, false) UIUtils.SetActive(self.renderModel, false) return end UIUtils.SetActive(self.newRenderModel, GameAppInfo.IsVersionGreaterThan19000()) UIUtils.SetActive(self.renderModel, not GameAppInfo.IsVersionGreaterThan19000()) local config = DataSheetManager.HorseData:GetDataByHorseID(horseId) if not UTL.UIRender.CanLoadHorse(config) then horseId = 1 --没下好就用默认模型 end if GameAppInfo.IsVersionGreaterThan19000() then UTL.UIRender.CreateHorseRenderTexture(self.modelComponentDataHandle, horseId, modelParam) else local horseModeData = DataSheetManager.HorseModelData:GetDataByHorseModelID(config.HorseModelID) self.renderModel:ShowHorse( horseModeData.HorseModel, modelParam, config.HorsePreviewModelLight, config.ActivationModelRot, config.ModelAnim, horseModeData.HorseShowEffect ) end CTL.Sound.PlayGameSound(config.HorseShowAudio) end function UITotalTopUp:ShowTreasureModel(data) local treasureId = tonumber(data.ShowResource) if type(treasureId) ~= TYPE_NUMBER then UIUtils.SetActive(self.newRenderModel, false) UIUtils.SetActive(self.renderModel, false) return end UIUtils.SetActive(self.newRenderModel, GameAppInfo.IsVersionGreaterThan19000()) UIUtils.SetActive(self.renderModel, not GameAppInfo.IsVersionGreaterThan19000()) if GameAppInfo.IsVersionGreaterThan19000() then UTL.UIRender.CreateTreasureRenderTexture(self.modelComponentDataHandle, treasureId, data.RenderModelID) else local configParamId = data.RenderModelID local treasureData = DataSheetManager.TreasureData:GetDataByTreasureID(treasureId) self.renderModel:ShowTreasure( treasureData.TreasureMode, configParamId, treasureData.TreasurePreviewModelLight, treasureData.TreasureAnim, treasureData.TreasureShowEffect ) end end function UITotalTopUp:ShowHeroAndFollower(data) self:ShowHeroModel(data) --跟随模型 UTL.UIRender.CreateHeroFollowerTexture(self.modelComponentDataHandle, data.ModelID) end function UITotalTopUp:ShowHeroModel(data) local heroId = tonumber(data.ShowResource) local heroApperanceId = data.HeroAppearanceID local weaponAppearanceID = data.WeaponAppearanceID local configId = data.RenderModelID if type(heroId) ~= TYPE_NUMBER then UIUtils.SetActive(self.newRenderModel, false) UIUtils.SetActive(self.renderModel, false) return end UIUtils.SetActive(self.newRenderModel, true) UIUtils.SetActive(self.renderModel, false) if heroApperanceId>0 then UTL.UIRender.CreateHeroRenderTexture(self.modelComponentDataHandle, heroId, heroApperanceId, configId, data.Light) UTL.UIRender.HeroEquipMagicWeapon(self.modelComponentDataHandle, heroId, weaponAppearanceID, 15, true, true) else UTL.UIRender.CreateHeroRenderTexture(self.modelComponentDataHandle, heroId, 0, configId) UTL.UIRender.HeroEquipMagicWeapon(self.modelComponentDataHandle, heroId, 0, 0, true, true) end UTL.UIRender.ShowOrHideHeroModel(self.modelComponentDataHandle, not data.IsHideHero) end function UITotalTopUp:OnButtonClicked(comp) if comp == self.btn_Recharge then CTL.ItemSources.ExecuteSourceFunctionById(MDL.ItemSources.SourceType.Recharge) elseif comp == self.btn_Info then UIUtils.SetActive(self.tips_Object, true) elseif comp == self.close_btn then UIUtils.SetActive(self.tips_Object, false) elseif comp == self.btn_Get then local id = self.curSelectIndex + 1 MDL.MultilevelRecharge.SetlastRewardReqId(id) MDL.MultilevelRecharge.ReceiveMultilevelChargeGiftRequest(id) end -- 奖励物品图标点击 for i, v in ipairs(self.reward_Content) do if comp == v.event_Click then UTL.ItemTips.ShowCommonTipsById(v.ItemID) end end end -- 预览外观光效 function UITotalTopUp:ChangePreviewLightEffect(lightEffectID) if self.newRenderModel.gameObject.activeInHierarchy then UIHeroLightEffectTool.PlayHeroLightEffect(self.heroLightEffectDatas,self, 0, UIHeroLightEffectTool.PlayLightEffectFuncEnum.PlayerModel, lightEffectID , nil) --特殊处理吕布法相,提高RT位置 if lightEffectID == LvBuFaXingLightEffectId then self.newRenderModel.transform:SetLocalPosition(-50, 300, 0) end else UIHeroLightEffectTool.PlayHeroLightEffect(self.heroLightEffectDatas,self.renderModel, 0, UIHeroLightEffectTool.PlayLightEffectFuncEnum.PlayerModel, lightEffectID , nil) end end function UITotalTopUp:PlayModelEffect(index, effectPath) return UTL.UIRender.PlayPsEffect(self.modelComponentDataHandle, effectPath) end function UITotalTopUp:ClearAllRenderTextures() UTL.UIRender.DisposeMagicWeaponOther(self.modelComponentDataHandle) UTL.UIRender.DisposePlayerModel(self.modelComponentDataHandle) UTL.UIRender.DisposeHorseRenderTexutureOther(self.modelComponentDataHandle) end return UITotalTopUp