UIBattleResultView.lua 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. local UIBattleResultView = require("UIBattle/UIBattleResultView_Generate")
  2. function UIBattleResultView:OnAwake(data)
  3. self.controller = require("UIBattle/UIBattleResultCtr"):new()
  4. self.controller:Init(self)
  5. self.controller:SetData(data)
  6. end
  7. function UIBattleResultView:AddEventListener()
  8. end
  9. function UIBattleResultView:FillContent(data, uiBase)
  10. self.uiBase = uiBase
  11. local gameObject = self.uiBase:GetRoot()
  12. if gameObject ~= nil then
  13. self.gameObject = gameObject
  14. self.transform = gameObject.transform
  15. end
  16. self:InitGenerate(self.transform, data)
  17. self:Init()
  18. end
  19. function UIBattleResultView:Init()
  20. self.rewardTrans = self.transform:Find('PopWinAnim/Window/BG/ReceiveRes/Rewards/Reward')
  21. local winNum = self.controller:GetWinNum()
  22. if winNum <= 0 then
  23. self.battleLose:SetActive(true)
  24. self.battleWin:SetActive(false)
  25. else
  26. self.battleLose:SetActive(false)
  27. self.battleWin:SetActive(true)
  28. end
  29. local show1 = self:RefreshScoreItems()
  30. local show2 = self:RefreshRewardItems()
  31. if not show1 and not show2 then
  32. self.title:SetActive(false)
  33. self.receiveRes:SetActive(false)
  34. if winNum > 0 then
  35. self.dsc.text.text = string.formatbykey(self.controller:GetLangKey())
  36. self.dsc:SetActive(true)
  37. else
  38. self.dsc:SetActive(false)
  39. end
  40. else
  41. self.title:SetActive(true)
  42. self.receiveRes:SetActive(true)
  43. self.dsc:SetActive(false)
  44. end
  45. self.AnyBtn.button.interactable = false
  46. if self.canExitTimer then
  47. self.canExitTimer.time = self.canExitTimer.duration
  48. else
  49. self.canExitTimer = Timer.New(slot(self.OpenAnyBtnClick, self), 1)
  50. end
  51. if not self.canExitTimer.running then
  52. self.canExitTimer:Start()
  53. end
  54. if self.exitTimer then
  55. self.exitTimer.time = self.exitTimer.duration
  56. else
  57. self.exitTimer = Timer.New(slot(self.OnClickCancelBtn, self), 10)
  58. end
  59. if not self.exitTimer.running then
  60. self.exitTimer:Start()
  61. end
  62. end
  63. function UIBattleResultView:RemoveEventListener()
  64. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  65. end
  66. function UIBattleResultView:AddUIEventListener()
  67. self.uiBase:AddButtonEventListener(self.AnyBtn.button,self, self.OnClickCancelBtn)
  68. end
  69. function UIBattleResultView:OnHide()
  70. end
  71. function UIBattleResultView:OnShow(data)
  72. self.controller:SetData(data)
  73. end
  74. function UIBattleResultView:OnClose()
  75. end
  76. function UIBattleResultView:OnDispose()
  77. if self.exitTimer then
  78. self.exitTimer:Stop()
  79. self.exitTimer = nil
  80. end
  81. if self.canExitTimer then
  82. self.canExitTimer:Stop()
  83. self.canExitTimer = nil
  84. end
  85. self:DisposeRewardItem()
  86. self.controller:OnDispose()
  87. end
  88. function UIBattleResultView:OnClickCancelBtn()
  89. self.controller:HandleCallback()
  90. self:UIClose()
  91. end
  92. function UIBattleResultView:OpenAnyBtnClick()
  93. self.AnyBtn.button.interactable = true
  94. end
  95. function UIBattleResultView:RefreshScoreItems()
  96. local scores = self.controller:GetScores()
  97. if not scores then
  98. self.score:SetActive(false)
  99. return false
  100. end
  101. self.score:SetActive(true)
  102. local winNum = self.controller:GetWinNum()
  103. self.winCount.text.text = tostring(winNum)
  104. if winNum > 1 then
  105. self.winNode:SetActive(true)
  106. if winNum <= 4 then
  107. self.winBg1:SetActive(true)
  108. self.winBg2:SetActive(false)
  109. self.winBg3:SetActive(false)
  110. elseif winNum <= 9 then
  111. self.winBg1:SetActive(false)
  112. self.winBg2:SetActive(true)
  113. self.winBg3:SetActive(false)
  114. else
  115. self.winBg1:SetActive(false)
  116. self.winBg2:SetActive(false)
  117. self.winBg3:SetActive(true)
  118. end
  119. else
  120. self.winNode:SetActive(false)
  121. end
  122. local oldScore = scores[1]
  123. local curScore = scores[2]
  124. self.oldScoreText.text.text = tostring(oldScore)
  125. self.newScoreText.text.text = tostring(curScore)
  126. local addScore = curScore - oldScore
  127. if addScore < 0 then
  128. self.deltaScoreText.text.text = "(" .. tostring(addScore) .. ")"
  129. else
  130. self.deltaScoreText.text.text = "(+" .. tostring(addScore) .. ")"
  131. end
  132. return true
  133. end
  134. function UIBattleResultView:RefreshRewardItems()
  135. local rewards = self.controller:GetRewards()
  136. if not rewards then
  137. self:DisposeRewardItem()
  138. return false
  139. end
  140. local rewardItems = self.rewardItems
  141. if not rewardItems then
  142. rewardItems = {}
  143. self.rewardItems = rewardItems
  144. end
  145. local len = #rewards
  146. for i = 1, len do
  147. local rewardItem = rewardItems[i]
  148. if not rewardItem then
  149. rewardItem = {}
  150. local newGo = UnityEngine.GameObject.Instantiate(self.rewardTrans.gameObject)
  151. local newTrans = newGo.transform
  152. newTrans:SetParent(self.rewardTrans.parent)
  153. newTrans.localPosition = Vector3.zero
  154. newTrans.localRotation = Quaternion.identity
  155. newTrans.localScale = Vector3.one
  156. rewardItem.gameObject = newGo
  157. rewardItem.transform = newTrans
  158. rewardItem.iconImg = newTrans:Find('Icon'):GetComponent(Enum.TypeInfo.Image)
  159. rewardItem.numTxt = newTrans:Find('Text'):GetComponent(Enum.TypeInfo.Text)
  160. local vipTagTrans = newTrans:Find('VipTag')
  161. rewardItem.vipTag = vipTagTrans.gameObject
  162. rewardItem.vipIconImg = vipTagTrans:Find('Icon'):GetComponent(Enum.TypeInfo.Image)
  163. rewardItem.vipNumTxt = vipTagTrans:Find('Number'):GetComponent(Enum.TypeInfo.TextMeshProUGUI)
  164. rewardItems[i] = rewardItem
  165. end
  166. local reward = rewards[i]
  167. local cfgId = reward[1]
  168. local num = reward[2]
  169. local vipNum = reward[3]
  170. local cfgData = ManagerContainer.CfgMgr:GetItemById(cfgId)
  171. rewardItem.iconImg.enabled = false
  172. rewardItem.iconImg.sprite = nil
  173. if cfgData then
  174. CommonUtil.LoadIcon(self, cfgData.MiniIcon, function(sprite)
  175. if sprite then
  176. rewardItem.iconImg.sprite = sprite
  177. rewardItem.iconImg.enabled = true
  178. end
  179. end)
  180. end
  181. rewardItem.numTxt.text = CommonUtil.FormatNumber(num)
  182. local vip = false
  183. if vipNum and vipNum > 0 then
  184. local vipLv = ManagerContainer.DataMgr.UserData:GetVipLv()
  185. if vipLv and vipLv >= 1 then
  186. local vipCfg = ManagerContainer.CfgMgr:GetVipCfgById(vipLv)
  187. if vipCfg then
  188. local precent = CommonUtil.GetPreciseDecimal((vipNum * 100) / (num - vipNum), 1)
  189. if precent > 0 then
  190. rewardItem.vipNumTxt.text = '+' .. tostring(precent) .. '%'
  191. rewardItem.vipTag:SetActive(true)
  192. rewardItem.vipIconImg.sprite = nil
  193. rewardItem.vipIconImg.enabled = false
  194. CommonUtil.LoadIcon(self, vipCfg.SmallIcon, function(sprite)
  195. if sprite then
  196. rewardItem.vipIconImg.sprite = sprite
  197. rewardItem.vipIconImg.enabled = true
  198. end
  199. end)
  200. vip = true
  201. end
  202. end
  203. end
  204. end
  205. if not vip then
  206. rewardItem.vipTag:SetActive(false)
  207. rewardItem.vipIconImg.sprite = nil
  208. rewardItem.vipIconImg.enabled = false
  209. end
  210. rewardItem.gameObject:SetActive(true)
  211. end
  212. for i = len + 1, #rewardItems do
  213. local rewardItem = rewardItems[i]
  214. if rewardItem and rewardItem.gameObject then
  215. rewardItem.gameObject:SetActive(false)
  216. end
  217. end
  218. return true
  219. end
  220. function UIBattleResultView:DisposeRewardItem()
  221. if not self.rewardItems then
  222. return
  223. end
  224. for _, rewardItem in pairs(self.rewardItems) do
  225. local gameObject = rewardItem.gameObject
  226. rewardItem.gameObject = nil
  227. rewardItem.transform = nil
  228. rewardItem.iconImg = nil
  229. rewardItem.numTxt = nil
  230. rewardItem.vipTag = nil
  231. rewardItem.vipIconImg = nil
  232. CommonUtil.DestroyGO(gameObject)
  233. end
  234. self.rewardItems = nil
  235. end
  236. return UIBattleResultView