--[[
* @ClassName OperatingPanel
* @Description 等级特权面板
* @Date 2019/5/27 11:14
* @Author MagicianJoker, fengliudianshao@outlook.com
* @Copyright Copyright (c) 2019, MagicianJoker
--]]
-- local VipTaskListItem = require("Modules/Vip/VipTaskListItem")
---@class VipPanelV2
local VipPanelV2 = quick_class("VipPanelV2", BasePanel)
local this = VipPanelV2
local kMaxGiftCount, kMaxTaskCount = 4, 5
local ReceiveTypeIconDef = {
"t_tequan_tequandengjilibao", --特权等级礼包
"t_tequan_meirijiangli", --每日礼包
}
local orginLayer
local GameSetting = ConfigManager.GetConfig(ConfigName.GameSetting)
local allRewardItemPres = {}
function VipPanelV2:InitComponent()
this.spLoader = SpriteLoader.New()
orginLayer = 0
self.bg = Util.GetGameObject(self.transform, "bg")
if Screen.width / Screen.height < 1080 / 1920 then
screenAdapte(self.bg)
end
if not this.playerInfoView then
this.playerInfoView = SubUIManager.Open(SubUIConfig.PlayerInfoView, this.transform)
this.playerInfoView:SetPrivilegeShow(true)
end
-- this.BtView = SubUIManager.Open(SubUIConfig.BtView, self.transform)
this.UpView = SubUIManager.Open(SubUIConfig.UpView, self.transform)
self.BtnBack = Util.GetGameObject(self.transform, "btnBack")
-- this.helpBtn = Util.GetGameObject(self.gameObject, "helpBtn")
-- this.helpPosition=this.helpBtn:GetComponent("RectTransform").localPosition
--topPart
self.topPart = Util.GetGameObject(self.transform, "frame/topPart")
self.BtnLeft = Util.GetGameObject(self.transform, "leftBtn")
self.BtnRight = Util.GetGameObject(self.transform, "rightBtn")
self.BtnTip = Util.GetGameObject(self.transform, "btnTip")
self.curLevel = Util.GetGameObject(self.transform, "btnTip/bg/vip"):GetComponent("Image")
self.StateRoot = Util.GetGameObject(self.topPart, "stateRoot")
self.curStatePart = Util.GetGameObject(self.StateRoot, "curState")
self.currentLvNum=Util.GetGameObject(self.curStatePart,"title/num"):GetComponent("Text")
self.progressBar = Util.GetGameObject(self.curStatePart, "progressBar"):GetComponent("Slider")
self.progressText = Util.GetGameObject(self.curStatePart, "progressBar/Text"):GetComponent("Text")
--midPart
self.midPart = Util.GetGameObject(self.transform, "midPart")
self.giftRoot = Util.GetGameObject(self.midPart, "giftRoot")
self.giftTypeIcon = Util.GetGameObject(self.giftRoot, "title"):GetComponent("Image")
self.giftItemContent = Util.GetGameObject(self.giftRoot, "grid")
self.giftItemList = {}
for i = 1, kMaxGiftCount do
self.giftItemList[i] = Util.GetGameObject(self.giftRoot, "grid/prop_"..i)--SubUIManager.Open(SubUIConfig.ItemView, self.giftItemContent.transform)
end
self.effect = Util.GetGameObject(self.giftRoot, "UI_Effect_VipPanel")
effectAdapte(self.effect)
self.BtnReceive = Util.GetGameObject(self.topPart, "btnGet")
self.BtnReceiveText = Util.GetGameObject(self.BtnReceive, "Text"):GetComponent("Text")
self.receiveRedPoint = Util.GetGameObject(self.BtnReceive,"redPoint")
--privilege
self.privilegeTitle = Util.GetGameObject(self.transform, "frame/topPart/privilegeRoot/title"):GetComponent("Text")
self.privilegeContent = Util.GetGameObject(self.transform, "frame/topPart/privilegeRoot/privilegeList/viewPort/content")
self.privilegeItem = Util.GetGameObject(self.privilegeContent, "itemPro")
self.privilegeItem.gameObject:SetActive(false)
self.privilegeList = {}
--bottomPart
self.maxLv = Util.GetGameObject(self.transform, "bottomPart/maxLv")
self.btnLvUp = Util.GetGameObject(self.transform, "bottomPart/btnLvUp")
self.taskList = Util.GetGameObject(self.transform, "bottomPart/taskList")
self.taskItemList = {}
for i = 1, self.taskList.transform.childCount do
self.taskItemList[i] = self.taskList.transform:GetChild(i - 1)
end
self.allRewardItemParent = Util.GetGameObject(self.transform, "frame/topPart/stateRoot/rewardGird")
self.getReawardBtn = Util.GetGameObject(self.transform, "frame/topPart/stateRoot/getReawardBtn")
self.getReawardBtnRedPoint = Util.GetGameObject(self.transform, "frame/topPart/stateRoot/getReawardBtn/redPoint")
self.getReawardBtnText = Util.GetGameObject(self.transform, "frame/topPart/stateRoot/getReawardBtn/Text"):GetComponent("Text")
end
function VipPanelV2:BindEvent()
--帮助按钮
Util.AddClick(this.helpBtn, function()
UIManager.OpenPanel(UIName.HelpPopup, HELP_TYPE.VIP, this.helpPosition.x,this.helpPosition.y)
end)
Util.AddClick(self.BtnBack, function()
PlaySoundWithoutClick(SoundConfig.Sound_UICancel)
self:ClosePanel()
end)
Util.AddClick(self.BtnLeft, function()
self:OnTurnLeftBtnClicked()
end)
Util.AddClick(self.BtnRight, function()
self:OnTurnRightBtnClicked()
end)
Util.AddClick(self.BtnReceive, function()
self:OnReceiveBtnClicked()
end)
Util.AddClick(self.btnLvUp, function()
self:OnBtnLvUpClicked()
end)
Util.AddClick(self.getReawardBtn, function()
self:OnGetReawardBtnClicked(self.curShowLevel)
end)
end
function VipPanelV2:OnVipTaskStatusChanged(taskId)
self:OnTaskStatusChanged(taskId)
end
function VipPanelV2:OnVipDailyRewardStatusChanged(taskId)
self:OnShow()
end
function VipPanelV2:AddListener()
Game.GlobalEvent:AddEvent(GameEvent.Vip.OnVipTaskStatusChanged, self.OnVipTaskStatusChanged, self)
Game.GlobalEvent:AddEvent(GameEvent.Vip.OnVipDailyRewardStatusChanged, self.OnVipDailyRewardStatusChanged, self)
Game.GlobalEvent:AddEvent(GameEvent.CloseUI.OnClose,self.OnVipDailyRewardStatusChanged, self)
end
function VipPanelV2:RemoveListener()
Game.GlobalEvent:RemoveEvent(GameEvent.Vip.OnVipTaskStatusChanged, self.OnVipTaskStatusChanged, self)
Game.GlobalEvent:RemoveEvent(GameEvent.Vip.OnVipDailyRewardStatusChanged, self.OnVipDailyRewardStatusChanged, self)
Game.GlobalEvent:RemoveEvent(GameEvent.CloseUI.OnClose,self.OnVipDailyRewardStatusChanged, self)
end
--待功能扩展(试图打开某个状态)
function VipPanelV2:OnOpen()
this.UpView:OnOpen({ showType = UpViewOpenType.ShowRight, panelType = PanelType.Main })
-- this.BtView:OnOpen({ sortOrder = self.sortingOrder, panelType = PanelTypeView.TeQuan })
end
function VipPanelV2:OnSortingOrderChange()
Util.AddParticleSortLayer(self.effect, self.sortingOrder - orginLayer)
orginLayer = self.sortingOrder
-- 头像层级
-- if this.playerHead then
-- this.playerHead:SetLayer(self.sortingOrder)
-- end
if this.playerInfoView then
this.playerInfoView:SetLayer(self.sortingOrder)
end
end
function VipPanelV2:OnShow()
self:InitVipContext()
self:SetPanelStatus()
-- 刷新一次编队战斗力
FormationManager.RefreshMainFormationPower()
end
function VipPanelV2:OnClose()
if self.priThread then
coroutine.stop(self.priThread)
self.priThread = nil
end
if self.taskThread then
coroutine.stop(self.taskThread)
self.taskThread = nil
end
end
function VipPanelV2:OnDestroy()
this.spLoader:Destroy()
SubUIManager.Close(this.UpView)
-- SubUIManager.Close(this.BtView)
-- SubUIManager.Close(this.playerHead)
-- this.playerHead = nil
this.UpView = nil
-- this.BtView = nil
if this.playerInfoView then
SubUIManager.Close(this.playerInfoView)
this.playerInfoView = nil
end
allRewardItemPres = {}
end
function VipPanelV2:InitVipContext()
self.context = {}
self.context.UserMissionInfo = TaskManager.GetTypeTaskList(TaskTypeDef.VipTask)
self.context.vipLevel = VipManager.GetVipLevel()
end
function VipPanelV2:SetPanelStatus()
local maxLv = VipManager.GetMaxVipLevel()
self.curLevel.sprite = this.spLoader:LoadSprite("r_zjm_tequanpaizi_0" .. self.context.vipLevel.."_zh")
-- 显示的
self.curShowLevel = VipManager.GetCurMinCanGetRewardLevel()--math.min(self.context.vipLevel + 1, maxLv)
self:RefreshPanelStatus(self.curShowLevel)
self:CheckTaskShow()
self.BtnLeft:SetActive(self.curShowLevel > 1)
self.BtnRight:SetActive(self.curShowLevel ~= maxLv)
end
-- 检测任务显示
function VipPanelV2:CheckTaskShow()
if self.context.vipLevel == VipManager.GetMaxVipLevel() then
self.taskList:SetActive(false)
self.btnLvUp:SetActive(false)
self.maxLv:SetActive(true)
else
self.maxLv:SetActive(false)
local isfinish = true
local taskListInfo = self.context.UserMissionInfo
for i = 1, #taskListInfo do
if taskListInfo[i].state ~= VipTaskStatusDef.Received then
isfinish = false
end
end
self.taskList:SetActive(not isfinish)
self.btnLvUp:SetActive(isfinish)
if not isfinish then
self:SetVipTaskList(self.context.vipLevel)
end
end
end
function VipPanelV2:SetProgressShow(level)
local taskLevel = level - 1
if taskLevel < self.context.vipLevel then
self.progressBar.value = 1
self.progressText.text = "4/4"
elseif taskLevel > self.context.vipLevel then
self.progressBar.value = 0
self.progressText.text = "0/4"
else
local taskFinishNum = 0
local taskListInfo = self.context.UserMissionInfo
for i = 1, #taskListInfo do
if taskListInfo[i].state == VipTaskStatusDef.Received then
taskFinishNum = taskFinishNum + 1
end
end
self.progressBar.value = taskFinishNum / #taskListInfo
self.progressText.text = string.format("%d/%d", taskFinishNum, #taskListInfo)
end
end
function VipPanelV2:SetRewardList(level)
local VipLvConfig = ConfigManager.GetConfigData(ConfigName.VipLevelConfig, level)
local configData = VipLvConfig.Property
table.walk(self.giftItemList, function(giftItem)
giftItem:SetActive(false)
end)
for idx, dataInfo in ipairs(configData) do
local id = dataInfo[1]
local num = dataInfo[2]
if num ~= 0 then
self.giftItemList[idx]:SetActive(true)
local propInfo = ConfigManager.GetConfigData(ConfigName.PropertyConfig, id)
if propInfo.Style == 1 then
self.giftItemList[idx]:GetComponent("Text").text = string.format(Language[11955], GetLanguageStrById(propInfo.Info))
Util.GetGameObject(self.giftItemList[idx], "value"):GetComponent("Text").text = "+"..num
elseif propInfo.Style == 2 then
self.giftItemList[idx]:GetComponent("Text").text = GetLanguageStrById(propInfo.Info)
Util.GetGameObject(self.giftItemList[idx], "value"):GetComponent("Text").text = string.format("+%d%%", num/100)
end
end
end
end
--特权增益描述
function VipPanelV2:SetVipPrivileges(curVipLevel)
if self.priThread then
coroutine.stop(self.priThread)
self.priThread = nil
end
table.walk(self.privilegeList, function(privilegeItem)
privilegeItem:SetActive(false)
end)
local curVipData = PrivilegeManager.GetTipsByVipLv(curVipLevel)
local tempNumber = 0
self.priThread = coroutine.start(function()
for _, privilegeInfo in ipairs(curVipData) do
if privilegeInfo.value == ""
or (privilegeInfo.IfFloat == 1 and privilegeInfo.value > 0)
or (privilegeInfo.IfFloat == 2 and privilegeInfo.value > 1)
then
tempNumber = tempNumber + 1
local item = self:GetPrivilegeItem(tempNumber)
item:SetActive(false)
-- local str = " "
-- str = string.format("%s", privilegeInfo.value)
local colorStr = "%s"
local formatStr
if privilegeInfo.IfFloat == 2 then --特权关卡挂机加成百分比
formatStr = string.format(colorStr, (privilegeInfo.value*100-100).."%")
else
formatStr = string.format(colorStr, privilegeInfo.value)
end
local title = Util.GetGameObject(item, "content/title"):GetComponent("Text")
--
if privilegeInfo.id == PRIVILEGE_TYPE.HANG_ON_TIME then
-- 挂机时长特权特殊显示处理
title.text = string.format(privilegeInfo.content, string.format(colorStr, privilegeInfo.value + GameSetting[1].AdventureOffline), formatStr)
else
title.text = string.format(privilegeInfo.content, formatStr)
end
--PlayUIAnim(item)
coroutine.wait(0.03)
--加成为0就别丢人现眼了
if privilegeInfo.value == 0 then
-- if privilegeInfo.id==1 and (privilegeInfo.value*100-100)==0 then
item:SetActive(false)
else
item:SetActive(true)
end
end
end
end)
end
function VipPanelV2:SetExtraPrivilege(index, configData)
local item = self:GetPrivilegeItem(index)
item.gameObject:SetActive(true)
local str = Language[10105]
for _, rewardInfo in ipairs(configData.VipBoxDailyReward) do
local itemConfig = ConfigManager.GetConfigData(ConfigName.ItemConfig, rewardInfo[1])
assert(itemConfig, string.format("ConfigName.ItemConfig not find Id:%s", rewardInfo[1]))
str = str .. string.format("%s%s", GetLanguageStrById(itemConfig.Name), rewardInfo[2])
end
Util.GetGameObject(item, "title"):GetComponent("Text").text = str
end
function VipPanelV2:GetPrivilegeItem(index)
if self.privilegeList[index] then
return self.privilegeList[index]
else
local newItem = newObjToParent(self.privilegeItem, self.privilegeContent)
table.insert(self.privilegeList, newItem)
return newItem
end
end
--设置特权任务
function VipPanelV2:SetVipTaskList(level)
local configData = ConfigManager.GetConfigData(ConfigName.VipLevelConfig, level)
table.walk(self.taskItemList, function(taskItem)
taskItem.gameObject:SetActive(false)
end)
-- if level < self.context.vipLevel then
-- for i, taskId in ipairs(configData.OpenRules) do
-- -- self.taskItemList[i]:Init(taskId)
-- -- local taskConfigInfo = ConfigManager.GetConfigData(ConfigName.TaskConfig, taskId)
-- -- self.taskItemList[i]:SetValue({state = VipTaskStatusDef.Received, progress = taskConfigInfo.TaskValue[2][1]})
-- end
-- self:SetTaskAnimation(#configData.OpenRules)
-- elseif level > self.context.vipLevel then
-- for i, taskId in ipairs(configData.OpenRules) do
-- -- self.taskItemList[i]:Init(taskId)
-- -- self.taskItemList[i]:SetValue({state = VipTaskStatusDef.NotFinished, progress = 0})
-- end
-- self:SetTaskAnimation(#configData.OpenRules)
-- else
if level == self.context.vipLevel then--好像一定走这里
if #self.context.UserMissionInfo == 0 then
return
end
for i, taskInfo in ipairs(self.context.UserMissionInfo) do
-- self.taskItemList[i]:Init(taskInfo.missionId)
-- self.taskItemList[i]:SetValue(taskInfo)
self:showSingleTask(self.taskItemList[i],taskInfo)
end
self:SetTaskAnimation(#self.context.UserMissionInfo)
end
end
--单个初始化任务
function VipPanelV2:showSingleTask(item,taskInfo)
--creat
local itemPos = Util.GetGameObject(item, "content/itemPos")
local giftInfo = SubUIManager.Open(SubUIConfig.ItemView, itemPos.transform)
local desc = Util.GetGameObject(item, "content/desc"):GetComponent("Text")
local progressBar = Util.GetGameObject(item, "content/progressBar"):GetComponent("Slider")
local progressValue = Util.GetGameObject(item, "content/dealBtn/value"):GetComponent("Text")
local dealBtn = Util.GetGameObject(item, "content/dealBtn")
local finishFlag = Util.GetGameObject(item, "content/finished")
local redPoint = Util.GetGameObject(item,"content/redPoint")
--init
local data = nil
local taskConfigInfo = ConfigManager.GetConfigData(ConfigName.TaskConfig, taskInfo.missionId)
giftInfo:OnOpen(false, taskConfigInfo.Reward[1], 0.8)
desc.text = GetLanguageStrById(taskConfigInfo.Desc)
progressBar.value = 0
progressValue.text = "0/" .. taskConfigInfo.TaskValue[2][1]
dealBtn:SetActive(false)
finishFlag:SetActive(false)
redPoint:SetActive(false)
--setvalue
data = taskInfo
progressBar.value = taskInfo.progress / taskConfigInfo.TaskValue[2][1]
progressValue.text = string.format("%s/%s", taskInfo.progress, taskConfigInfo.TaskValue[2][1])
dealBtn:SetActive(taskInfo.state == VipTaskStatusDef.NotFinished or taskInfo.state == VipTaskStatusDef.CanReceive)
if dealBtn.activeSelf then
dealBtn:GetComponent("Image").sprite = this.spLoader:LoadSprite(TaskGetBtnIconDef[taskInfo.state])
end
finishFlag:SetActive(taskInfo.state == VipTaskStatusDef.Received)
redPoint:SetActive(taskInfo.state == VipTaskStatusDef.CanReceive)
Util.AddOnceClick(dealBtn,function ()
if data.state == VipTaskStatusDef.NotFinished then
JumpManager.GoJump(taskConfigInfo.Jump[1])
else
NetManager.TakeMissionRewardRequest(TaskTypeDef.VipTask, taskConfigInfo.Id, function(respond)
UIManager.OpenPanel(UIName.RewardItemPopup, respond.drop, 1)
TaskManager.SetTypeTaskState(TaskTypeDef.VipTask, taskConfigInfo.Id, VipTaskStatusDef.Received)
Game.GlobalEvent:DispatchEvent(GameEvent.Vip.OnVipTaskStatusChanged, taskConfigInfo.Id)
self:SetPanelStatus()
end)
end
end)
end
function VipPanelV2:SetTaskAnimation(length)
if self.taskThread then
coroutine.stop(self.taskThread)
self.taskThread = nil
end
self.taskThread = coroutine.start(function()
for i = 1, length do
self.taskItemList[i].gameObject:SetActive(false)
PlayUIAnim(Util.GetGameObject(self.taskItemList[i], "content"))
coroutine.wait(0.05)
self.taskItemList[i].gameObject:SetActive(true)
-- coroutine.wait(0.05)
end
end)
end
function VipPanelV2:OnTurnLeftBtnClicked()
-- self:SwitchState(self:GetCurrentStatus(self.context.UserMissionInfo))
if self.curShowLevel <= 1 then
return
end
self.curShowLevel = self.curShowLevel - 1
self:RefreshPanelStatus(self.curShowLevel)
self.BtnLeft:SetActive(self.curShowLevel > 1)
self.BtnRight:SetActive(self.curShowLevel ~= VipManager.GetMaxVipLevel())
end
function VipPanelV2:OnTurnRightBtnClicked()
-- self:SwitchState(VipShowStatusDef.Preview)
if self.curShowLevel >= VipManager.GetMaxVipLevel() then
return
end
self.curShowLevel = self.curShowLevel + 1
self:RefreshPanelStatus(self.curShowLevel)
self.BtnLeft:SetActive(self.curShowLevel > 1)
self.BtnRight:SetActive(self.curShowLevel ~= VipManager.GetMaxVipLevel())
end
function VipPanelV2:OnBtnLvUpClicked()
local oldPowerNum = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL)
NetManager.RequestVipLevelUp(function(respond)
-- VipManager.SetLevleRewardDatas(self.curShowLevel,1)
self:OnShow()
SoundManager.PlaySound(SoundConfig.Sound_VipUpLevel)
--设置战斗力脏数据
HeroPropManager.SetFuncPropDirty(Func_Prop_Type.Vip)
end)
end
--刷新界面
function VipPanelV2:RefreshPanelStatus(level)
self:SetProgressShow(level)
self.currentLvNum.text = level
self:SetVipPrivileges(level)
self:SetRewardList(level)
self:ShowRewardInfo(level)
end
--特权任务发生变化
function VipPanelV2:OnTaskStatusChanged(taskId)
for i = 1, #self.context.UserMissionInfo do
local taskInfo = self.context.UserMissionInfo[i]
if taskInfo.missionId == taskId then
taskInfo.state = VipTaskStatusDef.Received
-- self.taskItemList[i]:SetValue(taskInfo)
break
end
end
if self.curShowLevel - 1 == self.context.vipLevel then
self:SetProgressShow(self.curShowLevel)
end
local isfinish = true
local taskListInfo = self.context.UserMissionInfo
for i = 1, #taskListInfo do
if taskListInfo[i].state ~= VipTaskStatusDef.Received then
isfinish = false
end
end
if isfinish then
self:CheckTaskShow()
end
end
--跳转显示新手提示圈
function this.ShowGuideGo()
JumpManager.ShowGuide(UIName.VipPanelV2, this.taskItemList[1].dealBtn)
end
--修正因VIP字体导致等级数篡位
function this.CheckVipLvPos(tarObj,lv)
if lv>9 then
tarObj.transform:DOAnchorPosX(10,0)
else
tarObj.transform:DOAnchorPosX(0,0)
end
end
--奖励
function VipPanelV2:ShowRewardInfo(level)
local state = VipManager.GetLevleRewardDatas(level)--0 未领取 1 已领取
local vipCurLevel = VipManager.GetVipLevel()
self.getReawardBtnRedPoint:SetActive(false)
if state == 0 then
self.getReawardBtnText.text = Language[10018]
Util.SetGray(self.getReawardBtn, true)
elseif state == 1 then
self.getReawardBtnText.text = Language[10018]
Util.SetGray(self.getReawardBtn, false)
self.getReawardBtnRedPoint:SetActive(true)
elseif state == 2 then
self.getReawardBtnText.text = Language[10101]
Util.SetGray(self.getReawardBtn, false)
end
local curConfig = ConfigManager.GetConfigData(ConfigName.VipLevelConfig, level)
local reward = curConfig.Reward
if reward then
for i = 1, math.max(#allRewardItemPres, #reward) do
local go = allRewardItemPres[i]
if not go then
go = SubUIManager.Open(SubUIConfig.ItemView, self.allRewardItemParent.transform)
go.gameObject.name = "frame"..i
allRewardItemPres[i] = go
end
go.gameObject:SetActive(false)
end
for i = 1, #reward do
allRewardItemPres[i].gameObject:SetActive(true)
allRewardItemPres[i]:OnOpen(false,reward[i],0.9)
end
end
end
function VipPanelV2:OnGetReawardBtnClicked(level)
local state = VipManager.GetLevleRewardDatas(level)--0 不可领取 1 可领取 2已领取
local vipCurLevel = VipManager.GetVipLevel()
LogYellow("state "..state)
if state == 0 then
PopupTipPanel.ShowTip(string.format( "特权%s级后可领取!",level))
elseif state == 1 then
NetManager.VipLevelStateRewardRequset(level,function(msg)
VipManager.SetLevleRewardDatas(level,2)
UIManager.OpenPanel(UIName.RewardItemPopup,msg.drop,1,function()
VipPanelV2:ShowRewardInfo(level)
CheckRedPointStatus(RedPointType.VipPrivilege)
end)
end)
elseif state == 2 then
PopupTipPanel.ShowTip(Language[10101])
end
end
return VipPanelV2