UIHundredDojoView.lua 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476
  1. local UIHundredDojoView = require("UIHundredDojo/UIHundredDojoView_Generate")
  2. local ColorExtension = require('ColorExtension')
  3. local SloganState = {
  4. Idle = 1,
  5. CheckOpening = 2,
  6. Opening = 3,
  7. Showing = 4,
  8. Hiding = 5,
  9. }
  10. function UIHundredDojoView:OnAwake(data)
  11. self.controller = require("UIHundredDojo/UIHundredDojoCtr"):new()
  12. self.controller:Init(self)
  13. self.controller:SetData(data)
  14. end
  15. function UIHundredDojoView:AddEventListener()
  16. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.HUNDRED_DOJO_CHALLENGE_NUM_CHANGED, self, self.OnChallengeNumChanged)
  17. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.HUNDRED_DOJO_BASE_TIME_CHANGED, self, self.OnBaseTimeChanged)
  18. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.HUNDRED_DOJO_SELF_AREA_DATA_CHANGED, self, self.OnSelfAreaDataChanged)
  19. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.HUNDRED_DOJO_OTHER_AREA_DATA_CHANGED, self, self.OnOtherAreaDataChanged)
  20. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.HUNDRED_DOJO_GET_REWARD_COMPLETED, self, self.OnGetRewardCompleted)
  21. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.HUNDRED_DOJO_LOCATION_AREA_CHANGED, self, self.OnLocationAreaChanged)
  22. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.HUNDRED_DOJO_SLOGAN_CHANGED, self, self.OnSloganChanged)
  23. end
  24. function UIHundredDojoView:FillContent(data, uiBase)
  25. self.uiBase = uiBase
  26. local gameObject = self.uiBase:GetRoot()
  27. if gameObject ~= nil then
  28. self.gameObject = gameObject
  29. self.transform = gameObject.transform
  30. end
  31. self:InitGenerate(self.transform, data)
  32. self:Init()
  33. end
  34. function UIHundredDojoView:Init()
  35. self.controller:InitData()
  36. local initParam = SuperScrollView.LoopGridViewInitParam()
  37. initParam.mSmoothDumpRate = 0.05
  38. self.scrollView.loopGridView.ItemSnapEnable = false
  39. self.scrollView.loopGridView:InitGridView(0, function(gridView, itemIndex, row, column)
  40. return self:GetItemByRowColumn(gridView, itemIndex, row, column)
  41. end, function(gridView, itemIndex, row, column, loopGridViewItem)
  42. self:RecycleItem(gridView, itemIndex, row, column, loopGridViewItem)
  43. end, nil, initParam)
  44. self.treasureTip:SetActive(self.controller:IsTreasureShow())
  45. self.isInitGrid = nil
  46. self.alignAreaId = nil
  47. self:CloseMenu()
  48. self.controller:SendGetSelfInfoReq()
  49. self:RefreshChallengeCount()
  50. self:RefreshBaseReward()
  51. self:RefreshReward()
  52. self:RefreshOccupy()
  53. self:RefreshArea()
  54. self:OpenSlogan()
  55. ManagerContainer.LuaUIMgr:ClosePage(Enum.UIPageName.UIDojoExit)
  56. end
  57. function UIHundredDojoView:RemoveEventListener()
  58. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  59. self.scrollView.loopGridView.mOnBeginDragAction = nil
  60. self.scrollView.loopGridView.mOnEndDragAction = nil
  61. self.scrollView.loopGridView.mOnSnapItemFinished = nil
  62. end
  63. function UIHundredDojoView:AddUIEventListener()
  64. self.uiBase:AddButtonUniqueEventListener(self.btnBack.button, self, self.OnClickCloseBtn)
  65. self.uiBase:AddButtonUniqueEventListener(self.btnInfo.button, self, self.OnClickInfoBtn)
  66. self.uiBase:AddButtonUniqueEventListener(self.btnLog.button, self, self.OnClickLogBtn)
  67. self.uiBase:AddButtonUniqueEventListener(self.btnAdd.button, self, self.OnClickAddBtn)
  68. self.uiBase:AddButtonUniqueEventListener(self.rewardBox.button, self, self.OnClickRewardBoxBtn)
  69. self.uiBase:AddButtonUniqueEventListener(self.btnShop.button, self, self.OnClickShopBtn)
  70. self.uiBase:AddButtonUniqueEventListener(self.btnRank.button, self, self.OnClickRankBtn)
  71. self.uiBase:AddButtonUniqueEventListener(self.menu.AnyBtn.button, self, self.OnClickMenuCloseBtn)
  72. self.uiBase:AddButtonUniqueEventListener(self.menu.btnClg.button, self, self.OnClickMenuChallengeBtn)
  73. self.uiBase:AddButtonUniqueEventListener(self.menu.btnInfo.button, self, self.OnClickMenuInfoBtn)
  74. self.uiBase:AddButtonUniqueEventListener(self.mySloganitem.button, self, self.OnClickMySloganBtn)
  75. self.scrollView.loopGridView.mOnBeginDragAction = function(gridView)
  76. self:OnBeginDragAction(gridView)
  77. end
  78. self.scrollView.loopGridView.mOnEndDragAction = function(gridView)
  79. self:OnEndDragAction(gridView)
  80. end
  81. self.scrollView.loopGridView.mOnSnapItemFinished = function(gridView, gridViewItem)
  82. self:OnSnapItemFinished(gridView, gridViewItem)
  83. end
  84. end
  85. function UIHundredDojoView:OnHide()
  86. if self.refreshAreaTimer then
  87. self.refreshAreaTimer:Stop()
  88. end
  89. if self.rewardTimer then
  90. self.rewardTimer:Stop()
  91. end
  92. if self.occupyTimer then
  93. self.occupyTimer:Stop()
  94. end
  95. if self.menuLeftTimer then
  96. self.menuLeftTimer:Stop()
  97. end
  98. self:CloseSlogan()
  99. end
  100. function UIHundredDojoView:OnShow(data)
  101. self.controller:SetData(data)
  102. if self.refreshAreaTimer then
  103. if not self.refreshAreaTimer.running then
  104. self.refreshAreaTimer:Start()
  105. end
  106. if self.refreshAreaTimer.time > 1 then
  107. self.refreshAreaTimer.time = 1
  108. end
  109. end
  110. if self.rewardTimer then
  111. self.rewardTimer.func()
  112. end
  113. if self.occupyTimer then
  114. self.occupyTimer:func()
  115. end
  116. if self.menuLeftTimer then
  117. self.menuLeftTimer:func()
  118. end
  119. self:OpenSlogan()
  120. end
  121. function UIHundredDojoView:OnClose()
  122. end
  123. function UIHundredDojoView:OnDispose()
  124. if self.refreshAreaTimer then
  125. self.refreshAreaTimer:Stop()
  126. self.refreshAreaTimer = nil
  127. end
  128. if self.rewardTimer then
  129. self.rewardTimer:Stop()
  130. self.rewardTimer = nil
  131. end
  132. if self.occupyTimer then
  133. self.occupyTimer:Stop()
  134. self.occupyTimer = nil
  135. end
  136. if self.menuLeftTimer then
  137. self.menuLeftTimer:Stop()
  138. self.menuLeftTimer = nil
  139. end
  140. self.isInitGrid = nil
  141. self.alignAreaId = nil
  142. self.scrollView.loopGridView:Dispose()
  143. self:CloseMenu()
  144. self:DisposeAreaItemLua()
  145. self:DisposeSlogan()
  146. self.controller:OnDispose()
  147. end
  148. function UIHundredDojoView:OnChallengeNumChanged()
  149. self:RefreshChallengeCount()
  150. end
  151. function UIHundredDojoView:OnBaseTimeChanged()
  152. self:RefreshReward()
  153. end
  154. function UIHundredDojoView:OnSelfAreaDataChanged(oldId, newId)
  155. self:RefreshOccupy()
  156. if not self.isInitGrid then
  157. self:RefreshArea()
  158. else
  159. self:RefreshItemLua(oldId)
  160. if oldId ~= newId then
  161. self:RefreshItemLua(newId)
  162. end
  163. if self.curSelectAreaId == oldId or self.curSelectAreaId == newId then
  164. self:OpenMenu(self.curSelectAreaId)
  165. end
  166. if self.sloganState == SloganState.Showing or self.sloganState == SloganState.Hiding then
  167. self:RefreshSelfSlogan()
  168. end
  169. end
  170. end
  171. function UIHundredDojoView:OnOtherAreaDataChanged(areaChangeIds)
  172. if not self.isInitGrid then
  173. return
  174. end
  175. if not areaChangeIds then
  176. return
  177. end
  178. for _, id in pairs(areaChangeIds) do
  179. self:RefreshItemLua(id)
  180. if self.curSelectAreaId == id then
  181. self:OpenMenu(self.curSelectAreaId)
  182. end
  183. if self.sloganState == SloganState.Showing or self.sloganState == SloganState.Hiding then
  184. self:RefreshOtherSloganByAreaId(id)
  185. end
  186. end
  187. end
  188. function UIHundredDojoView:OnGetRewardCompleted(rewardNum, rewardList)
  189. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIHundredDojoReward, {rewardNum, rewardList})
  190. end
  191. function UIHundredDojoView:OnLocationAreaChanged(uid, areaId)
  192. if not areaId or areaId <= 0 then return end
  193. local loopGridView = self.scrollView.loopGridView
  194. if loopGridView.IsDraging then return end
  195. if loopGridView.ScrollRect.velocity ~= Vector2.zero then return end
  196. local padding = loopGridView.Padding
  197. local height = (loopGridView.ViewPortHeight - loopGridView.ItemSizeWithPadding.y) * 0.5 - padding.top
  198. local itemIdx = self.controller:GetRawIdxByAreaId(areaId)
  199. local count = self.controller:GetRawCount()
  200. loopGridView:RefreshListByIndex(count, itemIdx, 0, -height)
  201. self:OpenMenu(areaId)
  202. end
  203. function UIHundredDojoView:OnSloganChanged()
  204. if self.sloganState == SloganState.Showing or self.sloganState == SloganState.Hiding then
  205. self:RefreshSelfSlogan()
  206. end
  207. end
  208. function UIHundredDojoView:OnClickCloseBtn()
  209. ManagerContainer.LuaUIMgr:OpenSourceUI(self)
  210. end
  211. function UIHundredDojoView:OnClickInfoBtn()
  212. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPlayRule, {'PlayExplainTitle', 'HundredDojoPlayExplain'})
  213. end
  214. function UIHundredDojoView:OnClickLogBtn()
  215. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIHundredDojoLog)
  216. end
  217. function UIHundredDojoView:SureBuyChallengeNumBtn()
  218. local errorCode, costCfgId = self.controller:SendBuyChallengeNumReq()
  219. if errorCode ~= 0 then
  220. if errorCode == 1 then
  221. CommonUtil.ItemNotEnoughHandle(costCfgId, Enum.UIPageName.UIHundredDojo)
  222. else
  223. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(errorCode)
  224. end
  225. end
  226. end
  227. function UIHundredDojoView:OnClickAddBtn()
  228. local costCfgId, costNum = self.controller:GetBuyChallengeCountCost()
  229. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIDojoBuyTimes, {costNum, nil, self.SureBuyChallengeNumBtn, self})
  230. end
  231. function UIHundredDojoView:OnClickRewardBoxBtn()
  232. local errorCode = self.controller:SendGetRewardReq()
  233. if errorCode ~= 0 then
  234. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(errorCode)
  235. end
  236. end
  237. function UIHundredDojoView:OnClickShopBtn()
  238. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIShop, 6, self.uiData.id)
  239. end
  240. function UIHundredDojoView:OnClickRankBtn()
  241. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIHundredDojoGuildRank)
  242. end
  243. function UIHundredDojoView:OnClickAreaSlotItem(btn, params)
  244. local itemLua = params[0]
  245. if not itemLua then return end
  246. if self.curSelectAreaItemLua == itemLua then return end
  247. local funType = itemLua.funType
  248. if funType == Enum.HundredDojoFunType.Normal then
  249. local areaId = itemLua.areaId
  250. local areaData = self.controller:GetAreaDataById(areaId)
  251. if not areaData or not areaData:IsValidData() then
  252. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('HundredDojoView2')
  253. return
  254. else
  255. if not areaData:IsOccupy() then
  256. self:CloseMenu()
  257. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIHundredDojoChallenge, areaId)
  258. return
  259. end
  260. end
  261. if self.controller:IsSelfArea(areaId) then
  262. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('HundredDojoView1')
  263. return
  264. end
  265. self:LocationAndOpenMenu(areaId)
  266. else
  267. if Constant.OpenPay then
  268. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('FunctionLock')
  269. end
  270. end
  271. end
  272. function UIHundredDojoView:OnBeginDragAction(gridView)
  273. gridView.ItemSnapEnable = false
  274. self.alignAreaId = nil
  275. if self.refreshAreaTimer then
  276. self.refreshAreaTimer:Stop()
  277. end
  278. self:CloseSlogan()
  279. end
  280. function UIHundredDojoView:OnEndDragAction(gridView)
  281. gridView.ItemSnapEnable = false
  282. self.alignAreaId = nil
  283. if self.refreshAreaTimer then
  284. if self.refreshAreaTimer.time > 1 then
  285. self.refreshAreaTimer.time = 1
  286. end
  287. if not self.refreshAreaTimer.running then
  288. self.refreshAreaTimer:Start()
  289. end
  290. end
  291. self:OpenSlogan()
  292. end
  293. function UIHundredDojoView:OnSnapItemFinished(gridView, gridViewItem)
  294. gridView.ItemSnapEnable = false
  295. if self.refreshAreaTimer then
  296. if self.refreshAreaTimer.time > 1 then
  297. self.refreshAreaTimer.time = 1
  298. end
  299. if not self.refreshAreaTimer.running then
  300. self.refreshAreaTimer:Start()
  301. end
  302. end
  303. if not self.alignAreaId then return end
  304. local itemIdx, idx = self.controller:GetRawIdxByAreaId(self.alignAreaId)
  305. if itemIdx == 0
  306. or itemIdx == gridViewItem.ItemIndex
  307. or (itemIdx + 1) == self.controller:GetRawCount() then
  308. self:OpenMenu(self.alignAreaId)
  309. end
  310. self.alignAreaId = nil
  311. self:OpenSlogan()
  312. end
  313. function UIHundredDojoView:RefreshChallengeCount()
  314. self.challengeTimesTxt.text.text = tostring(self.controller:GetChallengeCount())
  315. end
  316. function UIHundredDojoView:RefreshBaseReward()
  317. local rewardRate = self.controller:GetRewardRate()
  318. local baseRewards = self.controller:GetBaseRewards()
  319. if baseRewards then
  320. self:RefreshRewardItem(self.baseReward.currency1, baseRewards[1], rewardRate)
  321. self:RefreshRewardItem(self.baseReward.currency2, baseRewards[2], rewardRate)
  322. self:RefreshRewardItem(self.baseReward.currency3, baseRewards[3], rewardRate)
  323. else
  324. self:RefreshRewardItem(self.baseReward.currency1, nil, rewardRate)
  325. self:RefreshRewardItem(self.baseReward.currency2, nil, rewardRate)
  326. self:RefreshRewardItem(self.baseReward.currency3, nil, rewardRate)
  327. end
  328. end
  329. function UIHundredDojoView:RefreshRewardItem(currency, reward, rewardRate)
  330. if not currency then return end
  331. currency.icon.image.enabled = false
  332. currency.icon.image.sprite = nil
  333. if reward then
  334. local cfgId = reward[1] or 0
  335. local num = reward[2] or 0
  336. local cfgData = ManagerContainer.CfgMgr:GetItemById(cfgId)
  337. if cfgData then
  338. CommonUtil.LoadIcon(self, cfgData.MiniIcon, function(sprite)
  339. if sprite then
  340. currency.icon.image.sprite = sprite
  341. currency.icon.image.enabled = true
  342. end
  343. end)
  344. end
  345. if rewardRate and rewardRate > 0 then
  346. currency.text.text.text = tostring(Mathf.Floor(num * rewardRate))
  347. else
  348. currency.text.text.text = '--'
  349. end
  350. currency:SetActive(true)
  351. else
  352. currency:SetActive(false)
  353. end
  354. end
  355. function UIHundredDojoView:RefreshReward()
  356. local nextTime = nil
  357. local baseRewardTime = self.controller:GetBaseRewardStartTime()
  358. local remainTime = 0
  359. if baseRewardTime and baseRewardTime > 0 then
  360. remainTime = ManagerContainer.LuaTimerMgr:CurLuaServerTime() - baseRewardTime
  361. remainTime = remainTime / 1000
  362. if type(remainTime) == 'userdata' then
  363. remainTime = #remainTime
  364. end
  365. end
  366. if remainTime > 0 then
  367. local rewardMaxTime = self.controller:GetRewardMaxTime()
  368. if remainTime >= rewardMaxTime then
  369. self.rewardBox.redPointItem.text.text.text = string.formatbykey('Max')
  370. self.rewardBox.redPointItem:SetActive(true)
  371. self.controller:ForceHandleRewardRedPoint()
  372. else
  373. local rewardInterval = self.controller:GetRewardInterval()
  374. local rewardNum = Mathf.Floor(remainTime / rewardInterval)
  375. if rewardNum > 99 then
  376. self.rewardBox.redPointItem.text.text.text = '99+'
  377. self.rewardBox.redPointItem:SetActive(true)
  378. elseif rewardNum >= 1 then
  379. self.rewardBox.redPointItem.text.text.text = tostring(rewardNum)
  380. self.rewardBox.redPointItem:SetActive(true)
  381. else
  382. self.rewardBox.redPointItem:SetActive(false)
  383. end
  384. nextTime = ((rewardInterval * (rewardNum + 1)) - remainTime)
  385. end
  386. else
  387. nextTime = self.controller:GetRewardInterval()
  388. self.rewardBox.redPointItem:SetActive(false)
  389. end
  390. if nextTime then
  391. if nextTime <= 0 then
  392. nextTime = 1
  393. end
  394. if self.rewardTimer then
  395. self.rewardTimer.time = 0
  396. self.rewardTimer.duration = nextTime
  397. else
  398. self.rewardTimer = Timer.New(slot(self.RefreshReward, self), nextTime, -1)
  399. end
  400. if not self.rewardTimer.running then
  401. self.rewardTimer:Start()
  402. end
  403. else
  404. if self.rewardTimer then
  405. self.rewardTimer:Stop()
  406. self.rewardTimer = nil
  407. end
  408. end
  409. end
  410. function UIHundredDojoView:RefreshOccupy()
  411. if self.occupyTimer and self.occupyTimer.running then
  412. self.occupyTimer:Stop()
  413. end
  414. local areaData = self.controller:GetSelfAreaData()
  415. if not areaData or not areaData:IsOccupy() then
  416. self.dojoNameTxt.text.text = string.formatbykey('HundredDojoView4')
  417. self.timerTxt.text.text = DateTimeUtil.convertSeconds2TimeStr1(0, true, true, false)
  418. local areaCfgData = ManagerContainer.CfgMgr:GetHundredDojoCfgById(1)
  419. if areaCfgData then
  420. local rewards = areaCfgData.ShowRewardList
  421. if rewards then
  422. self:RefreshRewardItem(self.dojoReward.currency1, rewards[1], 0)
  423. self:RefreshRewardItem(self.dojoReward.currency2, rewards[2], 0)
  424. self:RefreshRewardItem(self.dojoReward.currency3, rewards[3], 0)
  425. else
  426. self:RefreshRewardItem(self.dojoReward.currency1, nil, 0)
  427. self:RefreshRewardItem(self.dojoReward.currency2, nil, 0)
  428. self:RefreshRewardItem(self.dojoReward.currency3, nil, 0)
  429. end
  430. else
  431. self:RefreshRewardItem(self.dojoReward.currency1, nil, 0)
  432. self:RefreshRewardItem(self.dojoReward.currency2, nil, 0)
  433. self:RefreshRewardItem(self.dojoReward.currency3, nil, 0)
  434. end
  435. else
  436. local areaCfgData = ManagerContainer.CfgMgr:GetHundredDojoCfgById(areaData.id)
  437. if areaCfgData then
  438. local rewards = areaCfgData.ShowRewardList
  439. self.dojoNameTxt.text.text = string.formatbykey(areaCfgData.Name)
  440. self:RefreshOccupyTime(true)
  441. local rewardRate = self.controller:GetRewardRate()
  442. if rewards then
  443. self:RefreshRewardItem(self.dojoReward.currency1, rewards[1], rewardRate)
  444. self:RefreshRewardItem(self.dojoReward.currency2, rewards[2], rewardRate)
  445. self:RefreshRewardItem(self.dojoReward.currency3, rewards[3], rewardRate)
  446. else
  447. self:RefreshRewardItem(self.dojoReward.currency1, nil, rewardRate)
  448. self:RefreshRewardItem(self.dojoReward.currency2, nil, rewardRate)
  449. self:RefreshRewardItem(self.dojoReward.currency3, nil, rewardRate)
  450. end
  451. else
  452. self.dojoNameTxt.text.text = string.formatbykey('HundredDojoView5')
  453. self.timerTxt.text.text = DateTimeUtil.convertSeconds2TimeStr1(0, true, true, false)
  454. self:RefreshRewardItem(self.dojoReward.currency1, nil, 0)
  455. self:RefreshRewardItem(self.dojoReward.currency2, nil, 0)
  456. self:RefreshRewardItem(self.dojoReward.currency3, nil, 0)
  457. end
  458. end
  459. end
  460. function UIHundredDojoView:RefreshOccupyTime(isFirst)
  461. local areaData = self.controller:GetSelfAreaData()
  462. if not areaData or not areaData:IsOccupy() then
  463. if self.occupyTimer and self.occupyTimer.running then
  464. self.occupyTimer:Stop()
  465. end
  466. if not isFirst then
  467. self.controller:SendGetSelfInfoReq()
  468. end
  469. else
  470. local endTime = areaData:GetEndTime()
  471. local remainTime = 0
  472. if endTime and endTime > 0 then
  473. remainTime = endTime - ManagerContainer.LuaTimerMgr:CurLuaServerTime()
  474. remainTime = remainTime / 1000
  475. if type(remainTime) == 'userdata' then
  476. remainTime = #remainTime
  477. end
  478. end
  479. self.timerTxt.text.text = DateTimeUtil.convertSeconds2TimeStr1(remainTime, true, true, false)
  480. local validTime = nil
  481. if remainTime >= 86400 then
  482. validTime = remainTime % 3600
  483. if validTime == 0 then validTime = 3600 end
  484. elseif remainTime >= 3600 then
  485. validTime = remainTime % 60
  486. if validTime == 0 then validTime = 60 end
  487. else
  488. validTime = 1
  489. end
  490. if not self.occupyTimer then
  491. self.occupyTimer = Timer.New(slot(self.RefreshOccupyTime, self), 1, -1)
  492. else
  493. self.occupyTimer.time = 0
  494. self.occupyTimer.duration = validTime
  495. end
  496. if not self.occupyTimer.running then
  497. self.occupyTimer:Start()
  498. end
  499. end
  500. end
  501. function UIHundredDojoView:RefreshArea()
  502. local loopGridView = self.scrollView.loopGridView
  503. local areaData = self.controller:GetSelfAreaData()
  504. if not areaData or not areaData:IsValidData() then
  505. loopGridView:RefreshListByIndex(0, 0)
  506. if self.refreshAreaTimer then
  507. self.refreshAreaTimer:Stop()
  508. end
  509. return
  510. end
  511. local itemCount = loopGridView.ItemTotalCount
  512. local count = self.controller:GetRawCount()
  513. if itemCount ~= count then
  514. local areaId = self.controller:GetLastAttackAreaId()
  515. if not areaId or areaId <= 0 then
  516. areaId = areaData.id
  517. end
  518. if areaId and areaId > 0 then
  519. local padding = loopGridView.Padding
  520. local height = (loopGridView.ViewPortHeight - loopGridView.ItemSizeWithPadding.y) * 0.5 - padding.top
  521. local itemIdx = self.controller:GetRawIdxByAreaId(areaId)
  522. loopGridView:RefreshListByIndex(count, itemIdx, 0, -height)
  523. else
  524. loopGridView:RefreshListByIndex(count, 0)
  525. end
  526. self.isInitGrid = true
  527. self:SendGetOtherInfosReq()
  528. if not self.refreshAreaTimer then
  529. self.refreshAreaTimer = Timer.New(slot(self.SendGetOtherInfosReq, self), 5, -1)
  530. end
  531. if not self.refreshAreaTimer.running then
  532. self.refreshAreaTimer:Start()
  533. end
  534. end
  535. end
  536. function UIHundredDojoView:SendGetOtherInfosReq()
  537. local areaData = self.controller:GetSelfAreaData()
  538. if not areaData or not areaData:IsValidData() then
  539. return
  540. end
  541. local showRawIdxs = self.controller:GetShowRawIdxs()
  542. local startId, endId
  543. for i = 1, #showRawIdxs do
  544. local startId1, endId1 = self.controller:GetRawAreaStartAndEnd(showRawIdxs[i])
  545. if not startId or not endId then
  546. startId = startId1
  547. endId = endId1
  548. else
  549. if startId > startId1 then
  550. startId = startId1
  551. end
  552. if endId < endId1 then
  553. endId = endId1
  554. end
  555. end
  556. end
  557. if not startId or not endId then
  558. LogError('[wboy] not find need get data')
  559. return
  560. end
  561. if endId < startId then
  562. LogError('[wboy] not find need get valid data')
  563. return
  564. end
  565. local areaIds = {}
  566. if (endId - startId) > 30 then
  567. LogWarning('[Wboy] Need Get Data is Num' .. tostring((endId - startId)))
  568. end
  569. local selfId = areaData.id
  570. for i = startId, endId do
  571. if i ~= selfId then
  572. local areaCfgData = ManagerContainer.CfgMgr:GetHundredDojoCfgById(i)
  573. if areaCfgData and areaCfgData.FunType == Enum.HundredDojoFunType.Normal then
  574. areaIds[#areaIds+1] = i
  575. end
  576. end
  577. end
  578. self.controller:SendGetOtherInfosReq(areaIds)
  579. end
  580. function UIHundredDojoView:GetItemByRowColumn(gridView, itemIndex, row, column)
  581. self.controller:AddShowRawIdx(itemIndex)
  582. local startId, endId = self.controller:GetRawAreaStartAndEnd(itemIndex)
  583. local item = gridView:NewListViewItem('HundredDojoRawItem')
  584. local itemLua = CommonUtil.BindGridViewItem2Lua(self, 'HundredDojoRawItem', item.gameObject)
  585. if itemLua then
  586. for i = startId, endId do
  587. self:RefreshAreaItemLuaByAreaId(itemLua, i)
  588. end
  589. end
  590. ManagerContainer.LuaUIMgr:ForceRebuildLayoutImmediate(item.CachedRectTransform)
  591. return item
  592. end
  593. function UIHundredDojoView:FindAreaItemLuaByAreaId(areaId)
  594. local itemIdx, idx = self.controller:GetRawIdxByAreaId(areaId)
  595. local item = self.scrollView.loopGridView:GetShownItemByItemIndex(itemIdx)
  596. if item then
  597. local itemLua = CommonUtil.GetBindGridViewItem2Lua(self, 'HundredDojoRawItem', item.gameObject)
  598. if itemLua then
  599. if itemLua.childrenLua then
  600. return itemLua.childrenLua[idx]
  601. end
  602. end
  603. end
  604. return nil
  605. end
  606. function UIHundredDojoView:RefreshItemLua(areaId)
  607. if not areaId then return end
  608. local itemIdx, idx = self.controller:GetRawIdxByAreaId(areaId)
  609. local item = self.scrollView.loopGridView:GetShownItemByItemIndex(itemIdx)
  610. if item then
  611. local itemLua = CommonUtil.GetBindGridViewItem2Lua(self, 'HundredDojoRawItem', item.gameObject)
  612. if itemLua then
  613. self:RefreshAreaItemLuaByAreaId(itemLua, areaId)
  614. end
  615. end
  616. end
  617. function UIHundredDojoView:RefreshAreaItemLuaByAreaId(itemLua, areaId)
  618. local childrenLua = itemLua.childrenLua
  619. if not childrenLua then
  620. childrenLua = {}
  621. itemLua.childrenLua = childrenLua
  622. end
  623. local areaCfgData = ManagerContainer.CfgMgr:GetHundredDojoCfgById(areaId)
  624. if areaCfgData then
  625. local itemIdx, idx = self.controller:GetRawIdxByAreaId(areaId)
  626. local areaItemLua = childrenLua[idx]
  627. if not areaItemLua or areaItemLua.funType ~= areaCfgData.FunType or areaItemLua.areaType ~= areaCfgData.AreaType then
  628. self:ReleaseAreaItemLua(areaItemLua)
  629. areaItemLua = self:GetAreaItemLua(areaCfgData.FunType, areaCfgData.AreaType, itemLua.transform)
  630. childrenLua[idx] = areaItemLua
  631. end
  632. self:RefreshAreaItemLua(areaItemLua, areaId)
  633. end
  634. end
  635. function UIHundredDojoView:RefreshAreaItemLua(areaItemLua, areaId, hideName)
  636. if not areaItemLua then return end
  637. areaItemLua.areaId = areaId
  638. local areaCfgData = ManagerContainer.CfgMgr:GetHundredDojoCfgById(areaId)
  639. if areaCfgData then
  640. areaItemLua:SetActive(true)
  641. if areaCfgData.FunType == Enum.HundredDojoFunType.Normal then
  642. local heroCutePath = nil
  643. local areaData = self.controller:GetAreaDataById(areaId)
  644. if areaData and areaData:IsOccupy() then
  645. local robotId = areaData:GetRobotId()
  646. local playName = nil
  647. local atkPower = 0
  648. local color = nil
  649. if robotId and robotId > 0 then
  650. heroCutePath = self.controller:GetRobotHeroCute()
  651. local robotCfgData = ManagerContainer.CfgMgr:GetRobotDataByCfgId(robotId)
  652. if robotCfgData then
  653. playName = robotCfgData.RobotName
  654. atkPower = robotCfgData.FightPower and robotCfgData.FightPower[1] or 0
  655. end
  656. color = ColorExtension.HexStringToColor(string.formatbykey('ColorID4'))
  657. else
  658. local isSelfArea = self.controller:IsSelfArea(areaId)
  659. local uid = nil
  660. if isSelfArea then
  661. playName = self.controller:GetUserNickname()
  662. atkPower = self.controller:GetTotalFightPower()
  663. local roleId = self.controller:GetUserRoleId()
  664. local roleCfgData = ManagerContainer.CfgMgr:GetRoleDataById(roleId)
  665. if roleCfgData then
  666. heroCutePath = roleCfgData.HeroCute
  667. end
  668. else
  669. local playBrief = areaData:GetPlayBrief()
  670. if playBrief then
  671. playName = playBrief.nickName
  672. atkPower = playBrief.fightPower
  673. uid = playBrief.uid
  674. local roleId = CommonUtil.JobIdToRoleId(playBrief.configId, playBrief.gender)
  675. local roleCfgData = ManagerContainer.CfgMgr:GetRoleDataById(roleId)
  676. if roleCfgData then
  677. heroCutePath = roleCfgData.HeroCute
  678. end
  679. end
  680. end
  681. if isSelfArea then
  682. color = ColorExtension.HexStringToColor(string.formatbykey('ColorID2'))
  683. elseif self.controller:IsLastBeAtkArea(uid) then
  684. color = ColorExtension.HexStringToColor(string.formatbykey('ColorID6'))
  685. elseif self.controller:IsSameGuild(areaData:GetGuildId()) then
  686. color = ColorExtension.HexStringToColor(string.formatbykey('ColorID3'))
  687. else
  688. color = ColorExtension.HexStringToColor(string.formatbykey('ColorID5'))
  689. end
  690. end
  691. if not color then
  692. color = ColorExtension.HexStringToColor(string.formatbykey('ColorID1'))
  693. end
  694. if areaData:IsProtected() then
  695. areaItemLua.animator:Play('ShieldKeep')
  696. elseif areaData:IsFighting() then
  697. areaItemLua.animator:Play('BattleKeep')
  698. else
  699. areaItemLua.animator:Play('NormalKeep')
  700. end
  701. areaItemLua.nameBoard.bG.image.color = color
  702. areaItemLua.nameBoard.nameTxt.text.text = (playName and tostring(playName) or '')
  703. areaItemLua.nameBoard.power.text.text = tostring(atkPower)
  704. if hideName then
  705. areaItemLua.nameBoard:SetActive(false)
  706. else
  707. areaItemLua.nameBoard:SetActive(true)
  708. end
  709. if not heroCutePath or heroCutePath == '' then
  710. heroCutePath = self.controller:GetDefaultHeroCute()
  711. end
  712. elseif not areaData or not areaData:IsValidData() then
  713. if not heroCutePath or heroCutePath == '' then
  714. heroCutePath = self.controller:GetDefaultHeroCute()
  715. end
  716. areaItemLua.animator:Play('NormalKeep')
  717. areaItemLua.nameBoard:SetActive(false)
  718. else
  719. if areaData:IsFighting() then
  720. areaItemLua.animator:Play('BattleKeep')
  721. else
  722. areaItemLua.animator:Play('EmptyKeep')
  723. end
  724. areaItemLua.nameBoard:SetActive(false)
  725. end
  726. areaItemLua.player.image.enabled = false
  727. areaItemLua.player.image.sprite = nil
  728. areaItemLua.shadow:SetActive(false)
  729. CommonUtil.LoadIcon(self, heroCutePath, function(sprite)
  730. areaItemLua.player.image.sprite = sprite
  731. areaItemLua.player.image.enabled = true
  732. areaItemLua.shadow:SetActive(true)
  733. end, areaItemLua, 'AreaItemHeroCute')
  734. end
  735. else
  736. areaItemLua:SetActive(false)
  737. end
  738. end
  739. function UIHundredDojoView:RecycleItem(gridView, itemIndex, row, column, loopGridViewItem)
  740. self.controller:RemoveShowRawIdx(itemIndex)
  741. local itemLua = CommonUtil.GetBindGridViewItem2Lua(self, 'HundredDojoRawItem', loopGridViewItem.gameObject)
  742. if not itemLua then return end
  743. local childrenLua = itemLua.childrenLua
  744. if childrenLua then
  745. for _, areaItemLua in pairs(childrenLua) do
  746. self:ReleaseAreaItemLua(areaItemLua)
  747. end
  748. end
  749. itemLua.childrenLua = nil
  750. end
  751. function UIHundredDojoView:GetAreaItemLua(funType, areaType, parent)
  752. if self.areaPool then
  753. if self.areaPool[funType] then
  754. local ls = self.areaPool[funType][areaType]
  755. if ls then
  756. local item = ls[#ls]
  757. if item then
  758. ls[#ls] = nil
  759. item.transform:SetParent(parent)
  760. item.transform.localPosition = Vector3.zero
  761. item.transform.localScale = Vector3.one
  762. item.transform.localRotation = Quaternion.identity
  763. item:SetActive(true)
  764. return item
  765. end
  766. end
  767. end
  768. end
  769. local source = nil
  770. if funType == Enum.HundredDojoFunType.Box then
  771. source = self.hundredDojoBoxSlotItem
  772. elseif funType == Enum.HundredDojoFunType.Normal then
  773. if areaType == Enum.HundredDojoAreaType.FirstArea then
  774. source = self.hundredDojoSlotItem1
  775. elseif areaType == Enum.HundredDojoAreaType.SuperArea then
  776. source = self.hundredDojoSlotItem2
  777. elseif areaType == Enum.HundredDojoAreaType.OneLvArea then
  778. source = self.hundredDojoSlotItem3
  779. elseif areaType == Enum.HundredDojoAreaType.TwoLvArea then
  780. source = self.hundredDojoSlotItem4
  781. elseif areaType == Enum.HundredDojoAreaType.ThreeArea then
  782. source = self.hundredDojoSlotItem5
  783. elseif areaType == Enum.HundredDojoAreaType.FourArea then
  784. source = self.hundredDojoSlotItem6
  785. else
  786. source = self.hundredDojoSlotItem6
  787. end
  788. end
  789. if not source then return nil end
  790. local newGo = UnityEngine.GameObject.Instantiate(source.gameObject)
  791. local itemLua = CommonUtil.BindGridViewItem2Lua(self, source.prefabName, newGo)
  792. itemLua.transform:SetParent(parent)
  793. itemLua.transform.localPosition = Vector3.zero
  794. itemLua.transform.localScale = Vector3.one
  795. itemLua.transform.localRotation = Quaternion.identity
  796. itemLua.funType = funType
  797. itemLua.areaType = areaType
  798. itemLua:SetActive(true)
  799. if funType == Enum.HundredDojoFunType.Box then
  800. self.uiBase:AddButtonUniqueEventListener(itemLua.button, self, self.OnClickAreaSlotItem, itemLua)
  801. elseif funType == Enum.HundredDojoFunType.Normal then
  802. self.uiBase:AddButtonUniqueEventListener(itemLua.button, self, self.OnClickAreaSlotItem, itemLua)
  803. end
  804. return itemLua
  805. end
  806. function UIHundredDojoView:ReleaseAreaItemLua(itemLua)
  807. if not itemLua then return end
  808. local funType = itemLua.funType
  809. local areaType = itemLua.areaType
  810. if not funType or not areaType then
  811. local go = itemLua.gameObject
  812. CommonUtil.ClearBindGridViewItem2Lua(self, itemLua.prefabName, go)
  813. CommonUtil.DestroyGO(go)
  814. return
  815. end
  816. if not self.areaPool then
  817. self.areaPool = {}
  818. end
  819. if not self.areaPool[funType] then
  820. self.areaPool[funType] = {}
  821. end
  822. local ls = self.areaPool[funType][areaType]
  823. if not ls then
  824. ls = {}
  825. self.areaPool[funType][areaType] = ls
  826. end
  827. itemLua.transform:SetParent(self.scrollView.transform)
  828. itemLua:SetActive(false)
  829. ls[#ls + 1] = itemLua
  830. end
  831. function UIHundredDojoView:DisposeAreaItemLua()
  832. if not self.areaPool then
  833. return
  834. end
  835. for _, areaMap in pairs(self.areaPool) do
  836. for _, ls in pairs(areaMap) do
  837. for _, itemLua in pairs(ls) do
  838. if itemLua.gameObject then
  839. CommonUtil.DestroyGO(itemLua.gameObject)
  840. end
  841. end
  842. end
  843. end
  844. self.areaPool = nil
  845. end
  846. function UIHundredDojoView:LocationAndOpenMenu(areaId)
  847. local itemIdx = self.controller:GetRawIdxByAreaId(areaId)
  848. local loopGridView = self.scrollView.loopGridView
  849. local pair1 = loopGridView:GetRowColumnByItemIndex(itemIdx)
  850. local pair2 = loopGridView:GetRowColumnByItemIndex(itemIdx + 1)
  851. local offset = loopGridView.ContainerTrans.anchoredPosition
  852. local itemPosStart = loopGridView:GetItemPos(pair1.mRow, pair1.mColumn) + offset
  853. local itemPosEnd = loopGridView:GetItemPos(pair2.mRow, pair2.mColumn) + offset
  854. local rect = self.viewRect.rectTransform.rect
  855. local min = self.viewRect.rectTransform:TransformPoint(rect.min)
  856. local max = self.viewRect.rectTransform:TransformPoint(rect.max)
  857. local scrollRect = loopGridView.ScrollRect
  858. local viewport = scrollRect.viewport
  859. min = viewport:InverseTransformPoint(min)
  860. max = viewport:InverseTransformPoint(max)
  861. local isStart1 = ((itemPosStart.y - min.y) >= 0.001)
  862. local isStart2 = ((itemPosStart.y - max.y) <= 0.001)
  863. local isEnd1 = ((itemPosEnd.y - min.y) >= 0.001)
  864. local isEnd2 = ((itemPosEnd.y - max.y) <= 0.001 )
  865. if isStart1 and isStart2 and isEnd1 and isEnd2 then
  866. self:OpenMenu(areaId)
  867. return
  868. end
  869. local val = scrollRect.verticalNormalizedPosition
  870. if val <= 0 or val >= 1 then
  871. self:OpenMenu(areaId)
  872. return
  873. end
  874. self:CloseSlogan()
  875. self.alignAreaId = areaId
  876. if self.refreshAreaTimer then
  877. self.refreshAreaTimer:Stop()
  878. end
  879. loopGridView.ItemSnapEnable = true
  880. loopGridView:SetSnapTargetItemRowColumn(pair1.mRow, pair1.mColumn)
  881. local rect1 = viewport.rect
  882. if isEnd1 then
  883. loopGridView.ItemSnapPivot = Vector2.one
  884. local pivotOffset = (rect1.yMax - max.y)
  885. if pivotOffset <= 0 then
  886. pivotOffset = 1
  887. else
  888. pivotOffset = 1 - pivotOffset / rect1.height
  889. end
  890. loopGridView.ViewPortSnapPivot = Vector2(0, pivotOffset)
  891. return
  892. end
  893. loopGridView.ItemSnapPivot = Vector2.zero
  894. local pivotOffset = (min.y - rect1.yMin)
  895. if pivotOffset <= 0 then
  896. pivotOffset = 0
  897. else
  898. pivotOffset = pivotOffset / rect1.height
  899. end
  900. loopGridView.ViewPortSnapPivot = Vector2(0, pivotOffset)
  901. end
  902. function UIHundredDojoView:OpenMenu(areaId)
  903. if not areaId then return end
  904. self.curSelectAreaId = areaId
  905. if self.controller:IsSelfArea(areaId) then
  906. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('HundredDojoTip1')
  907. return
  908. end
  909. local areaData = self.controller:GetAreaDataById(areaId)
  910. if not areaData or not areaData:IsValidData() then
  911. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('HundredDojoTip2')
  912. return
  913. else
  914. if not areaData:IsOccupy() then
  915. self:CloseMenu()
  916. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIHundredDojoChallenge, areaId)
  917. return
  918. end
  919. end
  920. local itemIdx, idx = self.controller:GetRawIdxByAreaId(areaId)
  921. local item = self.scrollView.loopGridView:GetShownItemByItemIndex(itemIdx)
  922. if not item then return end
  923. local itemLua = CommonUtil.GetBindGridViewItem2Lua(self, 'HundredDojoRawItem', item.gameObject)
  924. if not itemLua then return end
  925. local childrenLua = itemLua.childrenLua
  926. if not childrenLua then return end
  927. local areaItemLua = childrenLua[idx]
  928. if not areaItemLua then return end
  929. local areaCfgData = ManagerContainer.CfgMgr:GetHundredDojoCfgById(areaId)
  930. if not areaCfgData then return end
  931. local robotId = areaData:GetRobotId()
  932. local playName = nil
  933. local atkPower = 0
  934. local color = nil
  935. if robotId and robotId > 0 then
  936. local robotCfgData = ManagerContainer.CfgMgr:GetRobotDataByCfgId(robotId)
  937. if robotCfgData then
  938. playName = robotCfgData.RobotName
  939. atkPower = robotCfgData.FightPower and robotCfgData.FightPower[1] or 0
  940. end
  941. color = ColorExtension.HexStringToColor(string.formatbykey('ColorID4'))
  942. else
  943. local uid = nil
  944. local playBrief = areaData:GetPlayBrief()
  945. if playBrief then
  946. playName = playBrief.nickName
  947. atkPower = playBrief.fightPower
  948. uid = playBrief.uid
  949. end
  950. if self.controller:IsSelfArea(areaId) then
  951. color = ColorExtension.HexStringToColor(string.formatbykey('ColorID2'))
  952. elseif self.controller:IsLastBeAtkArea(uid) then
  953. color = ColorExtension.HexStringToColor(string.formatbykey('ColorID6'))
  954. elseif self.controller:IsSameGuild(areaData:GetGuildId()) then
  955. color = ColorExtension.HexStringToColor(string.formatbykey('ColorID3'))
  956. else
  957. color = ColorExtension.HexStringToColor(string.formatbykey('ColorID5'))
  958. end
  959. end
  960. if not color then
  961. color = ColorExtension.HexStringToColor(string.formatbykey('ColorID1'))
  962. end
  963. self.menu:SetActive(true)
  964. if not self.curSelectAreaItemLua or self.curSelectAreaItemLua.funType ~= areaCfgData.FunType or self.curSelectAreaItemLua.areaType ~= areaCfgData.AreaType then
  965. self:ReleaseAreaItemLua(self.curSelectAreaItemLua)
  966. self.curSelectAreaItemLua = self:GetAreaItemLua(areaCfgData.FunType, areaCfgData.AreaType, self.menu.transform)
  967. end
  968. if self.curSelectAreaItemLua then
  969. self.curSelectAreaItemLua.transform.position = areaItemLua.transform.position
  970. self:RefreshAreaItemLua(self.curSelectAreaItemLua, areaId, true)
  971. end
  972. self.menu.panel.transform.position = areaItemLua.transform.position
  973. self.menu.panel.transform:SetAsLastSibling()
  974. self.menu.nameBoard.bG.image.color = color
  975. self.menu.nameBoard.nameTxt.text.text = (playName and tostring(playName) or '')
  976. self.menu.nameBoard.power.text.text = tostring(atkPower)
  977. self.menu.nameBoard:SetActive(true)
  978. self:RefreshMenuLeftTimer()
  979. self:ReleaseOtherSloganByAreaId(areaId)
  980. end
  981. function UIHundredDojoView:CloseMenu()
  982. self.curSelectAreaId = nil
  983. if self.menuLeftTimer then
  984. self.menuLeftTimer:Stop()
  985. end
  986. if self.curSelectAreaItemLua then
  987. self:ReleaseAreaItemLua(self.curSelectAreaItemLua)
  988. self.curSelectAreaItemLua = nil
  989. end
  990. self.menu:SetActive(false)
  991. end
  992. function UIHundredDojoView:RefreshMenuLeftTimer()
  993. local areaId = self.curSelectAreaId
  994. if not areaId then
  995. if self.menuLeftTimer then
  996. self.menuLeftTimer:Stop()
  997. end
  998. return
  999. end
  1000. if self.controller:IsSelfArea(areaId) then
  1001. self:CloseMenu()
  1002. return
  1003. end
  1004. local areaData = self.controller:GetAreaDataById(areaId)
  1005. if not areaData or not areaData:IsValidData() then
  1006. self:CloseMenu()
  1007. return
  1008. else
  1009. if not areaData:IsOccupy() then
  1010. self:CloseMenu()
  1011. return
  1012. end
  1013. end
  1014. local robotId = areaData:GetRobotId()
  1015. if robotId and robotId > 0 then
  1016. if self.menuLeftTimer then
  1017. self.menuLeftTimer:Stop()
  1018. end
  1019. self.menu.leftTimer:SetActive(false)
  1020. self.menu.shield:SetActive(false)
  1021. self.menu.btnInfo:SetActive(false)
  1022. self.menu.btnClg:SetActive(true)
  1023. return
  1024. end
  1025. self.menu.btnInfo:SetActive(true)
  1026. self.menu.btnClg:SetActive(true)
  1027. local isProtected = areaData:IsProtected()
  1028. local remainTime = 0
  1029. if isProtected then
  1030. local endTime = areaData:GetProtectEndTime()
  1031. if endTime and endTime > 0 then
  1032. remainTime = endTime - ManagerContainer.LuaTimerMgr:CurLuaServerTime()
  1033. remainTime = remainTime / 1000
  1034. if type(remainTime) == 'userdata' then
  1035. remainTime = #remainTime
  1036. end
  1037. end
  1038. self.menu.shield.text.text.text = DateTimeUtil.convertSeconds2TimeStr1(remainTime, true, true, false)
  1039. self.menu.leftTimer:SetActive(false)
  1040. self.menu.shield:SetActive(true)
  1041. else
  1042. local endTime = areaData:GetEndTime()
  1043. if endTime and endTime > 0 then
  1044. remainTime = endTime - ManagerContainer.LuaTimerMgr:CurLuaServerTime()
  1045. remainTime = remainTime / 1000
  1046. if type(remainTime) == 'userdata' then
  1047. remainTime = #remainTime
  1048. end
  1049. end
  1050. self.menu.leftTimer.text.text.text = DateTimeUtil.convertSeconds2TimeStr1(remainTime, true, true, false)
  1051. self.menu.leftTimer:SetActive(true)
  1052. self.menu.shield:SetActive(false)
  1053. end
  1054. if remainTime <= 0 then
  1055. if self.menuLeftTimer then
  1056. self.menuLeftTimer:Stop()
  1057. end
  1058. else
  1059. local validTime = nil
  1060. if remainTime >= 86400 then
  1061. validTime = remainTime % 3600
  1062. if validTime == 0 then validTime = 3600 end
  1063. elseif remainTime >= 3600 then
  1064. validTime = remainTime % 60
  1065. if validTime == 0 then validTime = 60 end
  1066. else
  1067. validTime = 1
  1068. end
  1069. if self.menuLeftTimer then
  1070. self.menuLeftTimer.time = 0
  1071. self.menuLeftTimer.duration = validTime
  1072. else
  1073. self.menuLeftTimer = Timer.New(slot(self.RefreshMenuLeftTimer, self), validTime, -1)
  1074. end
  1075. if not self.menuLeftTimer.running then
  1076. self.menuLeftTimer:Start()
  1077. end
  1078. end
  1079. end
  1080. function UIHundredDojoView:OnClickMenuCloseBtn()
  1081. self:CloseMenu()
  1082. end
  1083. function UIHundredDojoView:OnClickMenuChallengeBtn()
  1084. local areaId = self.curSelectAreaId
  1085. if not areaId then return end
  1086. if self.controller:IsSelfArea(areaId) then
  1087. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('HundredDojoView1')
  1088. return
  1089. end
  1090. local areaData = self.controller:GetAreaDataById(areaId)
  1091. if not areaData or not areaData:IsValidData() then
  1092. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('HundredDojoView2')
  1093. return
  1094. end
  1095. self:CloseMenu()
  1096. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIHundredDojoChallenge, areaId)
  1097. end
  1098. function UIHundredDojoView:OnClickMenuInfoBtn()
  1099. local areaId = self.curSelectAreaId
  1100. if not areaId then return end
  1101. if self.controller:IsSelfArea(areaId) then
  1102. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('HundredDojoView1')
  1103. return
  1104. end
  1105. local areaData = self.controller:GetAreaDataById(areaId)
  1106. if not areaData or not areaData:IsValidData() then
  1107. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('HundredDojoView2')
  1108. return
  1109. else
  1110. if not areaData:IsOccupy() then
  1111. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('HundredDojoView2')
  1112. return
  1113. end
  1114. end
  1115. local robotId = areaData:GetRobotId()
  1116. if robotId and robotId > 0 then
  1117. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('HundredDojoView2')
  1118. return
  1119. end
  1120. self:CloseMenu()
  1121. local playBrief = areaData:GetPlayBrief()
  1122. if playBrief then
  1123. ManagerContainer.LuaUIMgr:OpenRoleMessagePanel(playBrief.uid)
  1124. end
  1125. end
  1126. function UIHundredDojoView:OnClickMySloganBtn()
  1127. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIHundredDojoSlogan)
  1128. end
  1129. function UIHundredDojoView:OpenSlogan()
  1130. if not self.sloganTimer then
  1131. self.sloganTimer = Timer.New(slot(self.UpdateSloganTimer, self), 0.03, -1)
  1132. else
  1133. self.sloganTimer.duration = 0.03
  1134. self.sloganTimer.time = 0.03
  1135. end
  1136. self.sloganState = SloganState.CheckOpening
  1137. if not self.sloganTimer.running then
  1138. self.sloganTimer:Start()
  1139. end
  1140. end
  1141. function UIHundredDojoView:CloseSlogan()
  1142. self.mySloganitem:SetActive(false)
  1143. self:HideSlogan()
  1144. if self.sloganTimer then
  1145. self.sloganTimer:Stop()
  1146. end
  1147. self.sloganState = SloganState.Idle
  1148. end
  1149. function UIHundredDojoView:ShowSlogan()
  1150. self:RefreshOtherSlogans()
  1151. end
  1152. function UIHundredDojoView:HideSlogan()
  1153. if self.otherSloganDic then
  1154. for areaId, sloganItemLua in pairs(self.otherSloganDic) do
  1155. self:ReleaseOtherSloganItemLua(sloganItemLua)
  1156. self.otherSloganDic[areaId] = nil
  1157. end
  1158. end
  1159. end
  1160. function UIHundredDojoView:DisposeSlogan()
  1161. if self.sloganTimer then
  1162. self.sloganTimer:Stop()
  1163. self.sloganTimer = nil
  1164. end
  1165. if self.otherSloganDic then
  1166. for areaId, sloganItemLua in pairs(self.otherSloganDic) do
  1167. self:DisposeOtherSloganItemLua(sloganItemLua)
  1168. end
  1169. self.otherSloganDic = nil
  1170. end
  1171. if self.sloganPool then
  1172. for areaId, sloganItemLua in pairs(self.sloganPool) do
  1173. self:DisposeOtherSloganItemLua(sloganItemLua)
  1174. end
  1175. self.sloganPool = nil
  1176. end
  1177. end
  1178. function UIHundredDojoView:UpdateSloganTimer()
  1179. if self.sloganState == SloganState.CheckOpening then
  1180. local loopGridView = self.scrollView.loopGridView
  1181. if not loopGridView.IsDraging then
  1182. if loopGridView.ScrollRect.velocity == Vector2.zero then
  1183. self.sloganState = SloganState.Opening
  1184. self.sloganTimer.time = self.controller:GetSloganStartTime()
  1185. end
  1186. end
  1187. elseif self.sloganState == SloganState.Opening then
  1188. self:RefreshSelfSlogan()
  1189. self:ShowSlogan()
  1190. self.sloganState = SloganState.Showing
  1191. self.sloganTimer.time = self.controller:GetSloganShowTime()
  1192. elseif self.sloganState == SloganState.Showing then
  1193. self:HideSlogan()
  1194. self.sloganState = SloganState.Hiding
  1195. self.sloganTimer.time = self.controller:GetSloganHideTime()
  1196. elseif self.sloganState == SloganState.Hiding then
  1197. self:ShowSlogan()
  1198. self.sloganState = SloganState.Showing
  1199. self.sloganTimer.time = self.controller:GetSloganShowTime()
  1200. else
  1201. self:CloseSlogan()
  1202. end
  1203. end
  1204. function UIHundredDojoView:RefreshSelfSlogan()
  1205. local areaData = self.controller:GetSelfAreaData()
  1206. if areaData and areaData:IsOccupy() then
  1207. if self.curSelectAreaId ~= areaData.id then
  1208. local areaItemLua = self:FindAreaItemLuaByAreaId(areaData.id)
  1209. if areaItemLua then
  1210. self.mySloganitem.transform.position = areaItemLua.transform.position
  1211. self.mySloganitem:SetActive(true)
  1212. local slogan = self.controller:GetSelfSlogan()
  1213. if not slogan or slogan == '' then
  1214. self.mySloganitem.light:SetActive(true)
  1215. self.mySloganitem.slogan:SetActive(false)
  1216. self.mySloganitem.dsc:SetActive(true)
  1217. else
  1218. self.mySloganitem.light:SetActive(false)
  1219. self.mySloganitem.slogan:SetActive(true)
  1220. self.mySloganitem.dsc:SetActive(false)
  1221. self.mySloganitem.slogan.text.text = tostring(slogan)
  1222. end
  1223. return
  1224. end
  1225. end
  1226. end
  1227. self.mySloganitem:SetActive(false)
  1228. end
  1229. function UIHundredDojoView:RefreshOtherSlogans()
  1230. local startItemId, endItemId
  1231. local viewRectTrans = self.sloganViewRect.rectTransform
  1232. local rect = viewRectTrans.rect
  1233. local min = viewRectTrans:TransformPoint(rect.min)
  1234. local max = viewRectTrans:TransformPoint(rect.max)
  1235. local loopGridView = self.scrollView.loopGridView
  1236. local updateAreaIds = nil
  1237. startItemId, endItemId = loopGridView:FindItemIdxInWorldRect(min, max, startItemId, endItemId)
  1238. endItemId = endItemId - 1
  1239. if endItemId >= startItemId then
  1240. local sloganNumMax = self.controller:GetSloganNumMax()
  1241. if sloganNumMax > 0 then
  1242. local validAreaIds = {}
  1243. local num = 0
  1244. for i = startItemId, endItemId do
  1245. local startId, endId = self.controller:GetRawAreaStartAndEnd(i)
  1246. for j = startId, endId do
  1247. num = num + 1
  1248. validAreaIds[num] = j
  1249. end
  1250. end
  1251. if num > 0 then
  1252. updateAreaIds = {}
  1253. if sloganNumMax >= num then
  1254. for i = 1, num do
  1255. local areaId = validAreaIds[i]
  1256. updateAreaIds[areaId] = true
  1257. self:InitOtherSloganByAreaId(areaId)
  1258. end
  1259. else
  1260. for i = 1, sloganNumMax do
  1261. local idx = math.random(1, num)
  1262. local areaId = validAreaIds[idx]
  1263. updateAreaIds[areaId] = true
  1264. self:InitOtherSloganByAreaId(areaId)
  1265. table.remove(validAreaIds, idx)
  1266. num = num - 1
  1267. end
  1268. end
  1269. end
  1270. end
  1271. end
  1272. if self.otherSloganDic then
  1273. for areaId, sloganItemLua in pairs(self.otherSloganDic) do
  1274. if not updateAreaIds or not updateAreaIds[areaId] then
  1275. self:ReleaseOtherSloganItemLua(sloganItemLua)
  1276. self.otherSloganDic[areaId] = nil
  1277. end
  1278. end
  1279. end
  1280. end
  1281. function UIHundredDojoView:InitOtherSloganByAreaId(areaId)
  1282. if self.curSelectAreaId ~= areaId then
  1283. if not self.controller:IsSelfArea(areaId) then
  1284. local areaData = self.controller:GetAreaDataById(areaId)
  1285. if areaData and areaData:IsOccupy() then
  1286. local slogan = areaData:GetSlogan()
  1287. if slogan and slogan ~= '' then
  1288. local areaItemLua = self:FindAreaItemLuaByAreaId(areaId)
  1289. if areaItemLua then
  1290. local otherSloganItemLua = nil
  1291. if self.otherSloganDic then
  1292. otherSloganItemLua = self.otherSloganDic[areaId]
  1293. else
  1294. self.otherSloganDic = {}
  1295. end
  1296. if not otherSloganItemLua then
  1297. otherSloganItemLua = self:GetOtherSloganItemLua()
  1298. self.otherSloganDic[areaId] = otherSloganItemLua
  1299. end
  1300. otherSloganItemLua.sloganTxt.text = tostring(slogan)
  1301. otherSloganItemLua.transform.position = areaItemLua.transform.position
  1302. return
  1303. end
  1304. end
  1305. end
  1306. end
  1307. end
  1308. self:ReleaseOtherSloganByAreaId(areaId)
  1309. end
  1310. function UIHundredDojoView:RefreshOtherSloganByAreaId(areaId)
  1311. if self.otherSloganDic then
  1312. local otherSloganItemLua = self.otherSloganDic[areaId]
  1313. if otherSloganItemLua then
  1314. if not self.controller:IsSelfArea(areaId) then
  1315. local areaData = self.controller:GetAreaDataById(areaId)
  1316. if areaData and areaData:IsOccupy() then
  1317. local slogan = areaData:GetSlogan()
  1318. if slogan and slogan ~= '' then
  1319. local areaItemLua = self:FindAreaItemLuaByAreaId(areaId)
  1320. if areaItemLua then
  1321. otherSloganItemLua.sloganTxt.text = tostring(slogan)
  1322. otherSloganItemLua.transform.position = areaItemLua.transform.position
  1323. return
  1324. end
  1325. end
  1326. end
  1327. end
  1328. self:ReleaseOtherSloganItemLua(otherSloganItemLua)
  1329. self.otherSloganDic[areaId] = nil
  1330. end
  1331. end
  1332. end
  1333. function UIHundredDojoView:ReleaseOtherSloganByAreaId(areaId)
  1334. if self.otherSloganDic then
  1335. local otherSloganItemLua = self.otherSloganDic[areaId]
  1336. if otherSloganItemLua then
  1337. self:ReleaseOtherSloganItemLua(otherSloganItemLua)
  1338. self.otherSloganDic[areaId] = nil
  1339. end
  1340. end
  1341. end
  1342. function UIHundredDojoView:GetOtherSloganItemLua()
  1343. if self.sloganPool then
  1344. local itemLua = self.sloganPool[#self.sloganPool]
  1345. if itemLua then
  1346. self.sloganPool[#self.sloganPool] = nil
  1347. itemLua.gameObject:SetActive(true)
  1348. return itemLua
  1349. end
  1350. end
  1351. local newGo = UnityEngine.GameObject.Instantiate(self.otherSloganitem.gameObject)
  1352. newGo:SetActive(true)
  1353. local itemLua = {}
  1354. itemLua.gameObject = newGo
  1355. local trans = newGo.transform
  1356. itemLua.transform = trans
  1357. trans:SetParent(self.sloganGroup.transform)
  1358. trans.localScale = Vector3.one
  1359. trans.localRotation = Quaternion.identity
  1360. itemLua.sloganTxt = trans:Find('Bubble/Slogan'):GetComponent(Enum.TypeInfo.Text)
  1361. return itemLua
  1362. end
  1363. function UIHundredDojoView:ReleaseOtherSloganItemLua(sloganItemLua)
  1364. if not sloganItemLua then return end
  1365. sloganItemLua.gameObject:SetActive(false)
  1366. if not self.sloganPool then
  1367. self.sloganPool = {}
  1368. end
  1369. self.sloganPool[#self.sloganPool] = sloganItemLua
  1370. end
  1371. function UIHundredDojoView:DisposeOtherSloganItemLua(sloganItemLua)
  1372. if not sloganItemLua then return end
  1373. CommonUtil.DestroyGO(sloganItemLua.gameObject)
  1374. sloganItemLua.gameObject = nil
  1375. sloganItemLua.transform = nil
  1376. sloganItemLua.sloganTxt = nil
  1377. end
  1378. return UIHundredDojoView