local UIStarSignTipsView = require("UISeason/UIStarSignTipsView_Generate")
local IconItemCtr = require("Common/IconItemCtr")
local updateHandle
local scrollRect
local animSpeed = {2,1,0.5,0.2}
local RewardList = {}
function UIStarSignTipsView:OnAwake(data)
self.controller = require("UISeason/UIStarSignTipsCtr"):new()
self.controller:Init(self)
self.controller:SetData(data)
end
function UIStarSignTipsView:AddEventListener()
ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.ITEM_CHANGE, self, self.InitCurrency)
ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.DIAMOND_CHANGED, self, self.InitGold)
ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.STAR_SIGN_CHANGE, self, self.OnAstroReqBack)
ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.STAR_SIGN_INIT, self, self.OnStartInfoInit)
ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.SEASON_EXCHANGE_NTF,self, self.OnStartScoreInit)
end
function UIStarSignTipsView:FillContent(data, uiBase)
self.uiBase = uiBase
local gameObject = self.uiBase:GetRoot()
if gameObject ~= nil then
self.gameObject = gameObject
self.transform = gameObject.transform
end
self:InitGenerate(self.transform, data)
self:Init()
end
function UIStarSignTipsView:OnStartInfoInit()
local activeList = ManagerContainer.DataMgr.StarSignData:GetStarActiveListData()
for i = 1, 12 do
if activeList and activeList[i] then
self["sign"..i].animator:Play("StarLightKeep")
else
self["sign"..i].animator:Play("StarLightOffKeep")
end
end
for i = 1, 12 do
self.rewardsBox["item"..i].current:SetActive(false)
end
self.btnAstrology.button.interactable = true
self.btnGetRewards.button.interactable = true
self.btnUseLucky.toggle.interactable = true
local count = ManagerContainer.DataMgr.StarSignData:GetStarActiveCount()
CommonUtil.SetTotalChildrenGray(self.btnAstrology,count == 12)
self.btnAstrology.button.interactable = count ~= 12
self:InitReward()
end
function UIStarSignTipsView:OnStartScoreInit(delta)
if delta and delta > 0 then
ManagerContainer.LuaUIMgr:ErrorNoticeDisplayWithParam("CompetitionTip4", delta)
end
local curCompetitionData = ManagerContainer.DataMgr.CompetitionData:GetCurCompetitionData()
self.scoreInfo.num1.text.text = tostring(curCompetitionData.comParam)
local delta
if curCompetitionData.nextComScore > 0 then
delta = curCompetitionData.nextComScore - curCompetitionData.comParam
self.scoreInfo.text2.text.text = I18N.SetLanguageValue("DscSeasonScoreNext")
self.scoreInfo.num2:SetActive(true)
self.scoreInfo.text2:SetActive(true)
else
if curCompetitionData.lastComScore > 0 then
self.scoreInfo.text2.text.text = I18N.SetLanguageValue("DscSeasonScoreSecond")
delta = curCompetitionData.comParam - curCompetitionData.lastComScore
self.scoreInfo.num2:SetActive(true)
self.scoreInfo.text2:SetActive(true)
else
self.scoreInfo.num2:SetActive(false)
self.scoreInfo.text2:SetActive(false)
end
end
self.scoreInfo.num2.text.text = delta
end
function UIStarSignTipsView:Init()
self:InitData()
self:InitCurrency()
self:InitGold()
self:InitReward()
self:InitRewardList()
self:OnStartScoreInit()
ManagerContainer.DataMgr.StarSignData:SendStarInfoReq()
if not updateHandle then
updateHandle = UpdateBeat:CreateListener(self.Update, self)
end
UpdateBeat:AddListener(updateHandle)
end
function UIStarSignTipsView:InitCurrency()
local num1 = CommonUtil.GetOwnResCountByItemId(202)
local num2 = CommonUtil.GetOwnResCountByItemId(201)
local count = ManagerContainer.DataMgr.StarSignData:GetStarActiveCount()
self.currency1.number.text.text = CommonUtil.FormatNumber(num1)
self.currency2.number.text.text = CommonUtil.FormatNumber(num2)
self:RefreshItemNum(count)
end
function UIStarSignTipsView:InitGold()
local num = CommonUtil.GetOwnResCountByItemId(2)
self.currency3.number.text.text = CommonUtil.FormatNumber(num)
end
function UIStarSignTipsView:RewardMove()
if not self.isMove then
return
end
local count = ManagerContainer.DataMgr.StarSignData:GetStarActiveCount()
if self.currCount > 0 then
self.rewardsBox["item"..self.currCount].current:SetActive(false)
end
self.currCount = count
self:RefreshItemNum(count)
if not self:IsCanUseLuck() then
self.btnUseLucky.toggle.isOn = false
end
if count == 0 then
return
end
if count > 3 and count < 11 then
local pos
if count == 10 then
pos = Vector3(-25-160*(count-3),-150,0)
else
pos = Vector3(-15-160*(count-3),-150,0)
end
self.rewardsBox.content.rectTransform.localPosition = Vector3.MoveTowards(self.rewardsBox.content.rectTransform.localPosition,pos,Time.deltaTime*300)
if Vector3.Distance(self.rewardsBox.content.rectTransform.localPosition,pos) < 0.1 then
self.btnAstrology.button.interactable = true
self.btnGetRewards.button.interactable = true
self.btnUseLucky.toggle.interactable = true
self.rewardsBox.content.rectTransform.localPosition = pos
self.rewardsBox["item"..count].current:SetActive(true)
self.isMove = false
end
else
self.btnAstrology.button.interactable = true
self.btnGetRewards.button.interactable = true
self.btnUseLucky.toggle.interactable = true
self.isMove = false
self.rewardsBox["item"..count].current:SetActive(true)
end
if count == 12 then
CommonUtil.SetTotalChildrenGray(self.btnAstrology,true)
self.btnAstrology.button.interactable = false
end
end
function UIStarSignTipsView:InitReward(isrefreshPos)
local count = ManagerContainer.DataMgr.StarSignData:GetStarActiveCount()
self.btnGetRewards.button.interactable = not (count == 0) and not isrefreshPos
CommonUtil.SetTotalChildrenGray(self.btnGetRewards,count == 0)
if not self:IsCanUseLuck() then
self.btnUseLucky.toggle.isOn = false
end
self:RefreshItemNum(count)
if count == 0 then
self.rewardsBox.content.rectTransform.localPosition = Vector3(0,-150,0)
return
end
if isrefreshPos then
return
end
if self.currCount > 0 then
self.rewardsBox["item"..self.currCount].current:SetActive(false)
end
self.currCount = count
if count == 1 or count == 2 or count == 3 then
self.rewardsBox.content.rectTransform.localPosition = Vector3(0,-150,0)
elseif count == 10 or count == 11 or count == 12 then
self.rewardsBox.content.rectTransform.localPosition = Vector3(-25-160*7,-150,0)
else
self.rewardsBox.content.rectTransform.localPosition = Vector3(-15-160*(count-3),-150,0)
end
self.rewardsBox["item"..self.currCount].current:SetActive(true)
end
function UIStarSignTipsView:RefreshItemNum(count)
local CompetitionDevineCfg = ManagerContainer.CfgMgr:GetCompetitionDevineCfgById(count + 1)
if CompetitionDevineCfg and CompetitionDevineCfg.ItemPrice then
local num = CommonUtil.GetOwnResCountByItemId(CompetitionDevineCfg.ItemPrice[1][1])
local itemcost = CompetitionDevineCfg.ItemPrice[1][2]
if num >= itemcost then
local cfgData = ManagerContainer.CfgMgr:GetItemById(CompetitionDevineCfg.ItemPrice[1][1])
CommonUtil.LoadIcon(self, cfgData.Icon, function (sprite)
self.btnAstrology.image.image.sprite = sprite
end)
self.btnAstrology.num.text.text = itemcost
else
if CompetitionDevineCfg.GoldPrice then
local goldnum = CommonUtil.GetOwnResCountByItemId(CompetitionDevineCfg.GoldPrice[1][1])
local cfgData = ManagerContainer.CfgMgr:GetItemById(CompetitionDevineCfg.GoldPrice[1][1])
CommonUtil.LoadIcon(self, cfgData.Icon, function (sprite)
self.btnAstrology.image.image.sprite = sprite
end)
local goldcost = CompetitionDevineCfg.GoldPrice[1][2]
if goldnum >= goldcost then
self.btnAstrology.num.text.text = goldcost
else
self.btnAstrology.num.text.text = ""..goldcost..""
end
else
self.btnAstrology.num.text.text = I18N.SetLanguageValue("CannotUseDevinecoinNum")
end
end
local IsCanUseLuck,CompetitionDevineCfg = self:IsCanUseLuck()
if not IsCanUseLuck then
self.btnUseLucky.text.text.text = I18N.SetLanguageValue("CannotUseLuckyCharmNum")
self.txt.text.text = I18N.SetLanguageValue("CannotUseLuckyCharm")
else
self.txt.text.text = I18N.SetLanguageValue("BtnUseLucky")
local num2 = CommonUtil.GetOwnResCountByItemId(CompetitionDevineCfg.LuckyPrice[1][1])
local luckycost = CompetitionDevineCfg.LuckyPrice[1][2]
if num2 >= luckycost then
self.btnUseLucky.text.text.text = luckycost
else
self.btnUseLucky.toggle.isOn = false
self.btnUseLucky.text.text.text = ""..luckycost..""
end
end
end
end
function UIStarSignTipsView:InitRewardList()
if RewardList and #RewardList > 0 then
for i = 1, #RewardList do
self.rewardsBox["item"..i].num.text.text = i
IconItemCtr:SetData(self, self.rewardsBox["item"..i].iconSmallItem, RewardList[i], nil, self, self.OnClickItem)
end
else
for i = 2, 13 do
local data = ManagerContainer.CfgMgr:GetCompetitionDevineCfgById(i)
local reward = data and data.Rewards and data.Rewards[1]
local rewardData = {cfgId = reward[1], num = reward[2] }
table.insert(RewardList,rewardData)
self.rewardsBox["item"..(i - 1)].num.text.text = (i - 1)
IconItemCtr:SetData(self, self.rewardsBox["item"..(i - 1)].iconSmallItem, rewardData, nil, self, self.OnClickItem)
end
end
end
function UIStarSignTipsView:OnClickItem(btn,params)
local logicData = params[0]
ManagerContainer.LuaUIMgr:OpenTips(logicData)
end
function UIStarSignTipsView:InitData()
self.currCount = 0
self.timer = 3
self.upOffset = 120
self.isTurn = false
self.data = {}
self.btnGift:SetActive(Constant.OpenPay or false)
self.scrollBox.arrowAnim.animator:Play("ArrowMove",-1,0)
self.scrollBox.arrowAnim.animator.speed = 0
self.fx_uistarsigntipseffect_01.uIParticle:PlayCachedParticalSystem(false)
self.fx_uistarsigntipseffect_02.uIParticle:PlayCachedParticalSystem(false)
self.btnAstrology.button.interactable = false
self.btnGetRewards.button.interactable = false
self.btnUseLucky.toggle.interactable = false
self.taggetPos = nil
scrollRect = self.scroll.transform
for i = 1, 12 do
self.rewardsBox["item"..i].current:SetActive(false)
end
self.stopAnim:SetActive(false)
end
function UIStarSignTipsView:Update()
if self.isTurn then
self.timer = self.timer - Time.deltaTime
if self.timer > 2 then
scrollRect:Translate(Vector3.down*Time.deltaTime*8)
elseif self.timer > 1 then
self.scrollBox.arrowAnim.animator.speed = animSpeed[2]
scrollRect:Translate(Vector3.down*Time.deltaTime*6)
elseif self.timer > 0 then
self.fx_uistarsigntipseffect_02.uIParticle:PlayCachedParticalSystem(false)
self.scrollBox.arrowAnim.animator.speed = animSpeed[3]
scrollRect:Translate(Vector3.down*Time.deltaTime*3)
else
self.scrollBox.arrowAnim.animator.speed = animSpeed[4]
scrollRect:Translate(Vector3.down*Time.deltaTime*1.5)
if Vector3.Distance(scrollRect.localPosition,self.targetPos) < 15 then
self:OnTurnStop()
end
end
if scrollRect.localPosition.y <= -720 then
scrollRect.localPosition = Vector3.New(0,720,0)
end
end
self:RewardMove()
end
function UIStarSignTipsView:OnClickClose()
if self.isTurn then
self:OnTurnStop(true)
end
self:UIClose()
end
function UIStarSignTipsView:OnClickGiftShop()
local IsOver = ManagerContainer.DataMgr.CompetitionData:IsOveerCurSeason()
if IsOver then
self:PopErrorTips('LabelOver')
return
end
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIRuneShopBT, {Enum.RuneShopType.LimitTime}, self.uiData.id)
self:UIClose()
end
function UIStarSignTipsView:OnClickRewardsList()
local IsOver = ManagerContainer.DataMgr.CompetitionData:IsOveerCurSeason()
if IsOver then
self:PopErrorTips('LabelOver')
return
end
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIStarRewardsTips,RewardList)
end
function UIStarSignTipsView:OnClickPlayRule()
local IsOver = ManagerContainer.DataMgr.CompetitionData:IsOveerCurSeason()
if IsOver then
self:PopErrorTips('LabelOver')
return
end
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPlayRule, {'StarSignTitle', "StarSignDescText"})
end
function UIStarSignTipsView:OnClickGetRewards()
local IsOver = ManagerContainer.DataMgr.CompetitionData:IsOveerCurSeason()
if IsOver then
self:PopErrorTips('LabelOver')
return
end
local count = ManagerContainer.DataMgr.StarSignData:GetStarActiveCount()
if count == 0 then
return
end
local idx = RewardList[count] and RewardList[count].cfgId
local cfgdata = ManagerContainer.CfgMgr:GetItemById(idx)
local param
if RewardList[count].num > 1 then
param = cfgdata.Name.." X "..RewardList[count].num
else
param = cfgdata.Name
end
ManagerContainer.LuaUIMgr:ShowMessageBox("StarSignTip",{param},nil, self, self.OnSureGetReward)
end
function UIStarSignTipsView:OnSureGetReward()
local IsOver = ManagerContainer.DataMgr.CompetitionData:IsOveerCurSeason()
if IsOver then
self:PopErrorTips('LabelOver')
return
end
self.btnAstrology.button.interactable = true
CommonUtil.SetTotalChildrenGray(self.btnAstrology,false)
ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_COMPETITION_STAR_CLOSE_REWARD_REQ)
end
function UIStarSignTipsView:OnClickSkip()
self:OnTurnStop()
end
function UIStarSignTipsView:OnTurnStop(isPlayAnim)
local target = ManagerContainer.DataMgr.StarSignData:GetStarTargetData()
scrollRect.localPosition = Vector3.New(0,-720+120*target,0)
self.isTurn = false
self.timer = 3
self.btnSkip:SetActive(false)
self.scrollBox.arrowAnim.animator.speed = 0
if not isPlayAnim then
self.stopAnim:SetActive(true)
end
self.fx_uistarsigntipseffect_01.uIParticle:PlayCachedParticalSystem(false)
self.fx_uistarsigntipseffect_02.uIParticle:PlayCachedParticalSystem(false)
self.scrollBox.arrowAnim.animator:Play("ArrowMove",-1,0)
local activeList = ManagerContainer.DataMgr.StarSignData:GetStarActiveListData()
if not ManagerContainer.DataMgr.StarSignData:GetStarActiveLightData() then
self["sign"..target].animator:Play("StarLightOff")
else
self["sign"..target].animator:Play("StarLightShow")
end
self.isMove = true
end
function UIStarSignTipsView:OnClickAstrology()
local IsOver = ManagerContainer.DataMgr.CompetitionData:IsOveerCurSeason()
if IsOver then
self:PopErrorTips('LabelOver')
return
end
if self:IsCanAugur() and not self.isTurn then
self.btnAstrology.button.interactable = false
self.btnGetRewards.button.interactable = false
self.btnUseLucky.toggle.interactable = false
if self.btnUseLucky.toggle.isOn then
ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_COMPETITION_STAR_DIVINE_REQ,{use_ticket = true})
else
ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_COMPETITION_STAR_DIVINE_REQ,{use_ticket = false})
end
end
end
function UIStarSignTipsView:IsCanAugur()
local count = ManagerContainer.DataMgr.StarSignData:GetStarActiveCount()
local CompetitionDevineCfg = ManagerContainer.CfgMgr:GetCompetitionDevineCfgById(count + 1)
if CompetitionDevineCfg and CompetitionDevineCfg.ItemPrice then
if self:IsCanCost(CompetitionDevineCfg.ItemPrice[1]) then
return true
else
if CompetitionDevineCfg.GoldPrice and self:IsCanCost(CompetitionDevineCfg.GoldPrice[1]) then
return true
else
ManagerContainer.LuaUIMgr:ErrorNoticeDisplayWithParam(CommonUtil.GetItemNotEnoughInfo(CompetitionDevineCfg.GoldPrice[1][1]))
return false
end
end
end
return false
end
function UIStarSignTipsView:IsCanCost(CostPrice)
if CostPrice then
local num = CommonUtil.GetOwnResCountByItemId(CostPrice[1])
if num >= CostPrice[2] then
return true
else
return false
end
end
return false
end
function UIStarSignTipsView:OnAstroReqBack()
self:InitReward(true)
self.isTurn = true
self.timer = 3
self.target = ManagerContainer.DataMgr.StarSignData:GetStarTargetData()
self.targetPos = Vector3.New(0,-720+120*self.target,0)
self.isSetTarget = false
self.scrollBox.arrowAnim.animator.speed = animSpeed[1]
self.fx_uistarsigntipseffect_01.uIParticle:PlayCachedParticalSystem(true)
self.fx_uistarsigntipseffect_02.uIParticle:PlayCachedParticalSystem(true)
self.stopAnim:SetActive(false)
self.btnSkip:SetActive(true)
end
function UIStarSignTipsView:RemoveEventListener()
ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
end
function UIStarSignTipsView:PopErrorTips(key)
ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(key)
end
function UIStarSignTipsView:AddUIEventListener()
self.uiBase:AddButtonEventListener(self.btnClose.button,self,self.OnClickClose) --点击关闭界面
self.uiBase:AddButtonEventListener(self.btnGift.button,self,self.OnClickGiftShop) --点击跳转占星商店
self.uiBase:AddButtonEventListener(self.btnRewardsList.button,self,self.OnClickRewardsList) --点击奖励列表
self.uiBase:AddButtonEventListener(self.btnGetRewards.button,self,self.OnClickGetRewards) --点击获取奖励
self.uiBase:AddButtonEventListener(self.btnSkip.button,self,self.OnClickSkip) --点击跳过动画
self.uiBase:AddButtonEventListener(self.btnPlayRule.button,self,self.OnClickPlayRule) --点击活动规则
self.uiBase:AddButtonEventListener(self.btnAstrology.button,self,self.OnClickAstrology) --点击占星按钮
self.btnUseLucky.toggle.onValueChanged:AddListener(function (isOn)
if isOn == false then
return
end
local count = ManagerContainer.DataMgr.StarSignData:GetStarActiveCount()
local IsCanUseLuck,CompetitionDevineCfg = self:IsCanUseLuck()
if IsCanUseLuck then
local cfgId = CompetitionDevineCfg.LuckyPrice[1][1]
local num = CommonUtil.GetOwnResCountByItemId(cfgId)
if num >= CompetitionDevineCfg.LuckyPrice[1][2] then
self.btnUseLucky.toggle.isOn = true
else
self.btnUseLucky.toggle.isOn = false
ManagerContainer.LuaUIMgr:ErrorNoticeDisplayWithParam(CommonUtil.GetItemNotEnoughInfo(cfgId))
end
elseif count == 12 then
self.btnUseLucky.toggle.isOn = false
ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("StarRewardMax")
else
self.btnUseLucky.toggle.isOn = false
ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("CannotUseLuckyCharm")
return
end
end)
end
function UIStarSignTipsView:IsCanUseLuck()
local count = ManagerContainer.DataMgr.StarSignData:GetStarActiveCount()
local CompetitionDevineCfg = ManagerContainer.CfgMgr:GetCompetitionDevineCfgById(count + 1)
return CompetitionDevineCfg and CompetitionDevineCfg.LuckyPrice ~= nil,CompetitionDevineCfg
end
function UIStarSignTipsView:OnHide()
end
function UIStarSignTipsView:OnShow(data)
ManagerContainer.DataMgr.StarSignData:SetData(data)
end
function UIStarSignTipsView:OnClose()
if updateHandle ~= nil then
UpdateBeat:RemoveListener(updateHandle)
updateHandle = nil
end
self.btnUseLucky.toggle.onValueChanged:RemoveAllListeners()
scrollRect = nil
end
function UIStarSignTipsView:OnDispose()
self.controller:OnDispose()
end
return UIStarSignTipsView