UIActivityTurntableView.lua 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898
  1. local UIActivityTurntableView = require("UIActivity/UIActivityTurntableView_Generate")
  2. function UIActivityTurntableView:OnAwake(data)
  3. self.controller = require("UIActivity/UIActivityTurntableCtr"):new()
  4. self.controller:Init(self)
  5. self.controller:SetData(data)
  6. end
  7. function UIActivityTurntableView:AddEventListener()
  8. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
  9. end
  10. function UIActivityTurntableView:FillContent(data, uiBase)
  11. self.uiBase = uiBase
  12. local gameObject = self.uiBase:GetRoot()
  13. if gameObject ~= nil then
  14. self.gameObject = gameObject
  15. self.transform = gameObject.transform
  16. end
  17. self:InitGenerate(self.transform, data)
  18. self:Init()
  19. self:LoadBg()
  20. end
  21. function UIActivityTurntableView:LoadBg()
  22. --加载图片
  23. --local needleimg,titelimg = self.controller:GetActivityData():GetBgTitleImg(1)
  24. --LogError(self.needle.image.sprite.name)
  25. --目前只有一个暂时不开启加载
  26. -- CommonUtil.LoadIcon(self, bgimg, function (sprite)
  27. -- self.needle.image.sprite = sprite
  28. -- end)
  29. -- CommonUtil.LoadIcon(self, titelimg, function (sprite)
  30. -- self.titleImage.image.sprite = sprite
  31. -- end)
  32. end
  33. function UIActivityTurntableView:Init()
  34. self.controller:GetActivityData():OnResetState()
  35. local bIsStartstate = self.controller:GetActivityData():IsState("StartTurn")
  36. if bIsStartstate then
  37. local IsOver = self.controller:GetActivityData():IsReceiverOver() --是否全部领取
  38. if IsOver then --结束本轮
  39. self.controller:GetActivityData():SetState("FinishedTrun")
  40. end
  41. end
  42. --指针位置 指向最后一次关闭获取
  43. local RolTrans = self.needle:GetComponent(Enum.TypeInfo.RolRectTransform)
  44. if RolTrans then
  45. local Angle = self.controller:GetActivityData():GetLastWhellAngle()
  46. local nCount = self.controller:GetActivityData():GetReceivePrizeInfoCount()
  47. if nCount <= 0 or nCount >= 8 then
  48. Angle = 0
  49. end
  50. RolTrans:SetAngle(0,0,Angle)
  51. end
  52. self.RunTimes = 0
  53. self:StartTimer() --倒计时刷新
  54. self:Refresh()
  55. self:RefreshCostGoldIcon()
  56. end
  57. function UIActivityTurntableView:RemoveEventListener()
  58. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  59. end
  60. function UIActivityTurntableView:AddUIEventListener()
  61. self.uiBase:AddButtonEventListener(self.btnTurnOne.button, self, self.OnClickOnceRun)
  62. self.uiBase:AddButtonEventListener(self.btnTurnAll.button, self, self.OnClickAllRun)
  63. self.uiBase:AddButtonEventListener(self.btnClose.button, self, self.OnClickExit)
  64. self.uiBase:AddButtonEventListener(self.AnyBtn.button, self, self.OnClickExit)
  65. self.uiBase:AddButtonEventListener(self.scoreInfo.button, self, self.OnClickHelpBtn)
  66. self.uiBase:AddButtonEventListener(self.btnFinishTurn.button, self, self.OnEndTurn)
  67. self.uiBase:AddButtonEventListener(self.btnStartTurn.button, self, self.OnBeginTurn)
  68. self.uiBase:AddButtonEventListener(self.btnRefresh.button, self, self.OnRefreshTurn)
  69. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.TRUNWHELL_EVENT_LOG_ACK, self, self.OnLogPrizeInfoAck)
  70. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.TRUNWHELL_EVENT_LOG_NTF, self, self.OnAddPrizeInfoNTF)
  71. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.TRUNWHELL_EVENT_REFRESH_ACK, self, self.OnRefreshAck)
  72. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.TRUNWHELL_EVENT_OPEN_REWARD_ACK, self, self.OnOpenRewardAck)
  73. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.TRUNWHELL_EVENT_REWARD_ACK, self, self.OnRewardAck)
  74. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.TRUNWHELL_EVENT_CLOSE_REWARD, self, self.OnCloseRewardAck)
  75. --移动切换item
  76. local OnSelected = function (idx)
  77. self:OnTransSelectedItem(idx)
  78. end
  79. --结束转动
  80. local OnFinished = function (idx)
  81. self:OnTranSelectFinished(idx)
  82. end
  83. --滚动文字
  84. local OnChangeText = function (TextObj)
  85. self:ChangeLogText(TextObj)
  86. end
  87. --积分监听
  88. --ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.SEASON_OPEN_NTF, self, self.RefreshTime)
  89. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.DIAMOND_CHANGED, self, self.RefreshGold)
  90. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.ROCOIN_CHANGED, self, self.RefreshGold)
  91. local RolTrans = self.needle:GetComponent(Enum.TypeInfo.RolRectTransform)
  92. if nil ~= RolTrans then
  93. RolTrans.mSelectAction = OnSelected
  94. RolTrans.mFinishAction = OnFinished
  95. end
  96. self.NextTextIndex = 0
  97. local TextAuto = self.viewport:GetComponent(Enum.TypeInfo.UiLoopAutoMove)
  98. if nil ~= TextAuto then
  99. TextAuto:SetChangeInfoCb(OnChangeText)
  100. end
  101. end
  102. function UIActivityTurntableView:OnHide()
  103. end
  104. function UIActivityTurntableView:OnShow(data)
  105. self.controller:SetData(data)
  106. end
  107. function UIActivityTurntableView:OnClose()
  108. self:StopTurn()
  109. self:RemoveTimer()
  110. self:ClearLeftTimeTimer()
  111. end
  112. function UIActivityTurntableView:OnDispose()
  113. self.controller:OnDispose()
  114. end
  115. -------------------------------------sever
  116. --请求刷新转盘道具
  117. function UIActivityTurntableView:SendRefreshREQ()
  118. local actId = self.controller:GetActivityData():GetActiveId()
  119. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ACTIVITY_WHEEL_REFRESH_REQ,{activity_id = actId})
  120. end
  121. --收到刷新道具
  122. function UIActivityTurntableView:OnRefreshAck(data)
  123. --LogError("OnRefreshAck" .. Inspect(data))
  124. if data.error ~= Enum.NetErrorCode.ERROR_OK then
  125. self:PopErrorTips('397')
  126. return
  127. end
  128. --收起动画
  129. self:PlayAniRun(self.trunAnim.animator,Enum.TrunWheelAniName.TrunRefresh1)
  130. self:OnUnSelectedItem()
  131. self:OnUnPrizeitem()
  132. --结束动画
  133. self:Refresh()
  134. self:RemoveTimer()
  135. self.WaitTimerId = ManagerContainer.LuaTimerMgr:AddTimer(200, 1, self, self.OnRefreshAni, nil)
  136. end
  137. --请求开启本轮
  138. function UIActivityTurntableView:SendOpenRewardREQ()
  139. local actId = self.controller:GetActivityData():GetActiveId()
  140. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ACTIVITY_WHEEL_OPEN_REWARD_REQ,{activity_id = actId})
  141. end
  142. --收到本轮开始
  143. function UIActivityTurntableView:OnOpenRewardAck(data)
  144. if data.error ~= Enum.NetErrorCode.ERROR_OK then
  145. self:PopErrorTips('397')
  146. return
  147. end
  148. self.controller:GetActivityData():SetState("StartTurn")
  149. self:PlayAniRun(self.trunAnim.animator,Enum.TrunWheelAniName.TrunStart)
  150. self:RefreshBtn()
  151. self:OnUnPrizeitem()
  152. self:RefreshCostGoldIcon()
  153. end
  154. --请求转动 1 all(获取奖励)
  155. function UIActivityTurntableView:SendRewardREQ(Isall)
  156. --reward_all false 1次 true 获取所有
  157. local actId = self.controller:GetActivityData():GetActiveId()
  158. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ACTIVITY_WHEEL_REWARD_REQ,{activity_id = actId,reward_all = Isall})
  159. end
  160. --收到奖励
  161. function UIActivityTurntableView:OnRewardAck(data)
  162. --LogError("OnRewardAck"..Inspect(data))
  163. if data.error ~= Enum.NetErrorCode.ERROR_OK then
  164. --self:PopErrorTips('397')
  165. return
  166. end
  167. self.RunTimes = #data.reward_list
  168. if self.RunTimes > 0 then
  169. local item = data.reward_list[1]
  170. if item then
  171. local nSelectindex = self.controller:GetActivityData():FindItemIdx(item.item_idx)
  172. self.controller:GetActivityData():SetStopItem(nSelectindex -1)
  173. end
  174. if self.RunTimes > 1 then
  175. local nSelectindex = self.controller:GetActivityData():GetBigPreizeNextIdx()
  176. self.controller:GetActivityData():SetStopItem(nSelectindex -1)
  177. end
  178. self.Truning = true
  179. self:RunTurn(self.RunTimes)
  180. end
  181. end
  182. --请求关闭本轮转盘
  183. function UIActivityTurntableView:SendCloseRewardREQ()
  184. self:OnUnReceiveItem()
  185. local actId = self.controller:GetActivityData():GetActiveId()
  186. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ACTIVITY_WHEEL_CLOSE_REWARD_REQ,{activity_id = actId})
  187. end
  188. --收到关闭本轮
  189. function UIActivityTurntableView:OnCloseRewardAck(data)
  190. if data.error ~= Enum.NetErrorCode.ERROR_OK then
  191. self:PopErrorTips('397')
  192. return
  193. end
  194. self:PlayAniRun(self.trunAnim.animator,Enum.TrunWheelAniName.TrunRefresh1)
  195. self:OnUnSelectedItem()
  196. self:OnUnPrizeitem()
  197. self.controller:GetActivityData():SetState("ReadyTurn")
  198. self:Refresh()
  199. self:RemoveTimer()
  200. self.WaitTimerId = ManagerContainer.LuaTimerMgr:AddTimer(200, 1, self, self.OnRefreshAni, nil)
  201. end
  202. ---------------------------------------------------------------------
  203. --添加文字
  204. function UIActivityTurntableView:ChangeLogText(TextObj)
  205. self.NextTextIndex = self.NextTextIndex + 1
  206. local strInfo = self.controller:GetActivityData():GetLogData(self.NextTextIndex)
  207. TextObj.text = strInfo
  208. end
  209. --转动到ITEM
  210. function UIActivityTurntableView:OnTransSelectedItem(idx)
  211. local bIsFinishedstate = self.controller:GetActivityData():IsState("RunOnceTrun")
  212. local bIsAllFinishedstate = self.controller:GetActivityData():IsState("RunAllTrun")
  213. if bIsFinishedstate or bIsAllFinishedstate then
  214. self:OnUnSelectedItem()
  215. self:OnSelectedItem(idx+1)
  216. end
  217. end
  218. --转动结束
  219. function UIActivityTurntableView:OnTranSelectFinished(idx)
  220. local bIsFinishedstate = self.controller:GetActivityData():IsState("RunOnceTrun")
  221. local bIsAllFinishedstate = self.controller:GetActivityData():IsState("RunAllTrun")
  222. if bIsFinishedstate or bIsAllFinishedstate then
  223. self.controller:GetActivityData():ReceivePrizeInfo(idx+1) --标记已领取
  224. if not self:IsNil(self:GetPosItem(idx+1)) then
  225. self:PlayAniRun(self:GetPosItem(idx+1).iconLight.animator,"IconLightShow")
  226. end
  227. end
  228. if bIsAllFinishedstate then --全部获取
  229. self.RunTimes = self.RunTimes - 1
  230. if self.RunTimes < 1 then --全部显示完毕
  231. self.Truning = false
  232. self:RemoveTimer()
  233. self.FinshedTrunTimeId = ManagerContainer.LuaTimerMgr:AddTimer(600, 1, self, self.FinshedAllTrun, nil)
  234. else
  235. --继续旋转下一个
  236. local nStopIndex = self.controller:GetActivityData():GetAutoNextStopItem()
  237. self.controller:GetActivityData():SetStopItem(nStopIndex -1)
  238. self:RunTurn(8)
  239. end
  240. elseif bIsFinishedstate then--单次获取获取
  241. self.Truning = false
  242. self:RemoveTimer()
  243. self.FinshedTrunTimeId = ManagerContainer.LuaTimerMgr:AddTimer(600, 1, self, self.FinshedOnceTrun, {Index = idx})
  244. end
  245. end
  246. --完成8连抽
  247. function UIActivityTurntableView:FinshedAllTrun()
  248. self:OnUnPrizeitem() --关闭高光
  249. self:SetReceivedItem(true) --全部领取设置
  250. self:PoAllpGet()
  251. self:OnUnSelectedItem()
  252. self.controller:GetActivityData():SetState("FinishedTrun")
  253. self:RefreshBtn() --刷新按钮
  254. self:RemoveTimer()
  255. end
  256. --完成1抽
  257. function UIActivityTurntableView:FinshedOnceTrun(Timeid,params)
  258. local idx = params.Index
  259. self:OnUnPrizeitem() --关闭高光
  260. self:OnReceiveItem(idx+1,true)
  261. if not self:IsNil(self:GetPosItem(idx+1)) then
  262. self:GetPosItem(idx+1).needleLight:SetActive(false) --转动指针关闭
  263. end
  264. --1.5秒后关闭 显示道具
  265. self:PopGet(idx+1)--UIPOPGot 弹窗获取到
  266. local IsOver = self.controller:GetActivityData():IsReceiverOver() --是否全部领取
  267. if IsOver then --结束本轮
  268. self.controller:GetActivityData():SetState("FinishedTrun")
  269. else
  270. self.controller:GetActivityData():SetState("StartTurn")
  271. end
  272. self:OnUnSelectedItem()
  273. self:RefreshBtn() --刷新按钮
  274. self:RemoveTimer()
  275. self:RefreshCostGoldIcon()
  276. end
  277. function UIActivityTurntableView:RemoveTimer()
  278. if self.FinshedTrunTimeId ~= nil then
  279. ManagerContainer.LuaTimerMgr:RemoveTimer(self.FinshedTrunTimeId);
  280. self.FinshedTrunTimeId = nil
  281. end
  282. if self.WaitTimerId ~= nil then
  283. ManagerContainer.LuaTimerMgr:RemoveTimer(self.WaitTimerId);
  284. self.WaitTimerId = nil
  285. end
  286. end
  287. --展示获得道具
  288. function UIActivityTurntableView:PopGet(idx)
  289. local _rewards = {}
  290. local Item = self.controller:GetActivityData():GetData(idx)
  291. if Item then
  292. table.insert(_rewards,
  293. {
  294. cfgId = Item.nItemId,
  295. num = Item.nItemNum,
  296. })
  297. end
  298. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPOPGot, {rewards = _rewards})
  299. end
  300. --展示全部道具
  301. function UIActivityTurntableView:PoAllpGet()
  302. local _rewards = {}
  303. for i=1,8 do
  304. local Item = self.controller:GetActivityData():GetData(i)
  305. if Item then
  306. table.insert(_rewards,
  307. {
  308. cfgId = Item.nItemId,
  309. num = Item.nItemNum,
  310. })
  311. end
  312. end
  313. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPOPGot, {rewards = _rewards})
  314. end
  315. --Error弹窗
  316. function UIActivityTurntableView:PopErrorTips(Key)
  317. if not ManagerContainer.LuaUIMgr:GetPage(Enum.UIPageName.UIErrorTips) then
  318. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIErrorTips, {errorId=Key}, nil, nil, nil, Enum.UISibling[Enum.UIType.Top + 1] + 11)
  319. else
  320. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ERROR_DESC_DISPLAY, {errorId=Key})
  321. end
  322. end
  323. --设置奖项
  324. function UIActivityTurntableView:SetItem(idx,ItemInfo)
  325. local Item = self:GetPosItem(idx)
  326. if Item then
  327. CommonUtil.SetRewardItemData(self,ItemInfo.nItemId,Item.iconItem,ItemInfo.nItemNum, self.OnClickItem)
  328. self:SetGrandPrizeItem(idx,ItemInfo.bIsGrandPrize)
  329. self:OnReceiveItem(idx,ItemInfo.hasReceive)
  330. end
  331. end
  332. --全部领取ITEM
  333. function UIActivityTurntableView:SetReceivedItem(IsShow)
  334. for i=1,8 do
  335. if not self:IsNil(self:GetPosItem(i)) then
  336. self:GetPosItem(i).received:SetActive(IsShow)
  337. self:GetPosItem(i).available:SetActive(not IsShow)
  338. end
  339. end
  340. end
  341. --设置tips
  342. function UIActivityTurntableView:OnClickItem(btn,params)
  343. local logicData = params[0]
  344. ManagerContainer.LuaUIMgr:OpenTips(logicData)
  345. end
  346. function UIActivityTurntableView:StopTurn()
  347. local RolTrans = self.needle:GetComponent(Enum.TypeInfo.RolRectTransform)
  348. if RolTrans then
  349. RolTrans:Stop()
  350. end
  351. end
  352. --退出
  353. function UIActivityTurntableView:OnClickExit()
  354. self:UIClose()
  355. end
  356. --刷新奖励
  357. function UIActivityTurntableView:OnRefreshTurn()
  358. local IsOver = self.controller:GetActivityData():IsActivityOver()
  359. if IsOver then
  360. self:PopErrorTips('LabelOver')
  361. return
  362. end
  363. --是否金币足够刷新
  364. local bIsCanRefresh = self.controller:GetActivityData():IsRefreshCostGold()
  365. if bIsCanRefresh then
  366. --请求新数据
  367. self:SendRefreshREQ()
  368. else
  369. self:PopErrorTips('SeasonLackRocin') --SeasonLackRocin SeasonLackGold
  370. end
  371. end
  372. function UIActivityTurntableView:OnRefreshAni()
  373. self:PlayAniRun(self.trunAnim.animator,Enum.TrunWheelAniName.TrunRefresh2)
  374. if self.WaitTimerId ~= nil then
  375. ManagerContainer.LuaTimerMgr:RemoveTimer(self.WaitTimerId);
  376. self.WaitTimerId = nil
  377. end
  378. local RolTrans = self.needle:GetComponent(Enum.TypeInfo.RolRectTransform)
  379. if RolTrans then
  380. local Angle = self.controller:GetActivityData():GetLastWhellAngle()
  381. RolTrans:SetAngle(0,0,0)
  382. self.controller:GetActivityData():SetStopItem(0)
  383. self:RunTurn(0)
  384. end
  385. end
  386. --开始本轮
  387. function UIActivityTurntableView:OnBeginTurn()
  388. local IsOver = self.controller:GetActivityData():IsActivityOver()
  389. if IsOver then
  390. self:PopErrorTips('LabelOver')
  391. return
  392. end
  393. self:SendOpenRewardREQ()
  394. end
  395. --结束本轮
  396. function UIActivityTurntableView:OnEndTurn()
  397. local IsOver = self.controller:GetActivityData():IsActivityOver()
  398. if IsOver then
  399. self:PopErrorTips('LabelOver')
  400. return
  401. end
  402. local SureEvent = function ()
  403. self:SendCloseRewardREQ()
  404. end
  405. --二次确认
  406. local data = {"TurningCanOver", nil, nil, self, SureEvent}
  407. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UINoticeTips, data)
  408. end
  409. function UIActivityTurntableView:StartTimer()
  410. self:UpdateLeftTime()
  411. self:ClearLeftTimeTimer()
  412. self.updateLeftTimeTimer = ManagerContainer.LuaTimerMgr:AddTimer(3000, -1,self,self.UpdateLeftTime,nil);
  413. end
  414. function UIActivityTurntableView:ClearLeftTimeTimer()
  415. if self.updateLeftTimeTimer~= nil then
  416. ManagerContainer.LuaTimerMgr:RemoveTimer(self.updateLeftTimeTimer)
  417. self.updateLeftTimeTimer = nil
  418. end
  419. end
  420. function UIActivityTurntableView:UpdateLeftTime()
  421. local activityItem = self.controller:GetActivityData():GetActiveItem()
  422. if activityItem then
  423. self:RefreshTime(activityItem:LeftTime())
  424. if activityItem:LeftTime() <= 0 then
  425. self:ClearLeftTimeTimer()
  426. end
  427. end
  428. end
  429. function UIActivityTurntableView:RefreshTime(leftTime)
  430. local day,hour,minute,second = ConvertTimeForm(leftTime)
  431. local timeStr = ""
  432. if day > 0 then
  433. timeStr = day .. "天"..hour .. "时" .. minute .. "分"
  434. else
  435. if hour > 0 then
  436. timeStr = hour .. "时" .. minute .. "分"
  437. else
  438. if minute == 0 then
  439. minute = 1
  440. end
  441. timeStr = minute .. "分"
  442. end
  443. end
  444. self.TimeTxt.text.text = timeStr
  445. end
  446. --点击帮助
  447. function UIActivityTurntableView:OnClickHelpBtn()
  448. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIPlayRule, {'PlayExplainTitle', "ActivityRoulettelTips"})
  449. end
  450. --转八次
  451. function UIActivityTurntableView:OnClickAllRun()
  452. local IsOver = self.controller:GetActivityData():IsActivityOver()
  453. if IsOver then
  454. self:PopErrorTips('LabelOver')
  455. return
  456. end
  457. --是否可以转8次 判断
  458. local costAllInfo = self.controller:GetActivityData():CalNeedAllGold() --多次消耗
  459. local Goldcount = CommonUtil.GetOwnResCountByItemId(Enum.ItemType.ROCoin)--当前金币Diamond
  460. local IsCanRun = true
  461. if costAllInfo.CosGoldmNum >0 then --显示金币
  462. if Goldcount <= costAllInfo.CosGoldmNum then
  463. IsCanRun = false
  464. end
  465. end
  466. if IsCanRun then
  467. self.controller:GetActivityData():SetState("RunAllTrun")
  468. self:Refresh()
  469. self:SendRewardREQ(true)
  470. else
  471. self:PopErrorTips('SeasonLackRocin') --SeasonLackRocin SeasonLackGold
  472. end
  473. end
  474. --转一次
  475. function UIActivityTurntableView:OnClickOnceRun()
  476. local IsOver = self.controller:GetActivityData():IsActivityOver()
  477. if IsOver then
  478. self:PopErrorTips('LabelOver')
  479. return
  480. end
  481. --是否可以转1次 判断
  482. local costInfo = self.controller:GetActivityData():CalNeedGold() --单次消耗
  483. local Goldcount = CommonUtil.GetOwnResCountByItemId(Enum.ItemType.ROCoin) --当前金币
  484. local IsCanRun = true
  485. LogError( costInfo.CosGoldmNum.."====ro =========="..Goldcount)
  486. if costInfo.CostItemNum <= 0 then
  487. if Goldcount < costInfo.CosGoldmNum or Goldcount == 0 then--金币是否够消耗
  488. IsCanRun = false
  489. end
  490. elseif costInfo.CosGoldmNum > 0 and costInfo.CostItemNum >0 then
  491. if IsCanRun then
  492. --需要补额外金币弹框
  493. local NeedItem = self.controller:GetActivityData():GoldToItem(costInfo.CosGoldmNum)
  494. local paramData = {}
  495. paramData[1] = self.controller:GetActivityData():GetCostItemName() --ItemTypeDes_54 GoldCoin
  496. paramData[2] = string.formatbykey('Supplementary', tostring(costInfo.CosGoldmNum), I18N.T("ItemTypeDes_54") ,tostring(NeedItem),paramData[1])
  497. local data = {"CantUseGold", paramData, nil, self, self.SureOpenTipsWnd}
  498. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UINoticeTips, data)
  499. IsCanRun = false
  500. return
  501. end
  502. end
  503. if IsCanRun then
  504. self.controller:GetActivityData():SetState("RunOnceTrun")
  505. self:Refresh()
  506. self:SendRewardREQ(false)
  507. else
  508. self:PopErrorTips('SeasonLackRocin')--SeasonLackRocin SeasonLackGold
  509. end
  510. end
  511. --提示 道具不足金币转换确定
  512. function UIActivityTurntableView:SureOpenTipsWnd()
  513. local costInfo = self.controller:GetActivityData():CalNeedGold() --单次消耗
  514. local Goldcount = CommonUtil.GetOwnResCountByItemId(Enum.ItemType.ROCoin) --当前金币
  515. local IsCanRun = true
  516. if Goldcount < costInfo.CosGoldmNum and Goldcount ~= 0 then--金币是否够消耗
  517. IsCanRun = false
  518. end
  519. if IsCanRun then
  520. self.controller:GetActivityData():SetState("RunOnceTrun")
  521. self:Refresh()
  522. self:SendRewardREQ(false)
  523. else
  524. self:PopErrorTips('SeasonLackRocin')
  525. end
  526. end
  527. function UIActivityTurntableView:RunTurn(Count)
  528. if self:IsNil(self.needle) then
  529. return
  530. end
  531. local RolTrans = self.needle:GetComponent(Enum.TypeInfo.RolRectTransform)
  532. if nil ~= RolTrans then
  533. self:StopTurn()
  534. local nNextStopIndex = self.controller:GetActivityData():GetNextStopItem()
  535. if nNextStopIndex then
  536. RolTrans:SetStopIndex(nNextStopIndex)
  537. else
  538. RolTrans:SetStopIndex(0)
  539. end
  540. RolTrans:ClearNewRangeSpeed()
  541. if Count == 1 then--转一次设置
  542. RolTrans:AddNewRangeSpeed(0, 500,0, 1)
  543. RolTrans:AddNewRangeSpeed(500, 2400, 1, 2)
  544. RolTrans:AddNewRangeSpeed(2400, 500,2, 3)
  545. RolTrans:AddNewRangeSpeed(500, 0,3, 4)
  546. self:RefreshBtn()
  547. --停止选中奖项特效
  548. self:OnUnPrizeitem()
  549. elseif Count > 1 then--转八次设置
  550. local Speed = 1.8
  551. RolTrans:AddNewRangeSpeed(0, 2400*Speed, 0, 0.3 * 1/Speed)
  552. RolTrans:AddNewRangeSpeed(2400*Speed, 600*Speed, 0.3* 1/Speed, 0.8*1/Speed)
  553. RolTrans:AddNewRangeSpeed(600*Speed, 0, 0.8*1/Speed, 1.0*1/Speed)
  554. elseif Count == 0 then
  555. --空转一圈
  556. local fSpped = 1.3
  557. RolTrans:AddNewRangeSpeed(360 * fSpped, 360 * fSpped,0, 1/fSpped)
  558. end
  559. RolTrans:Run(Count)
  560. end
  561. end
  562. --刷新奖品
  563. function UIActivityTurntableView:Refresh()
  564. for i = 1,8 do
  565. local ItemInfo = self.controller:GetActivityData():GetData(i)
  566. if ItemInfo then
  567. self:SetItem(i,ItemInfo)
  568. end
  569. end
  570. self:OnUnSelectedItem()
  571. self:OnUnPrizeitem()
  572. self:RefreshBtn()
  573. self:RefreshGold()
  574. end
  575. --刷新金币(金币改变时 注册通知)
  576. function UIActivityTurntableView:RefreshGold()
  577. local CostItemId = self.controller:GetActivityData():GetCostItemId()
  578. local count = CommonUtil.GetOwnResCountByItemId(CostItemId)
  579. self.currency1.number.text.text = count > 0 and count or "0"
  580. count = CommonUtil.GetOwnResCountByItemId(Enum.ItemType.Diamond)
  581. self.currency2:SetActive(false)
  582. self.currency2.number.text.text = CommonUtil.FormatNumber(count)
  583. count = CommonUtil.GetOwnResCountByItemId(Enum.ItemType.ROCoin)
  584. self.currency3.number.text.text = CommonUtil.FormatNumber(count)
  585. end
  586. function UIActivityTurntableView:ShowOnceGoldItem(Once,IsGold)
  587. if Once then
  588. self.btnTurnOne.content.imageGold:SetActive(IsGold)
  589. self.btnTurnOne.content.imageItem:SetActive(not IsGold)
  590. else
  591. self.btnTurnAll.content.imageGold:SetActive(IsGold)
  592. self.btnTurnAll.content.imageItem:SetActive(not IsGold)
  593. end
  594. end
  595. --设置金币格式
  596. function UIActivityTurntableView:RefreshCostGoldIcon()
  597. local costInfo = self.controller:GetActivityData():CalNeedGold() --单次消耗
  598. local costAllInfo = self.controller:GetActivityData():CalNeedAllGold() --多次消耗
  599. if costInfo.CostItemNum == 0 then--单次道具0
  600. local costGold = self.controller:GetActivityData():GetUseGoldTrun(true)
  601. self.btnTurnOne.num.text.text = tostring(costGold)
  602. self:ShowOnceGoldItem(true,true)
  603. else
  604. local costItem = self.controller:GetActivityData():GetUseItemTrun(true)
  605. self.btnTurnOne.num.text.text = tostring(costItem)
  606. self:ShowOnceGoldItem(true,false)
  607. end
  608. if costAllInfo.CostItemNum >0 then --显示道具
  609. local costItem = self.controller:GetActivityData():GetUseItemTrun(false)
  610. self.btnTurnAll.num.text.text = tostring(costItem)
  611. self:ShowOnceGoldItem(false,false)
  612. end
  613. if costAllInfo.CosGoldmNum >0 then --显示金币
  614. local costGold = self.controller:GetActivityData():GetUseGoldTrun(false)
  615. self.btnTurnAll.num.text.text = tostring(costGold)
  616. self:ShowOnceGoldItem(false,true)
  617. end
  618. end
  619. --设置刷新次数
  620. function UIActivityTurntableView:RefreshCountBtn()
  621. local CostRefreshGold = self.controller:GetActivityData():GetRefreshCostGold()
  622. if nil == CostRefreshGold then
  623. self.btnRefresh.num.text.text = "-/-"
  624. elseif CostRefreshGold == 0 then
  625. self.btnRefresh.num.text.text = I18N.T("Free")
  626. else
  627. self.btnRefresh.num.text.text = tostring(CostRefreshGold)
  628. end
  629. end
  630. --刷新按钮
  631. function UIActivityTurntableView:RefreshBtn()
  632. self:HideAllBtn()
  633. self:RefreshCountBtn()
  634. --self:RefreshCostGoldIcon()
  635. self:RefreshGold()
  636. local bIsRedaystate = self.controller:GetActivityData():IsState("ReadyTurn")
  637. if bIsRedaystate then
  638. self.btnStartTurn:SetActive(true)
  639. local nCount = self.controller:GetActivityData():GetOverRefreshCount()
  640. self.refreshBox:SetActive(true)
  641. self.btnRefresh:SetActive(true)
  642. self.refreshBox.text.text.text = I18N.SetLanguageValue("RestRefreshTimes",tostring(nCount))
  643. if nCount > 0 then
  644. self.btnRefresh.button.interactable = true
  645. else
  646. self.btnRefresh.button.interactable = false
  647. end
  648. end
  649. local bIsStartstate = self.controller:GetActivityData():IsState("StartTurn")
  650. if bIsStartstate then
  651. self.btnTurnOne:SetActive(true)
  652. local IsOver =self.controller:GetActivityData():IsReceiverOver()
  653. if IsOver or self.Truning then
  654. self.btnTurnOne.button.interactable = false
  655. else
  656. self.btnTurnOne.button.interactable = true
  657. end
  658. --次数是否够
  659. local nCount = self.controller:GetActivityData():GetReceivePrizeInfoCount()
  660. if nCount and nCount < 1 then
  661. self.btnTurnAll:SetActive(true)
  662. if self.Truning then
  663. self.btnTurnAll.button.interactable = false
  664. else
  665. self.btnTurnAll.button.interactable = true
  666. end
  667. else
  668. self.btnFinishTurn:SetActive(true)
  669. local nOverCount = self.controller:GetActivityData():GetOverTrunCount()
  670. if nOverCount > 0 then
  671. self.finishBox:SetActive(true)
  672. self.finishBox.text.text.text =I18N.SetLanguageValue("NTimesFinishTurn",tostring(nOverCount))
  673. end
  674. if self.Truning or nOverCount > 0 then
  675. self.btnFinishTurn.button.interactable = false
  676. else
  677. self.btnFinishTurn.button.interactable = true
  678. end
  679. end
  680. end
  681. local bIsFinishedstate = self.controller:GetActivityData():IsState("FinishedTrun")
  682. if bIsFinishedstate then
  683. self.btnFinishTurn:SetActive(true)
  684. if self.Truning then
  685. self.btnFinishTurn.button.interactable = false
  686. else
  687. self.btnFinishTurn.button.interactable = true
  688. end
  689. end
  690. local bIsRunstate = self.controller:GetActivityData():IsState("RunOnceTrun")
  691. if bIsRunstate then
  692. self.btnTurnOne:SetActive(true) --置灰
  693. self.btnTurnOne.button.interactable = false;
  694. self.btnFinishTurn:SetActive(true) --置灰
  695. self.btnFinishTurn.button.interactable = false;
  696. end
  697. local bIsRunstate = self.controller:GetActivityData():IsState("RunAllTrun")
  698. if bIsRunstate then
  699. self.btnFinishTurn:SetActive(true) --置灰
  700. self.btnFinishTurn.button.interactable = false;
  701. end
  702. end
  703. --隐藏所有按钮
  704. function UIActivityTurntableView:HideAllBtn()
  705. self.btnTurnOne:SetActive(false)
  706. self.btnTurnAll:SetActive(false)
  707. self.btnFinishTurn:SetActive(false)
  708. self.btnStartTurn:SetActive(false)
  709. self.btnRefresh:SetActive(false)
  710. self.refreshBox:SetActive(false)
  711. self.finishBox:SetActive(false)
  712. end
  713. --隐藏所有选中
  714. function UIActivityTurntableView:OnUnSelectedItem()
  715. for i= 1,8 do
  716. if not self:IsNil(self:GetPosItem(i)) then
  717. self:GetPosItem(i).needleLight:SetActive(false)
  718. end
  719. end
  720. end
  721. --选中道具
  722. function UIActivityTurntableView:OnSelectedItem(nIndex)
  723. if not self:IsNil(self:GetPosItem(nIndex)) then
  724. self:GetPosItem(nIndex).needleLight:SetActive(true)
  725. end
  726. end
  727. --设置大奖
  728. function UIActivityTurntableView:SetGrandPrizeItem(nIndex,bIsGrandPrize)
  729. if not self:IsNil(self:GetPosItem(nIndex)) then
  730. self:GetPosItem(nIndex).bonusBg:SetActive(bIsGrandPrize) --大奖底板
  731. self:GetPosItem(nIndex).bonusLabel:SetActive(bIsGrandPrize) --大奖条
  732. end
  733. end
  734. --隐藏所有领取
  735. function UIActivityTurntableView:OnUnReceiveItem()
  736. for i= 1,8 do
  737. if not self:IsNil(self:GetPosItem(i)) then
  738. self:GetPosItem(i).received:SetActive(false)
  739. end
  740. end
  741. end
  742. --显示获得领取
  743. function UIActivityTurntableView:OnReceiveItem(nIndex,IsShow)
  744. if not self:IsNil(self:GetPosItem(nIndex)) then
  745. self:GetPosItem(nIndex).received:SetActive(IsShow)
  746. self:GetPosItem(nIndex).available:SetActive(not IsShow)
  747. end
  748. end
  749. --关闭大奖特效
  750. function UIActivityTurntableView:OnUnPrizeitem()
  751. for i=1,8 do
  752. if not self:IsNil(self:GetPosItem(i)) then
  753. self:PlayAniRun(self:GetPosItem(i).iconLight.animator,"IconLightHide")
  754. end
  755. end
  756. end
  757. --设置icon
  758. function UIActivityTurntableView:SetIcon(nIndex,strIcon)
  759. --self:GetPosItem(nIndex).iconItem.icon.image.sprite = nil
  760. CommonUtil.LoadIcon(self, strIcon, function (sprite)
  761. if not self:IsNil(self:GetPosItem(nIndex)) then
  762. self:GetPosItem(nIndex).iconItem.icon.image.sprite = sprite
  763. end
  764. end,self:GetPosItem(nIndex).iconItem, 'IconIcon')
  765. end
  766. --设置数量
  767. function UIActivityTurntableView:SetNum(nIndex,nItemNum)
  768. if not self:IsNil(self:GetPosItem(nIndex)) then
  769. self:GetPosItem(nIndex).iconItem.num.text.text = tostring(nItemNum)
  770. end
  771. end
  772. --getPos
  773. function UIActivityTurntableView:GetPosItem(nIndex)
  774. if 1 == nIndex then
  775. return self.pos1
  776. elseif 2 == nIndex then
  777. return self.pos2
  778. elseif 3 == nIndex then
  779. return self.pos3
  780. elseif 4 == nIndex then
  781. return self.pos4
  782. elseif 5 == nIndex then
  783. return self.pos5
  784. elseif 6 == nIndex then
  785. return self.pos6
  786. elseif 7 == nIndex then
  787. return self.pos7
  788. elseif 8 == nIndex then
  789. return self.pos8
  790. end
  791. return nil
  792. end
  793. function UIActivityTurntableView:PlayAniRun(Animator,AniName)
  794. if Animator then
  795. Animator:Play(AniName)
  796. end
  797. end
  798. function UIActivityTurntableView:IsNil(obj)
  799. if nil ~= obj then
  800. return false
  801. end
  802. return true
  803. end
  804. return UIActivityTurntableView