UIVoyageRobberyView.lua 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. local UIVoyageRobberyView = require("UIVoyage/UIVoyageRobberyView_Generate")
  2. function UIVoyageRobberyView:OnAwake(data)
  3. self.controller = require("UIVoyage/UIVoyageRobberyCtr"):new()
  4. self.controller:Init(self)
  5. self.controller:SetData(data)
  6. end
  7. function UIVoyageRobberyView:AddEventListener()
  8. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.VOYAGE_CHALLENGE_NUM_CHANGED, self, self.RefreshRobNum)
  9. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.VOYAGE_CHECK_AIRSHIP_CHANGED, self, self.OnCheckAirShipChanged)
  10. --VOYAGE_CHALLENGE_COUNT_CHANGED
  11. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.VOYAGE_CHALLENGE_COUNT_CHANGED, self, self.OnVoyageChallengeCountChanged)
  12. end
  13. function UIVoyageRobberyView:FillContent(data, uiBase)
  14. self.uiBase = uiBase
  15. local gameObject = self.uiBase:GetRoot()
  16. if gameObject ~= nil then
  17. self.gameObject = gameObject
  18. self.transform = gameObject.transform
  19. end
  20. self:InitGenerate(self.transform, data)
  21. self:Init()
  22. end
  23. function UIVoyageRobberyView:Init()
  24. local trans = self.transform:Find('UIAnimator/Window/BG/Content/ShipHolder/AirShipItem')
  25. local item = {}
  26. item.gameObject = trans.gameObject
  27. item.transform = trans
  28. item.animator = trans:GetComponent(Enum.TypeInfo.Animator)
  29. item.me = trans:Find("Me").gameObject
  30. item.fan = trans:Find("Ship/Fan").gameObject
  31. item.switchSprite = trans:Find("Ship/Body"):GetComponent(Enum.TypeInfo.UIImageSwitchSprite)
  32. self.airShipItem = item
  33. self.controller:InitData()
  34. self:RefreshView()
  35. self:RefreshRobNum()
  36. self.box:SetActive(true)
  37. self.btnAdd:SetActive(true)
  38. --self.robNum:SetActive(false)
  39. self.transform:Find("UIAnimator/Window/BG/Title").gameObject:SetActive(true)
  40. end
  41. function UIVoyageRobberyView:RemoveEventListener()
  42. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  43. end
  44. function UIVoyageRobberyView:AddUIEventListener()
  45. self.uiBase:AddButtonUniqueEventListener(self.AnyBtn.button,self, self.OnClickCloseBtn)
  46. self.uiBase:AddButtonUniqueEventListener(self.btnClose.button, self, self.OnClickCloseBtn)
  47. self.uiBase:AddButtonUniqueEventListener(self.btnCancle.button, self, self.OnClickCloseBtn)
  48. self.uiBase:AddButtonUniqueEventListener(self.btnChallenge.button, self, self.OnClickChallengeBtn)
  49. self.uiBase:AddButtonUniqueEventListener(self.btnAdd.button, self, self.OnClickAddBth)
  50. end
  51. function UIVoyageRobberyView:OnHide()
  52. end
  53. function UIVoyageRobberyView:OnShow(data)
  54. self.controller:SetData(data)
  55. self.box:SetActive(true)
  56. self.robNum:SetActive(false)
  57. end
  58. function UIVoyageRobberyView:OnClose()
  59. end
  60. function UIVoyageRobberyView:OnDispose()
  61. if self.endTimer then
  62. self.endTimer:Stop()
  63. self.endTimer = nil
  64. end
  65. self.airShipItem = nil
  66. self.controller:OnDispose()
  67. end
  68. function UIVoyageRobberyView:OnCheckAirShipChanged(uid)
  69. local airShipData = self.controller:GetAirShipData()
  70. if airShipData and airShipData.uid == uid then
  71. local name = airShipData:GetName()
  72. if not name then
  73. self.nameSp:SetActive(false)
  74. else
  75. self.nameSp:SetActive(true)
  76. self.nameTxt.text.text = string.formatbykey('RobShipName', airShipData:GetServerId() -1, name)
  77. end
  78. end
  79. end
  80. function UIVoyageRobberyView:OnClickCloseBtn()
  81. self:UIClose()
  82. end
  83. function UIVoyageRobberyView:OnClickChallengeBtn()
  84. local airShipData = self.controller:GetAirShipData()
  85. if not airShipData then
  86. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('VoyageErrorTips01')
  87. return
  88. end
  89. local selfuid = ManagerContainer.DataMgr.UserData:GetUserId()
  90. if airShipData.uid == selfuid then
  91. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('VoyageErrorTips02')
  92. return
  93. end
  94. local cfgData = ManagerContainer.CfgMgr:GetVoyageAirShipCfgById(airShipData.quality)
  95. local curTime = ManagerContainer.LuaTimerMgr:CurLuaServerTime()
  96. local sec = (airShipData.endTime - curTime) / 1000
  97. sec = type(sec) == "number" and sec or #sec
  98. local time = airShipData.duration or 1
  99. if sec > time then
  100. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('VoyageErrorTips03')
  101. return
  102. elseif sec <= 0 then
  103. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('VoyageFinishTips')
  104. return
  105. end
  106. local errorCode = self.controller:SendChallengeReq(airShipData.uid, airShipData.endTime)
  107. if errorCode ~= 0 then
  108. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(errorCode)
  109. end
  110. end
  111. function UIVoyageRobberyView:RefreshRobNum()
  112. self.robNum.text.text = tostring(self.controller:GetRemindRobNum())
  113. end
  114. function UIVoyageRobberyView:RefreshView()
  115. if self.endTimer then
  116. self.endTimer:Stop()
  117. end
  118. local airShipData = self.controller:GetAirShipData()
  119. if airShipData then
  120. local cfgData = ManagerContainer.CfgMgr:GetVoyageAirShipCfgById(airShipData.quality)
  121. if cfgData then
  122. local rewards = cfgData.RobberyReward
  123. if rewards then
  124. self:RefreshCurrencyItem(self.currency1, rewards[1])
  125. self:RefreshCurrencyItem(self.currency2, rewards[2])
  126. self:RefreshCurrencyItem(self.currency3, rewards[3])
  127. else
  128. self:RefreshCurrencyItem(self.currency1, nil)
  129. self:RefreshCurrencyItem(self.currency2, nil)
  130. self:RefreshCurrencyItem(self.currency3, nil)
  131. end
  132. self.airShipItem.gameObject:SetActive(true)
  133. self.timer:SetActive(true)
  134. self:RefreshEndTimer()
  135. local name = airShipData:GetName()
  136. if not name then
  137. self.nameSp:SetActive(false)
  138. self.controller:SendCheckInfoReq(airShipData.uid, airShipData.endTime)
  139. else
  140. self.nameSp:SetActive(true)
  141. self.nameTxt.text.text = string.formatbykey('RobShipName', airShipData:GetServerId() -1, name)
  142. end
  143. return
  144. end
  145. end
  146. self:RefreshCurrencyItem(self.currency1, nil)
  147. self:RefreshCurrencyItem(self.currency2, nil)
  148. self:RefreshCurrencyItem(self.currency3, nil)
  149. self.beRobNum.text.text = '0/0'
  150. self.airShipItem.gameObject:SetActive(false)
  151. self.nameSp:SetActive(false)
  152. self.timer:SetActive(false)
  153. self.btnChallenge:SetActive(false)
  154. end
  155. function UIVoyageRobberyView:RefreshEndTimer()
  156. local airShipData = self.controller:RefreshAndGetAirShipData()
  157. if not airShipData then
  158. self:RefreshView()
  159. return
  160. end
  161. local cfgData = ManagerContainer.CfgMgr:GetVoyageAirShipCfgById(airShipData.quality)
  162. if not cfgData then
  163. self:RefreshView()
  164. return
  165. end
  166. self.airShipItem.animator:Play('AirShipRun')
  167. local quality = self.controller:RefreshQuality()
  168. local beChallengeNum = self.controller:RefreshBeChallengeNum()
  169. if beChallengeNum then
  170. self.beRobNum.text.text = tostring(beChallengeNum) .. '/' .. tostring(cfgData.RobberyTimes)
  171. if beChallengeNum >= cfgData.RobberyTimes then
  172. quality = 0
  173. end
  174. end
  175. if quality then
  176. self.airShipItem.switchSprite:ChangeSprite(quality)
  177. self.airShipItem.fan:SetActive(quality > 0)
  178. end
  179. local remainTime = (airShipData.endTime - ManagerContainer.LuaTimerMgr:CurLuaServerTime()) / 1000
  180. remainTime = type(remainTime) == "number" and remainTime or #remainTime
  181. self.timerTxt.text.text = DateTimeUtil.convertSeconds2TimeStr1(remainTime, true, true, false)
  182. if remainTime <= 0 then
  183. if self.endTimer then
  184. self.endTimer:Stop()
  185. end
  186. else
  187. if not self.endTimer then
  188. self.endTimer = Timer.New(slot(self.RefreshEndTimer, self), 1, -1)
  189. end
  190. if not self.endTimer.running then
  191. self.endTimer:Start()
  192. end
  193. end
  194. end
  195. function UIVoyageRobberyView:RefreshCurrencyItem(currency, reward)
  196. if not currency then return end
  197. currency.icon.image.enabled = false
  198. currency.icon.image.sprite = nil
  199. if reward then
  200. local cfgId = reward[1] or 0
  201. local num = reward[2] or 0
  202. local cfgData = ManagerContainer.CfgMgr:GetItemById(cfgId)
  203. if cfgData then
  204. CommonUtil.LoadIcon(self, cfgData.MiniIcon, function(sprite)
  205. currency.icon.image.sprite = sprite
  206. currency.icon.image.enabled = true
  207. end)
  208. end
  209. currency.text.text.text = tostring(num)
  210. currency:SetActive(true)
  211. else
  212. currency:SetActive(false)
  213. end
  214. end
  215. function UIVoyageRobberyView:OnVoyageChallengeCountChanged()
  216. self.controller:RefChallengeCount()
  217. self:RefreshRobNum()
  218. end
  219. function UIVoyageRobberyView:OnClickAddBth()
  220. ManagerContainer.DataMgr.VoyageDataMgr:SendChallengeCountBuyReq()
  221. end
  222. return UIVoyageRobberyView