| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- local UIBattleResultView = require("UIBattle/UIBattleResultView_Generate")
- function UIBattleResultView:OnAwake(data)
- self.controller = require("UIBattle/UIBattleResultCtr"):new()
- self.controller:Init(self)
- self.controller:SetData(data)
- end
- function UIBattleResultView:AddEventListener()
- end
- function UIBattleResultView: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 UIBattleResultView:Init()
- self.rewardTrans = self.transform:Find('PopWinAnim/Window/BG/ReceiveRes/Rewards/Reward')
- local winNum = self.controller:GetWinNum()
- if winNum <= 0 then
- self.battleLose:SetActive(true)
- self.battleWin:SetActive(false)
- else
- self.battleLose:SetActive(false)
- self.battleWin:SetActive(true)
- end
- local show1 = self:RefreshScoreItems()
- local show2 = self:RefreshRewardItems()
- if not show1 and not show2 then
- self.title:SetActive(false)
- self.receiveRes:SetActive(false)
- if winNum > 0 then
- self.dsc.text.text = string.formatbykey(self.controller:GetLangKey())
- self.dsc:SetActive(true)
- else
- self.dsc:SetActive(false)
- end
- else
- self.title:SetActive(true)
- self.receiveRes:SetActive(true)
- self.dsc:SetActive(false)
- end
- self.AnyBtn.button.interactable = false
- if self.canExitTimer then
- self.canExitTimer.time = self.canExitTimer.duration
- else
- self.canExitTimer = Timer.New(slot(self.OpenAnyBtnClick, self), 1)
- end
- if not self.canExitTimer.running then
- self.canExitTimer:Start()
- end
- if self.exitTimer then
- self.exitTimer.time = self.exitTimer.duration
- else
- self.exitTimer = Timer.New(slot(self.OnClickCancelBtn, self), 10)
- end
- if not self.exitTimer.running then
- self.exitTimer:Start()
- end
- end
- function UIBattleResultView:RemoveEventListener()
- ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
- end
- function UIBattleResultView:AddUIEventListener()
- self.uiBase:AddButtonEventListener(self.AnyBtn.button,self, self.OnClickCancelBtn)
- end
- function UIBattleResultView:OnHide()
- end
- function UIBattleResultView:OnShow(data)
- self.controller:SetData(data)
- end
- function UIBattleResultView:OnClose()
- end
- function UIBattleResultView:OnDispose()
- if self.exitTimer then
- self.exitTimer:Stop()
- self.exitTimer = nil
- end
- if self.canExitTimer then
- self.canExitTimer:Stop()
- self.canExitTimer = nil
- end
- self:DisposeRewardItem()
- self.controller:OnDispose()
- end
- function UIBattleResultView:OnClickCancelBtn()
- self.controller:HandleCallback()
- self:UIClose()
- end
- function UIBattleResultView:OpenAnyBtnClick()
- self.AnyBtn.button.interactable = true
- end
- function UIBattleResultView:RefreshScoreItems()
- local scores = self.controller:GetScores()
- if not scores then
- self.score:SetActive(false)
- return false
- end
- self.score:SetActive(true)
- local winNum = self.controller:GetWinNum()
- self.winCount.text.text = tostring(winNum)
- if winNum > 1 then
- self.winNode:SetActive(true)
- if winNum <= 4 then
- self.winBg1:SetActive(true)
- self.winBg2:SetActive(false)
- self.winBg3:SetActive(false)
- elseif winNum <= 9 then
- self.winBg1:SetActive(false)
- self.winBg2:SetActive(true)
- self.winBg3:SetActive(false)
- else
- self.winBg1:SetActive(false)
- self.winBg2:SetActive(false)
- self.winBg3:SetActive(true)
- end
- else
- self.winNode:SetActive(false)
- end
- local oldScore = scores[1]
- local curScore = scores[2]
- self.oldScoreText.text.text = tostring(oldScore)
- self.newScoreText.text.text = tostring(curScore)
- local addScore = curScore - oldScore
- if addScore < 0 then
- self.deltaScoreText.text.text = "(" .. tostring(addScore) .. ")"
- else
- self.deltaScoreText.text.text = "(+" .. tostring(addScore) .. ")"
- end
- return true
- end
- function UIBattleResultView:RefreshRewardItems()
- local rewards = self.controller:GetRewards()
- if not rewards then
- self:DisposeRewardItem()
- return false
- end
- local rewardItems = self.rewardItems
- if not rewardItems then
- rewardItems = {}
- self.rewardItems = rewardItems
- end
- local len = #rewards
- for i = 1, len do
- local rewardItem = rewardItems[i]
- if not rewardItem then
- rewardItem = {}
- local newGo = UnityEngine.GameObject.Instantiate(self.rewardTrans.gameObject)
- local newTrans = newGo.transform
- newTrans:SetParent(self.rewardTrans.parent)
- newTrans.localPosition = Vector3.zero
- newTrans.localRotation = Quaternion.identity
- newTrans.localScale = Vector3.one
- rewardItem.gameObject = newGo
- rewardItem.transform = newTrans
- rewardItem.iconImg = newTrans:Find('Icon'):GetComponent(Enum.TypeInfo.Image)
- rewardItem.numTxt = newTrans:Find('Text'):GetComponent(Enum.TypeInfo.Text)
- local vipTagTrans = newTrans:Find('VipTag')
- rewardItem.vipTag = vipTagTrans.gameObject
- rewardItem.vipIconImg = vipTagTrans:Find('Icon'):GetComponent(Enum.TypeInfo.Image)
- rewardItem.vipNumTxt = vipTagTrans:Find('Number'):GetComponent(Enum.TypeInfo.TextMeshProUGUI)
- rewardItems[i] = rewardItem
- end
- local reward = rewards[i]
- local cfgId = reward[1]
- local num = reward[2]
- local vipNum = reward[3]
- local cfgData = ManagerContainer.CfgMgr:GetItemById(cfgId)
- rewardItem.iconImg.enabled = false
- rewardItem.iconImg.sprite = nil
- if cfgData then
- CommonUtil.LoadIcon(self, cfgData.MiniIcon, function(sprite)
- if sprite then
- rewardItem.iconImg.sprite = sprite
- rewardItem.iconImg.enabled = true
- end
- end)
- end
- rewardItem.numTxt.text = CommonUtil.FormatNumber(num)
- local vip = false
- if vipNum and vipNum > 0 then
- local vipLv = ManagerContainer.DataMgr.UserData:GetVipLv()
- if vipLv and vipLv >= 1 then
- local vipCfg = ManagerContainer.CfgMgr:GetVipCfgById(vipLv)
- if vipCfg then
- local precent = CommonUtil.GetPreciseDecimal((vipNum * 100) / (num - vipNum), 1)
- if precent > 0 then
- rewardItem.vipNumTxt.text = '+' .. tostring(precent) .. '%'
- rewardItem.vipTag:SetActive(true)
- rewardItem.vipIconImg.sprite = nil
- rewardItem.vipIconImg.enabled = false
- CommonUtil.LoadIcon(self, vipCfg.SmallIcon, function(sprite)
- if sprite then
- rewardItem.vipIconImg.sprite = sprite
- rewardItem.vipIconImg.enabled = true
- end
- end)
- vip = true
- end
- end
- end
- end
- if not vip then
- rewardItem.vipTag:SetActive(false)
- rewardItem.vipIconImg.sprite = nil
- rewardItem.vipIconImg.enabled = false
- end
- rewardItem.gameObject:SetActive(true)
- end
- for i = len + 1, #rewardItems do
- local rewardItem = rewardItems[i]
- if rewardItem and rewardItem.gameObject then
- rewardItem.gameObject:SetActive(false)
- end
- end
- return true
- end
- function UIBattleResultView:DisposeRewardItem()
- if not self.rewardItems then
- return
- end
- for _, rewardItem in pairs(self.rewardItems) do
- local gameObject = rewardItem.gameObject
- rewardItem.gameObject = nil
- rewardItem.transform = nil
- rewardItem.iconImg = nil
- rewardItem.numTxt = nil
- rewardItem.vipTag = nil
- rewardItem.vipIconImg = nil
- CommonUtil.DestroyGO(gameObject)
- end
- self.rewardItems = nil
- end
- return UIBattleResultView
|