源战役客户端
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

548 рядки
19 KiB

4 тижднів тому
  1. SevenDayTargetMainView = SevenDayTargetMainView or BaseClass(BaseView)
  2. local SevenDayTargetMainView = SevenDayTargetMainView
  3. local table_insert = table.insert
  4. local table_sort = table.sort
  5. function SevenDayTargetMainView:__init()
  6. self.base_file = "sevenDayTarget"
  7. self.layout_file = "SevenDayTargetMainView"
  8. self.layer_name = "UI"
  9. self.destroy_imm = true
  10. self.use_background = true --全屏界面默认使用这个参数
  11. self.hide_maincancas = true --全屏界面需要放开隐藏主UI
  12. self.change_scene_close = true
  13. self.append_to_ctl_queue = false --是否要添加进界面堆栈
  14. self.need_show_money = false --是否要显示顶部的金钱栏
  15. self.is_show_bet_view = false --是否在显示投注界面
  16. self.score_item_list = {}
  17. self.close_fog = true
  18. self.day_item_list = {}
  19. self.item_list = {}
  20. self.model = SevenDayTargetModel:getInstance()
  21. self.is_first_open = true
  22. self.cur_select_day = 1
  23. self.mainVo = RoleManager.Instance.mainRoleInfo
  24. self.model:Fire(SevenDayTargetModel.REQUEST_SEVEN_DAY_TARGET_SCMD, 17600)
  25. self.item_index_cache = {} -- 记录当前每个成就对应的位置索引
  26. self.load_callback = function ()
  27. self:LoadSuccess()
  28. end
  29. self.open_callback = function ( )
  30. self:OpenSuccess()
  31. end
  32. self.switch_callback = function(index)
  33. self:SwitchTab(index)
  34. end
  35. self.destroy_callback = function ( )
  36. self:DestroySuccess()
  37. end
  38. self.ReOpen_callback = function ()
  39. self:UpdateView()
  40. end
  41. end
  42. function SevenDayTargetMainView:Open( )
  43. BaseView.Open(self)
  44. end
  45. function SevenDayTargetMainView:LoadSuccess()
  46. local nodes = {
  47. "task_progress_text:tmp",
  48. "con_skill_icon", "con_skill_icon/skill_icon:img",
  49. "bg:raw", "skill_desc_text:tmp","bg2:img",
  50. "skill_name_text:tmp", "item_scroll:scroll", "item_scroll/Viewport/item_con", "day_con",
  51. "score_progress:img", "btn/btn_red:obj", "btn:obj", "score_con", "score_text:tmp",
  52. "get_image:obj", "time_text:tmp", "btn/btn_text:obj",
  53. "btn/btn_text_gray:obj", "close_btn:obj","role_con",
  54. -- 2021.7.22新增
  55. "icon_skill_name:img",
  56. "btn_get_pet:obj:imgex", "btn_get_pet/btn_get_pet_red:obj",
  57. "btn_get_pet/btn_get_pet_gray:obj", "btn_get_pet/btn_get_pet_text:obj",
  58. "get_pet_image:obj",
  59. }
  60. self:GetChildren(nodes)
  61. self:AddEvent()
  62. self.btn_img = self.btn:GetComponent('ImageExtend')
  63. self.item_scroll_scroll.vertical = false
  64. SetAnchoredPosition(self.bg, 3.5, 14.5)
  65. SetSizeDelta(self.bg, 1203, 633)
  66. lua_resM:setOutsideRawImage(self,self.bg_raw,GameResPath.GetViewBigBg("seven_day_target_bg_1203_633"),false)
  67. local x, y = GetAnchoredPosition(self.con_skill_icon)
  68. self.pos_data_y = y
  69. self.awardItem = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem,self.score_con)
  70. self.awardItem:SetItemSize(62, 62)
  71. local function bg_back_func( ... )
  72. if self.background_wnd and self.background_wnd:GetComponent("RawImageExtend") then
  73. self:MoveUIToBack(self.background_wnd:GetComponent("RawImageExtend"))
  74. end
  75. self:MoveUIToBack(self.bg_raw)
  76. -- self:MoveUIToBack(self.bg2_img)
  77. end
  78. if self.background_wnd then
  79. bg_back_func()
  80. else
  81. self.bg_back_func = bg_back_func
  82. end
  83. self:UpdateModel()
  84. end
  85. function SevenDayTargetMainView:AddEvent()
  86. local function on_click( target )
  87. if self.btn_obj == target then
  88. self.model:Fire(SevenDayTargetModel.REQUEST_SEVEN_DAY_TARGET_SCMD, 17602, 2, self.cur_select_day)
  89. elseif self.btn_get_pet_obj == target then
  90. if not self.is_receive then
  91. self.model:Fire(SevenDayTargetModel.REQUEST_SEVEN_DAY_TARGET_SCMD, 17602, 1, self.score_cfg[1].score)
  92. end
  93. elseif self.close_btn_obj == target then
  94. self:Close()
  95. end
  96. end
  97. AddClickEvent(self.btn_obj, on_click)
  98. AddClickEvent(self.close_btn_obj, on_click)
  99. AddClickEvent(self.btn_get_pet_obj, on_click)
  100. local function on_update_view( is_get_award )
  101. self:UpdateView()
  102. self.update_need_anim = is_get_award
  103. self:UpdateTaskInfo()
  104. self:UpdateTime()
  105. end
  106. self.on_update_view_id = self.model:Bind(SevenDayTargetModel.UPDATE_SEVEN_DAY_TARGET_INFO, on_update_view)
  107. local function on_close( )
  108. self:Close()
  109. end
  110. self.on_close_id = self.model:Bind(SevenDayTargetModel.CLOSE_SEVEN_DAY_TARGET_MAIN_VIEW, on_close)
  111. end
  112. function SevenDayTargetMainView:OpenSuccess()
  113. self:UpdateView()
  114. end
  115. function SevenDayTargetMainView:ReOpen( )
  116. end
  117. function SevenDayTargetMainView:UpdateView( )
  118. self:UpdateTab()
  119. self:UpdateLeftInfo()
  120. self:UpdateTime()
  121. end
  122. function SevenDayTargetMainView:UpdateLeftInfo( )
  123. local cfg = Config.Sevengoalscore
  124. local cur_score, server_data = self.model:GetSevenDayTargetScoreInfo()
  125. if not self.score_cfg then
  126. self.score_cfg = {}
  127. for k,v in pairsByKeys(cfg) do
  128. table_insert(self.score_cfg, v)
  129. end
  130. local sort_func = function ( a, b )
  131. return a.score < b.score
  132. end
  133. table_sort(self.score_cfg, sort_func)
  134. end
  135. local cur_cfg = self.score_cfg[1]
  136. local reward_data = stringtotable(cur_cfg.reward)
  137. -- if not self.reward_item then
  138. -- self.reward_item = SevenDayTargetScoreItem.New(self.score_con)
  139. -- end
  140. -- self.reward_item:SetData(1, self.score_cfg[1], server_data[self.score_cfg[1].score], cur_score)
  141. self.awardItem:SetData(reward_data[1][2])
  142. -- 按钮状态
  143. if server_data[self.score_cfg[1].score] then -- 领了
  144. self.is_receive = true
  145. else
  146. self.is_receive = false
  147. local can_get = false
  148. if cur_score >= self.score_cfg[1].score then -- 可以领
  149. can_get = true
  150. end
  151. self.btn_get_pet_imgex.gray = not can_get
  152. self.btn_get_pet_red_obj:SetActive(can_get)
  153. self.btn_get_pet_gray_obj:SetActive(not can_get)
  154. end
  155. self.btn_get_pet_obj:SetActive(not self.is_receive)
  156. self.get_pet_image_obj:SetActive(self.is_receive)
  157. self.score_progress_img.fillAmount = cur_score/cur_cfg.score
  158. self.score_text_tmp.text = string.format("%s/%s", cur_score, cur_cfg.score)
  159. -- --积分和进度
  160. -- if not self.score_mapping then
  161. -- self.score_mapping = {
  162. -- [0] = 0,
  163. -- [1] = 0.1,
  164. -- [2] = 0.30,
  165. -- [3] = 0.5,
  166. -- [4] = 0.7,
  167. -- [5] = 1,
  168. -- }
  169. -- end
  170. --找到现在属于哪个段
  171. -- local cur_index = 0
  172. -- for i,v in ipairs(self.score_cfg) do
  173. -- if cur_score >= v.score then
  174. -- cur_index = i
  175. -- end
  176. -- end
  177. -- if cur_index ~= #self.score_cfg then
  178. -- local last_score = cur_index == 0 and 0 or self.score_cfg[cur_index].score
  179. -- self.score_progress_img.fillAmount = (cur_score - last_score) / (self.score_cfg[cur_index+1].score - last_score) * (self.score_mapping[cur_index + 1] - self.score_mapping[cur_index] ) + self.score_mapping[cur_index]
  180. -- else
  181. -- self.score_progress_img.fillAmount = 1
  182. -- end
  183. -- self.score_text_tmp.text = string.format("已获得积分:%s", cur_score)
  184. -- local y_space = 94
  185. -- local y_offset = 20
  186. -- local len = #self.score_cfg
  187. -- for i,v in ipairs(self.score_cfg) do
  188. -- local item = self.score_item_list[i]
  189. -- if not item then
  190. -- item = SevenDayTargetScoreItem.New(self.score_con)
  191. -- item:SetPosition(10, -y_space * (len -i) + y_offset )
  192. -- self.score_item_list[i] = item
  193. -- end
  194. -- item:SetData(i, v, server_data[v.score], cur_score)
  195. -- end
  196. end
  197. function SevenDayTargetMainView:UpdateTab( )
  198. local cur_day = self.model:GetSevenDayTargetLoginDay() or 1
  199. cur_day = cur_day > 7 and 7 or cur_day
  200. if self.is_first_open then
  201. self.cur_select_day = cur_day
  202. end
  203. local x_space = 77
  204. local x_offset = 0
  205. local function on_click_day( day )
  206. self:SetSelectDay(day)
  207. end
  208. for i=1,7 do
  209. local item = self.day_item_list[i]
  210. if not item then
  211. item = SevenDayTargetDayItem.New(self.day_con)
  212. item:SetPosition(111 * (i-1), 0)
  213. item:SetCallBackFunc(on_click_day)
  214. self.day_item_list[i] = item
  215. end
  216. item:SetData(i, cur_day, self.cur_select_day)
  217. end
  218. if self.is_first_open then
  219. self.cur_select_day = cur_day
  220. self.is_first_open = false
  221. self:UpdateTaskInfo()
  222. end
  223. end
  224. function SevenDayTargetMainView:SetSelectDay( day )
  225. if self.cur_select_day == day then
  226. return
  227. end
  228. self.cur_select_day = day
  229. for i,v in ipairs(self.day_item_list) do
  230. v:SetSelect(day == i)
  231. end
  232. self:UpdateTaskInfo()
  233. end
  234. function SevenDayTargetMainView:UpdateTaskInfo( )
  235. local cfg = self.model:GetSevenDayTargetTaskCFGByDay(self.cur_select_day)
  236. local server_data = self.model:GetSevenDayTargetInfo(self.cur_select_day) or {}
  237. --print('=======Msh:SevenDayTargetMainView.lua[223] ===TABLE====')
  238. --PrintTable(server_data)
  239. --排序
  240. for i,v in ipairs(cfg) do
  241. if server_data[self.model:GetKeyValve(v.days, v.mod_id, v.sub_id)] then
  242. if server_data[self.model:GetKeyValve(v.days, v.mod_id, v.sub_id)].is_receive == 1 then--领取了的排最后
  243. v.sort_id = 4
  244. else
  245. local total_num = v.limit_times or 1
  246. v.sort_id = server_data[self.model:GetKeyValve(v.days, v.mod_id, v.sub_id)].progress >= total_num and 1 or 2--完成了可领的在最上面 没完成没领的在中间
  247. end
  248. else--没服务端数据的放中间
  249. local data = stringtotable(v.jump_id)
  250. local cfg = OpenFun.LinkWin[data[1] .. "@" .. data[2]]
  251. local is_open, conf = false, false
  252. if cfg then
  253. is_open, conf = GetModuleIsOpen(cfg.winId, cfg.subId)
  254. else
  255. is_open, conf = GetModuleIsOpen(v.mod_id, v.sub_id)
  256. end
  257. -- local is_open, conf = GetModuleIsOpen(v.mod_id, v.sub_id)
  258. if is_open then
  259. v.sort_id = 2
  260. else
  261. v.sort_id = 3
  262. end
  263. end
  264. end
  265. local sort_func = function ( a, b )
  266. if a.sort_id ~= b.sort_id then
  267. return a.sort_id < b.sort_id
  268. else
  269. return a.order_id < b.order_id
  270. end
  271. end
  272. table_sort(cfg, sort_func)
  273. ----------item位移动画-start---------
  274. -- 2021.7.22 改版后只有四个任务 没动画了
  275. --[[
  276. self.task_creator = self.task_creator or self:AddUIComponent(UI.ItemListCreator)
  277. -- 停止一下动画
  278. self.model:SetTaskItemAnimState(false) -- 默认设置没有动画
  279. self.item_scroll_scroll.vertical = true
  280. self.task_creator:IterateItems(function ( item, i )
  281. item:StopAnim(i)
  282. end)
  283. if need_top then -- 置顶
  284. self.task_creator:Reset()
  285. end
  286. -- 更新完全部item后回调(动画可能还在播)
  287. local update_cache_func = function ( )
  288. self.update_need_anim = false
  289. end
  290. -- 使用的item数目
  291. local ITEM_NUM = 8
  292. -- 播完动画的回调
  293. self.animing_item_count = ITEM_NUM
  294. local anim_call_back = function ()
  295. self.animing_item_count = self.animing_item_count - 1
  296. if self.animing_item_count <= 0 then
  297. self.model:SetTaskItemAnimState(false) -- 动画完毕
  298. self.item_scroll_scroll.vertical = true
  299. self.update_need_anim = false
  300. end
  301. end
  302. -- 找出一次性位移 很多索引 的数据(超出了item_num的范围)
  303. local down_item_new_index = false
  304. local down_item_data = false
  305. if self.update_need_anim then
  306. self.model:SetTaskItemAnimState(true) -- 动画中
  307. self.item_scroll_scroll.vertical = false
  308. for new_index, v in ipairs(cfg) do
  309. local key = v.mod_id * 1000000 + v.sub_id * 1000 + v.difficulty
  310. local old_index = self.item_index_cache[key]
  311. if old_index and new_index - old_index >= ITEM_NUM then
  312. down_item_data = v
  313. down_item_new_index = new_index
  314. end
  315. end
  316. end
  317. local tag_all_info = {
  318. data_list = cfg,
  319. item_con = self.item_con,
  320. item_class = SevenDayTargetTaskItem,
  321. item_height = 86,
  322. start_x = 3,
  323. start_y = -2.5,
  324. space_y = 0,
  325. scroll_view = self.item_scroll,
  326. create_frequency = 0.01,
  327. reuse_item_num = ITEM_NUM,
  328. on_update_item = function(item, i, v)
  329. if i == ITEM_NUM and down_item_data and self.update_need_anim then -- 拿一下这个平时看不到的item用一用
  330. local key = down_item_data.mod_id * 1000000 + down_item_data.sub_id * 1000 + down_item_data.difficulty
  331. local old_index = self.item_index_cache[key]
  332. local new_index = down_item_new_index
  333. -- 这个item是借用的 得还回去 所以单独给他刷一刷新
  334. local anim_call_back_update = function ( )
  335. self.task_creator:IterateItems(function ( item_temp, ii, vv )
  336. if item_temp == item then
  337. item:SetData(vv, ii, (server_data[vv.mod_id] and server_data[vv.mod_id][vv.sub_id]) and server_data[vv.mod_id][vv.sub_id][vv.difficulty] or nil)
  338. item:SetIndexPos(ii)
  339. end
  340. end)
  341. anim_call_back()
  342. end
  343. local temp_server_data = (server_data[v.mod_id] and server_data[v.mod_id][v.sub_id]) and server_data[v.mod_id][v.sub_id][v.difficulty] or nil
  344. item:MoveNewIndexPosAnimAndUpdate(old_index, new_index, down_item_data, temp_server_data,anim_call_back_update)
  345. self.item_index_cache[key] = new_index
  346. down_item_data = nil
  347. else
  348. local key = v.mod_id * 1000000 + v.sub_id * 1000 + v.difficulty
  349. local need_anim = self.update_need_anim and self.item_index_cache[key]
  350. local old_index = need_anim and self.item_index_cache[key] or i
  351. local new_index = i
  352. if need_anim then
  353. local temp_server_data = (server_data[v.mod_id] and server_data[v.mod_id][v.sub_id]) and server_data[v.mod_id][v.sub_id][v.difficulty] or nil
  354. item:MoveNewIndexPosAnimAndUpdate(old_index, new_index, v, temp_server_data, anim_call_back)
  355. else
  356. if self.update_need_anim then
  357. anim_call_back() -- 这个item不走动画 直接回调
  358. end
  359. item:SetData(v, new_index, (server_data[v.mod_id] and server_data[v.mod_id][v.sub_id]) and server_data[v.mod_id][v.sub_id][v.difficulty] or nil)
  360. end
  361. self.item_index_cache[key] = new_index
  362. end
  363. end,
  364. }
  365. self.task_creator:UpdateItems(tag_all_info)--]]
  366. ----------item位移动画-end-----------
  367. ----------新版创建-start---------
  368. for i=1, 4 do
  369. self.item_list[i] = self.item_list[i] or SevenDayTargetTaskItem.New(self.item_con)
  370. local item = self.item_list[i]
  371. local temp_data = cfg[i]
  372. item:SetData(temp_data, i, server_data[self.model:GetKeyValve(temp_data.days, temp_data.mod_id, temp_data.sub_id)] or nil)
  373. item:SetAnchoredPosition(3, -2.5 - 86 * (i - 1))
  374. end
  375. ----------新版创建-end-----------
  376. local cur_num = 0
  377. for i,v in pairs(server_data) do
  378. -- for ii,vv in pairs(v) do
  379. -- for iii,vvv in pairs(vv) do
  380. local cfg = self.model:GetSevenDayTargetTaskOneCFG(v.days, v.mod_id, v.sub_id)
  381. if cfg then
  382. if v.progress >= cfg.limit_times then
  383. cur_num = cur_num + 1
  384. end
  385. end
  386. -- end
  387. -- end
  388. end
  389. local total_num = TableSize(cfg)
  390. -- self.task_progress_img.fillAmount = cur_num/total_num
  391. local color = cur_num ~= total_num and ColorUtil.RED_DARK or ColorUtil.GREEN_DARK
  392. self.task_progress_text_tmp.text = string.format("%s %s/%s",
  393. HtmlColorTxt("当前进度", "#fdffc2"), HtmlColorTxt(cur_num, color),total_num)
  394. local skill_data = self.model:GetSevenDayTargetSkillInfo()
  395. -- 未达到领取条件时设置按钮变灰
  396. local have_red = cur_num >= total_num and not skill_data[self.cur_select_day]
  397. SetImageGray(self.btn_img, not have_red)
  398. self.btn_text_obj:SetActive(have_red)
  399. self.btn_text_gray_obj:SetActive(not have_red)
  400. self.btn_red_obj:SetActive(have_red)
  401. self.btn_obj:SetActive(not skill_data[self.cur_select_day])
  402. self.get_image_obj:SetActive(skill_data[self.cur_select_day])
  403. local skill_reward_cfg = Config.Sevenskillreward
  404. if skill_reward_cfg[self.cur_select_day] then
  405. local skill_cfg = SkillManager:getInstance():getSkillFromConfig(skill_reward_cfg[self.cur_select_day].skill_reward)
  406. -- lua_resM:setOutsideImageSprite(self,self.skill_icon_img,GameResPath.GetSkillIcon(skill_reward_cfg[self.cur_select_day].skill_reward),false)
  407. lua_resM:setImageSprite(self, self.skill_icon_img, "sevenDayTarget_asset", "sevenDayTarget_skill_" .. skill_reward_cfg[self.cur_select_day].skill_reward , true)
  408. lua_resM:setImageSprite(self, self.icon_skill_name_img, "sevenDayTarget_asset", "sevenDayTarget_font_" .. skill_reward_cfg[self.cur_select_day].skill_reward , true)
  409. self.skill_name_text_tmp.text = skill_reward_cfg[self.cur_select_day].name
  410. self.skill_desc_text_tmp.text = skill_cfg.lvs[1].desc
  411. self:StartAction()
  412. end
  413. end
  414. function SevenDayTargetMainView:UpdateModel( )
  415. local res_data = {
  416. father_node = self,
  417. transform = self.role_con,
  418. fashion_type = FuncOpenModel.TypeId.Pet,
  419. figure_id = 1003,
  420. scale = 300,
  421. ui_model_type = UIModelCommon.ModelType.BackModel,
  422. layer_name = self.layer_name,
  423. position = Vector2(-20 + 50, 108+(ScreenHeight-720)/2),
  424. }
  425. FuncOpenModel:getInstance():SetModelRes(res_data)
  426. end
  427. function SevenDayTargetMainView:UpdateTime( )
  428. local server_data = self.model:GetSevenDayTargetInfo()
  429. if TableSize(server_data) > 0 then
  430. local time = server_data.left_time
  431. local function on_time_down()
  432. local rest_time = time - TimeUtil:getServerTime( )
  433. if rest_time <= 0 then
  434. if self.count_time_id then
  435. GlobalTimerQuest:CancelQuest(self.count_time_id)
  436. self.count_time_id = nil
  437. end
  438. self.time_text_tmp.text = ""
  439. else
  440. self.time_text_tmp.text = string.format("距离活动结束还有%s", HtmlColorTxt(TimeUtil:timeConvert7(rest_time), ColorUtil.GREEN_DARK))
  441. end
  442. end
  443. if not self.question_time_id then
  444. self.question_time_id = GlobalTimerQuest:AddPeriodQuest(on_time_down, 1, -1)
  445. end
  446. end
  447. end
  448. -- 动画
  449. function SevenDayTargetMainView:StartAction( )
  450. self:StopAction( )
  451. -- 移动
  452. local function move_down(percent)
  453. SetAnchoredPositionY(self.con_skill_icon, self.pos_data_y - 10 * percent)
  454. end
  455. local action1 = cc.CustomUpdate.New(2, move_down)
  456. local function move_up(percent)
  457. SetAnchoredPositionY(self.con_skill_icon, self.pos_data_y - 10 * (1-percent))
  458. end
  459. local action2 = cc.CustomUpdate.New(2, move_up)
  460. ------------------------------------------------
  461. local action9 = cc.Sequence.New( action1, action2)
  462. local action10 = cc.RepeatForever.New( action9 )
  463. cc.ActionManager:getInstance():addAction(action10, self.con_skill_icon)
  464. end
  465. function SevenDayTargetMainView:StopAction( )
  466. cc.ActionManager:getInstance():removeAllActionsFromTarget(self.con_skill_icon)
  467. SetAnchoredPositionY( self.con_skill_icon, self.pos_data_y )
  468. end
  469. function SevenDayTargetMainView:DestroySuccess( )
  470. if self.awardItem then
  471. UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.awardItem)
  472. self.awardItem = nil
  473. end
  474. for i,v in ipairs(self.score_item_list) do
  475. v:DeleteMe()
  476. v = nil
  477. end
  478. self.score_item_list = {}
  479. -- if self.reward_item then
  480. -- self.reward_item:DeleteMe()
  481. -- self.reward_item = nil
  482. -- end
  483. for i,v in ipairs(self.day_item_list) do
  484. v:DeleteMe()
  485. v = nil
  486. end
  487. self.day_item_list = {}
  488. if self.on_update_view_id then
  489. self.model:UnBind(self.on_update_view_id)
  490. self.on_update_view_id = nil
  491. end
  492. if self.on_close_id then
  493. self.model:UnBind(self.on_close_id)
  494. self.on_close_id = nil
  495. end
  496. if self.count_time_id then
  497. GlobalTimerQuest:CancelQuest(self.count_time_id)
  498. self.count_time_id = nil
  499. end
  500. for i,v in ipairs(self.item_list) do
  501. v:DeleteMe()
  502. v = nil
  503. end
  504. self.item_list = {}
  505. self:StopAction()
  506. end