UIGuildWarRankView.lua 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. local UIGuildWarRankView = require("UIGuildWar/UIGuildWarRankView_Generate")
  2. local LoadStatusLoopListCtr = require('Common/LoadStatusLoopListCtr')
  3. local RankPageType = {
  4. Score = 1,
  5. Kill = 2,
  6. }
  7. local SCROE_INTERVAL = 2
  8. function UIGuildWarRankView:OnAwake(data)
  9. self.controller = require("UIGuildWar/UIGuildWarRankCtr"):new()
  10. self.controller:Init(self)
  11. self.controller:SetData(data)
  12. end
  13. function UIGuildWarRankView:AddEventListener()
  14. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.GUILD_WAR_BATTLE_RANK_DATA_CHANGED, self, self.OnRankDataChanged)
  15. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.GUILD_WAR_BATTLE_SCORE_DATA_CHANGED, self, self.OnScoreDataChanged)
  16. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.GUILD_WAR_OPEN_STATE_CHANGED, self, self.OnOpenStateChanged)
  17. end
  18. function UIGuildWarRankView:FillContent(data, uiBase)
  19. self.uiBase = uiBase
  20. local gameObject = self.uiBase:GetRoot()
  21. if gameObject ~= nil then
  22. self.gameObject = gameObject
  23. self.transform = gameObject.transform
  24. end
  25. self:InitGenerate(self.transform, data)
  26. self:Init()
  27. end
  28. function UIGuildWarRankView:Init()
  29. self.controller:InitData()
  30. if self.loadStatusLoopListCtr then
  31. self.loadStatusLoopListCtr:Dispose()
  32. self.loadStatusLoopListCtr = nil
  33. end
  34. self.loadStatusLoopListCtr = LoadStatusLoopListCtr:new(self, self.scrollView.loopListView, 0, 1,
  35. false, 'LoadingItem', Enum.ListLoadingStatus.None,
  36. true, 'LoadingItem', Enum.ListLoadingStatus.WaitLoad,
  37. self.GetItemByIndex,nil, self.OnBeginLoad)
  38. self.scrollView.loopListView.ScrollRect.enabled = false
  39. local battleRankData = self.controller:GetBattleRankData()
  40. self:RefreshBaseView(battleRankData)
  41. if battleRankData then
  42. self:RefreshScoreView(battleRankData.guildOccupy1, battleRankData.guildOccupy2, battleRankData.guildScore1, battleRankData.guildScore2)
  43. else
  44. self:RefreshScoreView(0, 0, 0, 0)
  45. self.isInitScore = nil
  46. end
  47. self:OnBeginLoad(true)
  48. end
  49. function UIGuildWarRankView:RemoveEventListener()
  50. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  51. end
  52. function UIGuildWarRankView:AddUIEventListener()
  53. self.uiBase:AddButtonUniqueEventListener(self.AnyBtn.button, self, self.OnClickCloseBtn)
  54. self.uiBase:AddButtonUniqueEventListener(self.btnClose.button, self, self.OnClickCloseBtn)
  55. self.uiBase:AddToggleUniqueEventListener(self.rankScore.toggle, self, self.OnClickRankToggle, RankPageType.Score)
  56. self.uiBase:AddToggleUniqueEventListener(self.rankKill.toggle, self, self.OnClickRankToggle, RankPageType.Kill)
  57. end
  58. function UIGuildWarRankView:OnHide()
  59. end
  60. function UIGuildWarRankView:OnShow(data)
  61. self.controller:SetData(data)
  62. end
  63. function UIGuildWarRankView:OnClose()
  64. end
  65. function UIGuildWarRankView:OnDispose()
  66. if self.loadStatusLoopListCtr then
  67. self.loadStatusLoopListCtr:Dispose()
  68. self.loadStatusLoopListCtr = nil
  69. end
  70. self.isInitScore = nil
  71. self.controller:OnDispose()
  72. end
  73. function UIGuildWarRankView:OnPageInEnd()
  74. self.super.OnPageInEnd(self)
  75. self.scrollView.loopListView.ScrollRect.enabled = true
  76. end
  77. function UIGuildWarRankView:OnClickCloseBtn()
  78. self:UIClose()
  79. end
  80. function UIGuildWarRankView:OnClickRankToggle(toggle, params, isOn)
  81. local battleRankPageType = params[0]
  82. if isOn then
  83. if self.controller:SetBattleRankPageType(battleRankPageType) then
  84. self:RefreshListView()
  85. self:OnBeginLoad(true)
  86. end
  87. else
  88. if battleRankPageType == self.controller:GetBattleRankPageType() then
  89. toggle.isOn = true
  90. end
  91. end
  92. end
  93. function UIGuildWarRankView:OnClickRankItem(btn, params)
  94. local uid = params[0]
  95. ManagerContainer.LuaUIMgr:OpenRoleMessagePanel(uid)
  96. end
  97. function UIGuildWarRankView:OnRankDataChanged()
  98. self.controller:RefreshBattleRankData()
  99. local battleRankData = self.controller:GetBattleRankData()
  100. self:RefreshBaseView(battleRankData)
  101. if battleRankData then
  102. self:RefreshScoreView(battleRankData.guildOccupy1, battleRankData.guildOccupy2, battleRankData.guildScore1, battleRankData.guildScore2)
  103. else
  104. self:RefreshScoreView(0, 0, 0, 0)
  105. self.isInitScore = nil
  106. end
  107. self:RefreshListView()
  108. end
  109. function UIGuildWarRankView:OnScoreDataChanged()
  110. local battleFieldData = self.controller:GetBattleFieldData()
  111. if not battleFieldData then return end
  112. if battleFieldData.id ~= self.controller:GetBattleIdx() then return end
  113. self:RefreshScoreView(battleFieldData.guildOccupy1, battleFieldData.guildOccupy2, battleFieldData.guildScore1, battleFieldData.guildScore2)
  114. end
  115. function UIGuildWarRankView:OnOpenStateChanged(isOpen)
  116. if isOpen then return end
  117. self:UIClose()
  118. end
  119. function UIGuildWarRankView:RefreshBaseView(battleRankData)
  120. if not battleRankData then
  121. self.guildNameTxt1.text.text = ''
  122. self.guildNameTxt2.text.text = ''
  123. self:RefreshBadgeImg(self.flag1.badge.image, nil)
  124. self:RefreshBadgeImg(self.flag2.badge.image, nil)
  125. self.flag1.result:SetActive(false)
  126. self.flag2.result:SetActive(false)
  127. return
  128. end
  129. self.guildNameTxt1.text.text = string.formatbykey('GuildWarBattle21', battleRankData.guildName1)
  130. self.guildNameTxt2.text.text = string.formatbykey('GuildWarBattle21', battleRankData.guildName2)
  131. self:RefreshBadgeImg(self.flag1.badge.image, battleRankData.guildBadge1)
  132. self:RefreshBadgeImg(self.flag2.badge.image, battleRankData.guildBadge2)
  133. if battleRankData.isFinish then
  134. self.flag1.result:SetActive(true)
  135. self.flag2.result:SetActive(true)
  136. if battleRankData.isWin then
  137. self.flag1.result.uIImageSwitchSprite:ChangeSprite(1)
  138. self.flag2.result.uIImageSwitchSprite:ChangeSprite(0)
  139. else
  140. self.flag1.result.uIImageSwitchSprite:ChangeSprite(0)
  141. self.flag2.result.uIImageSwitchSprite:ChangeSprite(1)
  142. end
  143. else
  144. self.flag1.result:SetActive(false)
  145. self.flag2.result:SetActive(false)
  146. end
  147. end
  148. function UIGuildWarRankView:RefreshBadgeImg(image, badge)
  149. if not image then return end
  150. image.enabled = false
  151. image.sprite = nil
  152. if badge then
  153. local badgeCfgData = ManagerContainer.CfgMgr:GetGuildBadgeCfgById(badge)
  154. if not badgeCfgData then return end
  155. CommonUtil.LoadIcon(self, badgeCfgData.Pic, function (sprite)
  156. if sprite then
  157. image.sprite = sprite
  158. image.enabled = true
  159. end
  160. end)
  161. end
  162. end
  163. function UIGuildWarRankView:RefreshScoreView(areaNum1, areaNum2, score1, score2)
  164. local dojoName = string.formatbykey('GuildWarBattle14')
  165. self.areaNumTxt1.text.text = (areaNum1 and tostring(areaNum1) or '0') .. tostring(dojoName)
  166. self.areaNumTxt2.text.text = (areaNum2 and tostring(areaNum2) or '0') .. tostring(dojoName)
  167. if not score1 or score1 <= 0 then score1 = 0 end
  168. if not score2 or score2 <= 0 then score2 = 0 end
  169. local score = score1 + score2
  170. local time = SCROE_INTERVAL
  171. if not self.isInitScore then
  172. time = 0
  173. self.isInitScore = true
  174. end
  175. if score <= 0 then
  176. self.scoreSlider.slider:DOValue(0.5, time)
  177. else
  178. self.scoreSlider.slider:DOValue(score2 / score, time)
  179. end
  180. self.scoreTxt1.text.text = tostring(score1)
  181. self.scoreTxt2.text.text = tostring(score2)
  182. end
  183. function UIGuildWarRankView:RefreshListView()
  184. local battleRankPageType = self.controller:GetBattleRankPageType()
  185. self.rankScore.toggle.isOn = battleRankPageType == RankPageType.Score
  186. self.rankKill.toggle.isOn = battleRankPageType == RankPageType.Kill
  187. local battleRankPageData = self.controller:GetBattleRankPageData()
  188. if not battleRankPageData then
  189. self.loadStatusLoopListCtr:SetHasBegin(true)
  190. self.loadStatusLoopListCtr:OnAllLoaded()
  191. self.loadStatusLoopListCtr:RefreshMaxDataLength(2)
  192. self.loadStatusLoopListCtr:RefreshDataLength(1)
  193. return
  194. end
  195. local dataNum = battleRankPageData:GetDataNum()
  196. local isEnd = battleRankPageData.isEnd
  197. self.loadStatusLoopListCtr:SetHasBegin(not isEnd)
  198. self.loadStatusLoopListCtr:OnAllLoaded()
  199. if not dataNum or dataNum <= 0 then
  200. self.loadStatusLoopListCtr:RefreshMaxDataLength(isEnd and 1 or 2)
  201. self.loadStatusLoopListCtr:RefreshDataLength(1)
  202. return
  203. end
  204. self.loadStatusLoopListCtr:RefreshMaxDataLength(isEnd and dataNum or (dataNum + 1))
  205. self.loadStatusLoopListCtr:RefreshDataLength(dataNum)
  206. end
  207. function UIGuildWarRankView:OnBeginLoad(isBegin)
  208. local errorCode = self.controller:SendGuildWarRankReq(isBegin)
  209. if errorCode ~= 0 then
  210. self:RefreshListView()
  211. if errorCode ~= 1 then
  212. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(errorCode)
  213. end
  214. end
  215. end
  216. function UIGuildWarRankView:GetItemByIndex(loopListView, idx, dataIdx)
  217. local battleRankPageData = self.controller:GetBattleRankPageData()
  218. if not battleRankPageData then
  219. return loopListView:NewListViewItem('NoGuildItem')
  220. end
  221. local dataNum = battleRankPageData:GetDataNum()
  222. if not dataNum or dataNum <= 0 then
  223. return loopListView:NewListViewItem('NoGuildItem')
  224. end
  225. local itemData = battleRankPageData:GetDataByIdx(dataIdx + 1)
  226. if not itemData then
  227. return nil
  228. end
  229. local item = loopListView:NewListViewItem('GuildWarRankItem')
  230. local itemLua = CommonUtil.BindGridViewItem2Lua(self, 'GuildWarRankItem', item.gameObject)
  231. if itemLua then
  232. itemLua.nameTxt.text.text = tostring(self.controller:GetGuildName(itemData.guildId))
  233. local playerBrief = itemData.playerBrief
  234. local uid
  235. local data = nil
  236. local headFrameId = nil
  237. -- local vipLv = nil
  238. if playerBrief then
  239. uid = playerBrief.uid
  240. -- vipLv = playerBrief.vipLv
  241. headFrameId = playerBrief.headFrame
  242. if int64.equals(uid, ManagerContainer.DataMgr.UserData:GetUserId()) then
  243. headFrameId = ManagerContainer.DataMgr.UserData:GetHeadFrameId()
  244. -- vipLv = ManagerContainer.DataMgr.UserData:GetVipLv()
  245. end
  246. local jobCfg = ManagerContainer.CfgMgr:GetJobDataById(playerBrief.configId)
  247. local jobIcon = ''
  248. if jobCfg then
  249. jobIcon = jobCfg.JobIcon
  250. end
  251. data = {Level = playerBrief.level, ProfessionIcon = jobIcon, HeadIcon = playerBrief.headPortraitName, IsHero = true}
  252. itemLua.playerName.text.text = tostring(playerBrief.nickName)
  253. else
  254. data = {}
  255. itemLua.playerName.text.text = ''
  256. end
  257. itemLua.headItem.head.button.enabled = false
  258. CommonUtil.SetPlayerHeadAndFrame(self, itemLua.headItem, data, false, headFrameId)
  259. local rank = itemData.id
  260. itemLua.rankTxt.text.text = tostring(rank)
  261. local battleRankPageType = self.controller:GetBattleRankPageType()
  262. if battleRankPageType == RankPageType.Score then
  263. itemLua.tagMvp:SetActive(rank == 1)
  264. self:RefreshCurrencyItem(itemLua.currency, 'Common/ic_res_gulid_capturepoint', itemData.value)
  265. elseif battleRankPageType == RankPageType.Kill then
  266. itemLua.tagMvp:SetActive(rank == 1)
  267. self:RefreshCurrencyItem(itemLua.currency, 'Common/ic_res_gulid_killerpoint', itemData.value)
  268. else
  269. itemLua.tagMvp:SetActive(false)
  270. self:RefreshCurrencyItem(itemLua.currency)
  271. end
  272. self.uiBase:AddButtonUniqueEventListener(itemLua.button, self, self.OnClickRankItem, uid)
  273. end
  274. return item
  275. end
  276. function UIGuildWarRankView:RefreshCurrencyItem(currency, resPath, num)
  277. if not currency then return end
  278. currency.icon.image.enabled = false
  279. currency.icon.image.sprite = nil
  280. CommonUtil.LoadIcon(self, resPath, function (sprite)
  281. if sprite then
  282. currency.icon.image.sprite = sprite
  283. currency.icon.image.enabled = true
  284. end
  285. end)
  286. currency.numTxt.text.text = tostring(num)
  287. end
  288. return UIGuildWarRankView