源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

366 line
10 KiB

  1. FuliLimitPackageView = FuliLimitPackageView or BaseClass(BaseView)
  2. local FuliLimitPackageView= FuliLimitPackageView
  3. function FuliLimitPackageView:__init()
  4. self.base_file = "fuli"
  5. self.layout_file = "FuliLimitPackageView"
  6. self.layer_name = "Top"
  7. self.use_background = true
  8. self.click_bg_toClose = false
  9. self.change_scene_close = true
  10. self.destroy_imm = true
  11. self.is_set_zdepth = true
  12. self.limit_num = false
  13. self.model = FuliModel:getInstance()
  14. self.mainVo = RoleManager.Instance.mainRoleInfo
  15. self.reward_item_list = {}
  16. self.num_item_list = {}
  17. self.item_list = {}
  18. self.list_item_animation = false
  19. self.open_callback = function()
  20. self:InitData()
  21. end
  22. self.load_callback = function()
  23. self:LoadSuccess()
  24. self:InitEvent()
  25. self.model:Fire(FuliConst.REQ_FULI_SCMD, 16011)
  26. end
  27. self.close_callback = function ()
  28. end
  29. self.destroy_callback = function()
  30. self:Remove()
  31. end
  32. self.ReOpen_callback = function ()
  33. end
  34. end
  35. function FuliLimitPackageView:Open()
  36. BaseView.Open(self)
  37. GlobalEventSystem:Fire(SceneEventType.CLOSE_DIALOGUE_VIEW)
  38. GlobalEventSystem:Fire(EventName.STOP_AUTO_DO_TASK)
  39. GlobalEventSystem:Fire(EventName.STOPAUTOFIGHT)
  40. end
  41. function FuliLimitPackageView:Remove()
  42. for i,item in pairs(self.reward_item_list) do
  43. item:ReleaseObj()
  44. end
  45. self.reward_item_list = {}
  46. for i,item in pairs(self.item_list) do
  47. item:DeleteMe()
  48. end
  49. self.item_list = {}
  50. for i,item in pairs(self.num_item_list) do
  51. item:DeleteMe()
  52. end
  53. self.num_item_list = {}
  54. if self.is_do_action then
  55. MainUIController.Instance.MainRoleHeadInfoView:SetLimitPackageBtnVisible(true)
  56. end
  57. if self.tween_id then
  58. TweenLite.Stop(self.tween_id)
  59. self.tween_id = nil
  60. end
  61. --完成引导
  62. local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_LIMIT_PACKAGE,2)
  63. if helpVo then
  64. GlobalEventSystem:Fire(EventName.FINISH_CURRENT_HELP_STEP,helpVo)
  65. GlobalEventSystem:Fire(EventName.FORCE_TO_DO_TASK)
  66. GlobalEventSystem:Fire(EventName.START_AUTO_DO_TASK)
  67. end
  68. if self.timer_countdown then
  69. TimerQuest.CancelQuest(GlobalTimerQuest, self.timer_countdown)
  70. self.timer_countdown = nil
  71. end
  72. self:StopAnimationList()
  73. end
  74. function FuliLimitPackageView:LoadSuccess()
  75. local nodes = {
  76. "center/title_text:txt",
  77. "center/close:obj",
  78. "center/bg1:raw",
  79. "center/count_text:txt",
  80. "center/bg:raw",
  81. "center/bg2:raw",
  82. "center/continue:obj:img",
  83. "center/reward_scroll",
  84. "center/reward_scroll/Viewport/reward_con",
  85. "center/icon:img:obj",
  86. "center/item_scroll/Viewport/item_con",
  87. "center/item_scroll",
  88. "icon_cont:obj",
  89. "center/time_text:txt",
  90. "center:obj",
  91. "center/num_ani_con",
  92. }
  93. self:GetChildren(nodes)
  94. lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("fuli_limit_package_bg1_1102_605"),false)
  95. lua_resM:setOutsideRawImage(self, self.bg1_raw, GameResPath.GetFuliImage("fuli_limit_package_text_1"),false)
  96. lua_resM:setOutsideRawImage(self, self.bg2_raw, GameResPath.GetFuliImage("fuli_limit_package_text_2"),false)
  97. self:InitEvent()
  98. end
  99. function FuliLimitPackageView:InitEvent()
  100. local function onBtnClickHandler(target)
  101. if target == self.close_obj then
  102. self:Continue()
  103. elseif target == self.continue_obj then
  104. self:Continue()
  105. end
  106. end
  107. AddClickEvent(self.close_obj,onBtnClickHandler)
  108. AddClickEvent(self.continue_obj,onBtnClickHandler)
  109. local function on_fuli_limit_update()
  110. self:UpdateInfo()
  111. end
  112. self:BindEvent(FuliModel:getInstance(), FuliConst.FULI_LIMIT_INFO_UPDATE, on_fuli_limit_update)
  113. end
  114. function FuliLimitPackageView:InitData()
  115. self.cfg = DeepCopy(self.model:GetFuliLevelCFG(self.mainVo.career))
  116. if not self.cfg or not self.cfg[1] then
  117. return
  118. end
  119. local b = TaskModel:getInstance():IsTaskFinished(FuliConst.LIMIT_PACKAGE_TASK.CLOSE_TASK_ID)
  120. lua_resM:setImageSprite(self, self.continue_img,"fuli_asset",b and "fuli_item34" or "fuli_item29")
  121. self.limit_num = self.cfg[1].limit_num
  122. self.title_text_txt.text = string.format("%s ", HtmlColorTxt( self.cfg[1].worth, "#ffd633"))
  123. local reward_list = self.cfg[1].award_limit_list
  124. if #reward_list > 0 then
  125. for i,v in ipairs(reward_list) do
  126. local item = self.reward_item_list[i]
  127. if item == nil then
  128. item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.reward_con)
  129. self.reward_item_list[i] = item
  130. end
  131. if v.is_limit then
  132. item:SetNumLimitVisible( true, 4 )
  133. item:SetData(v[2], 1, nil, nil)
  134. else
  135. item:SetNumLimitVisible( false )
  136. item:SetData(v[2], v[3], nil, nil)
  137. end
  138. item:SetItemSize(50, 50)
  139. item:SetAnchoredPosition((i - 1) * 65 + 7.5,-8)
  140. end
  141. for i=#reward_list + 1,#self.reward_item_list do
  142. self.reward_item_list[i]:SetVisible(false)
  143. end
  144. end
  145. SetSizeDeltaX(self.reward_con, 65 * #reward_list)
  146. local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_LIMIT_PACKAGE,2)
  147. if helpVo then
  148. self:CheckLeftTime()
  149. end
  150. end
  151. function FuliLimitPackageView:UpdateInfo()
  152. self.data = self.model.fuli_limit_package_info
  153. if self.data then
  154. if not self.limit_num then
  155. self.cfg = DeepCopy(self.model:GetFuliLevelCFG(self.mainVo.career))
  156. if not self.cfg or not self.cfg[1] then
  157. return
  158. end
  159. self.limit_num = self.cfg[1].limit_num
  160. end
  161. local num = self.limit_num - self.data.number
  162. if num < FuliConst.LIMIT_PACKAGE_CONST.LIMIT_NUM then
  163. num = FuliConst.LIMIT_PACKAGE_CONST.LIMIT_NUM
  164. end
  165. self.count_text_txt.text = string.format("/%d", self.limit_num)
  166. local t_num = 10000
  167. local t_num_list = {}
  168. local num_list = {}
  169. for i=1,5 do
  170. local m = num / t_num
  171. local n = num % t_num
  172. t_num_list[i] = math.floor(m)
  173. num = n
  174. t_num = t_num / 10
  175. end
  176. for i,v in ipairs(t_num_list) do
  177. if v ~= 0 then
  178. for ii=i,#t_num_list do
  179. table.insert(num_list, t_num_list[ii])
  180. end
  181. break
  182. end
  183. end
  184. for i,v in ipairs(num_list) do
  185. local item = self.num_item_list[i]
  186. if item == nil then
  187. item = FuliLimitPackageNumItem.New(self.num_ani_con,nil)
  188. self.num_item_list[i] = item
  189. end
  190. item:SetData(v, 0.5 * i, i)
  191. item:SetAnchoredPosition(85-(#num_list - i)*12, -8)
  192. end
  193. local packag_name = self.cfg[1].name or "至尊级限量礼包"
  194. local function LoadSuccessCallBack( )
  195. self.load_item_idx = self.load_item_idx - 1
  196. if self.load_item_idx == 0 then
  197. self:ResetPlayerInfo(packag_name)
  198. end
  199. end
  200. local list = self.data.list
  201. self.load_item_idx = #list
  202. if #list > 0 then
  203. for i,v in ipairs(list) do
  204. local item = self.item_list[i]
  205. if item == nil then
  206. item = FuliLimitPackageItem.New(self.item_con,nil)
  207. self.item_list[i] = item
  208. end
  209. item:SetLoadCallBack(LoadSuccessCallBack)
  210. end
  211. end
  212. end
  213. end
  214. function FuliLimitPackageView:ResetPlayerInfo(packag_name)
  215. self.list_item_animation = {}
  216. local total_w = 0
  217. local scroll_width = GetSizeDeltaX(self.item_scroll)
  218. for i= 1,#self.item_list do
  219. local item = self.item_list[i]
  220. if item then
  221. local d = self.data.list[i]
  222. self.list_item_animation[i] = self.list_item_animation[i] or {}
  223. d.packag_name = packag_name
  224. item:SetData(d)
  225. item:SetAnchoredPosition(scroll_width + total_w,0)
  226. local w = item:GetWidth()
  227. self.list_item_animation[i].item = item
  228. self.list_item_animation[i].width = w
  229. total_w = total_w + w
  230. end
  231. end
  232. self.anim_end_pos = scroll_width
  233. SetSizeDeltaX(self.item_con, total_w)
  234. self:StartAnimationList()
  235. end
  236. function FuliLimitPackageView:InitActoin()
  237. self.image_obj = UiFactory.createChild(self.icon_cont, UIType.ImageExtend)
  238. self.image_obj.transform.sizeDelta = Vector2(72, 72)
  239. self.image_icon = self.image_obj:GetComponent("ImageExtend")
  240. SetLocalPosition(self.image_obj.transform, 0, 0, 0)
  241. lua_resM:setImageSprite(self, self.image_icon, "mainUI_asset", "limit_package_btn_bg", true)
  242. end
  243. --动画开始
  244. function FuliLimitPackageView:PlayAction( )
  245. local callback = function()
  246. MainUIController.Instance.MainRoleHeadInfoView:SetLimitPackageBtnVisible(true)
  247. self:Close()
  248. end
  249. self.is_do_action = true
  250. local pos = MainUIController.Instance.MainRoleHeadInfoView:GetLimitPackageBtnPos()
  251. if pos and self.image_obj then
  252. MainUIController.Instance.MainRoleHeadInfoView:SetLimitPackageBtnVisible(false)
  253. self.center_obj:SetActive(false)
  254. self.icon_cont_obj:SetActive(true)
  255. self.tween_id = TweenLite.to(self, self.image_obj.transform, TweenLite.UiAnimationType.POS, pos, 0.8, callback)
  256. else
  257. callback()
  258. end
  259. end
  260. function FuliLimitPackageView:Continue()
  261. if TaskModel:getInstance():IsTaskFinished(FuliConst.LIMIT_PACKAGE_TASK.CLOSE_TASK_ID) then
  262. self.model:Fire(FuliConst.REQ_FULI_SCMD, 16006, self.cfg[1].id)
  263. self:Close()
  264. else
  265. local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_LIMIT_PACKAGE,2)
  266. if helpVo then
  267. self:InitActoin()
  268. self:PlayAction()
  269. else
  270. self:Close()
  271. GlobalEventSystem:Fire(EventName.START_AUTO_DO_TASK)
  272. GlobalEventSystem:Fire(EventName.FORCE_TO_DO_TASK)
  273. end
  274. end
  275. end
  276. function FuliLimitPackageView:CheckLeftTime()
  277. if self.timer_countdown then
  278. TimerQuest.CancelQuest(GlobalTimerQuest, self.timer_countdown)
  279. self.timer_countdown = nil
  280. end
  281. local leftTime = 15
  282. local function timer_func()
  283. leftTime = leftTime - 1
  284. if leftTime <= 0 then
  285. self:Continue()
  286. else
  287. self.time_text_txt.text = string.format("%s 秒后自动关闭界面", HtmlColorTxt( leftTime, "#0CE148") )
  288. end
  289. end
  290. self.timer_countdown = TimerQuest.AddPeriodQuest(GlobalTimerQuest, timer_func, 1)
  291. timer_func()
  292. end
  293. function FuliLimitPackageView:StopAnimationList()
  294. if self.timer_anim_list then
  295. TimerQuest.CancelQuest(GlobalTimerQuest, self.timer_anim_list)
  296. self.timer_anim_list = nil
  297. end
  298. end
  299. function FuliLimitPackageView:StartAnimationList()
  300. if self.list_item_animation then
  301. local function timer_func()
  302. local end_pos_x = self.anim_end_pos
  303. for i,v in ipairs(self.list_item_animation) do
  304. local cur_pos_x = v.cur_pos_x
  305. if not cur_pos_x then
  306. local pos = v.item:GetAnchoredPosition()
  307. cur_pos_x = pos.x
  308. end
  309. cur_pos_x = cur_pos_x- 3
  310. v.cur_pos_x = cur_pos_x
  311. v.item:SetAnchoredPosition(cur_pos_x, 0)
  312. end_pos_x = end_pos_x < cur_pos_x + v.width and cur_pos_x + v.width or end_pos_x
  313. end
  314. for i,v in ipairs(self.list_item_animation) do
  315. if v.cur_pos_x < - v.width then
  316. v.item:SetAnchoredPosition(end_pos_x, 0)
  317. v.cur_pos_x = end_pos_x
  318. end
  319. end
  320. end
  321. self.timer_anim_list = TimerQuest.AddPeriodQuest(GlobalTimerQuest, timer_func, 0.02)
  322. timer_func()
  323. end
  324. end