源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

349 行
12 KiB

  1. CSMainTaskView = CSMainTaskView or BaseClass(BaseView)
  2. local CSMainTaskView = CSMainTaskView
  3. function CSMainTaskView:__init()
  4. self.base_file = "csMain"
  5. self.layout_file = "CSMainTaskView"
  6. self.layer_name = "Activity"
  7. self.destroy_imm = true
  8. self.use_background = true
  9. self.change_scene_close = true
  10. self.hide_maincancas = true --是否隐藏主界面
  11. self.append_to_ctl_queue = false --是否要添加进界面堆栈
  12. self.need_show_money = false --是否要显示顶部的金钱栏
  13. self.is_set_zdepth = true
  14. self.model = CSMainModel:getInstance()
  15. self.current_index = nil
  16. self.load_callback = function ()
  17. self:LoadSuccess()
  18. self:AddEvent()
  19. end
  20. self.open_callback = function ( )
  21. self:OpenSuccess()
  22. end
  23. self.destroy_callback = function ( )
  24. self:DestroySuccess()
  25. end
  26. end
  27. function CSMainTaskView:Open(index)
  28. self.current_index = index or 1
  29. BaseView.Open(self)
  30. end
  31. function CSMainTaskView:LoadSuccess()
  32. local nodes = {
  33. "closeBtn:obj", "bg:raw", "helpBtn:obj",
  34. "taskTabCon/tab3:obj", "taskTabCon/tab3/tabSelect3:obj", "taskTabCon/tab3/tabRed3:obj", "taskTabCon/tab3/tabText3:tmp",
  35. "taskTabCon/tab2:obj", "taskTabCon/tab2/tabSelect2:obj", "taskTabCon/tab2/tabRed2:obj", "taskTabCon/tab2/tabText2:tmp",
  36. "taskTabCon/tab1:obj", "taskTabCon/tab1/tabSelect1:obj", "taskTabCon/tab1/tabRed1:obj", "taskTabCon/tab1/tabText1:tmp",
  37. "ScrollView", "ScrollView/Viewport/Content",
  38. "activeCon/slider:img",
  39. "activeCon/awardCon4", "activeCon/awardCon2", "activeCon/awardCon3", "activeCon/awardCon1", "activeCon/awardCon5",
  40. "activeCon/activeDotNum5:tmp", "activeCon/activeDotNum4:tmp", "activeCon/activeDotNum3:tmp", "activeCon/activeDotNum1:tmp", "activeCon/activeDotNum2:tmp",
  41. "activeCon/dot1:img", "activeCon/dot3:img", "activeCon/dot2:img", "activeCon/dot4:img", "activeCon/dot5:img",
  42. "activeCon/awardGetFlag5:obj", "activeCon/awardGetFlag4:obj", "activeCon/awardGetFlag1:obj", "activeCon/awardGetFlag3:obj", "activeCon/awardGetFlag2:obj",
  43. "activeNum:txt", "armsNum:tmp",
  44. "activeCon/awardClick1:obj", "activeCon/awardClick2:obj", "activeCon/awardClick3:obj", "activeCon/awardClick4:obj", "activeCon/awardClick5:obj",
  45. "activeCon/awardRed5:obj", "activeCon/awardRed2:obj", "activeCon/awardRed3:obj", "activeCon/awardRed4:obj", "activeCon/awardRed1:obj",
  46. }
  47. self:GetChildren(nodes)
  48. lua_resM:setOutsideRawImage(self,self.bg_raw,GameResPath.GetViewBigBg("cs_main_daily_task_bg"))
  49. self.model:Fire(CSMainConst.REQUEST_CCMD_EVENT,60301)
  50. self.award_item_list = {}
  51. for i=1,5 do
  52. self.award_item_list[i] = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self["awardCon"..i])
  53. self.award_item_list[i]:SetItemSize(62, 62)
  54. -- self.award_item_list[i]:SetAnchoredPosition(0,0)
  55. end
  56. end
  57. function CSMainTaskView:AddEvent()
  58. local on_click = function ( click_obj )
  59. if self.closeBtn_obj == click_obj then
  60. self:Close()
  61. elseif self.tab3_obj == click_obj then
  62. self:UpdateTaskCon(3)
  63. elseif self.tab2_obj == click_obj then
  64. self:UpdateTaskCon(2)
  65. elseif self.tab1_obj == click_obj then
  66. self:UpdateTaskCon(1)
  67. elseif self.awardClick1_obj == click_obj then
  68. self:DoGetActiveReward(1)
  69. elseif self.awardClick2_obj == click_obj then
  70. self:DoGetActiveReward(2)
  71. elseif self.awardClick3_obj == click_obj then
  72. self:DoGetActiveReward(3)
  73. elseif self.awardClick4_obj == click_obj then
  74. self:DoGetActiveReward(4)
  75. elseif self.awardClick5_obj == click_obj then
  76. self:DoGetActiveReward(5)
  77. elseif self.helpBtn_obj == click_obj then
  78. EventSystem.Fire(GlobalEventSystem,EventName.OPEN_INSTRUCTION_VIEW, 60302)
  79. end
  80. end
  81. AddClickEvent(self.closeBtn_obj, on_click)
  82. AddClickEvent(self.tab3_obj, on_click)
  83. AddClickEvent(self.tab2_obj, on_click)
  84. AddClickEvent(self.tab1_obj, on_click)
  85. AddClickEvent(self.awardClick1_obj, on_click)
  86. AddClickEvent(self.awardClick2_obj, on_click)
  87. AddClickEvent(self.awardClick3_obj, on_click)
  88. AddClickEvent(self.awardClick4_obj, on_click)
  89. AddClickEvent(self.awardClick5_obj, on_click)
  90. AddClickEvent(self.helpBtn_obj, on_click)
  91. --刷新任务、活跃、军备展示
  92. local function on_update_task_view()
  93. self:UpdateTaskCon(self.current_index)
  94. self:UpdateArmsNum()
  95. self:UpdateActiveCon()
  96. end
  97. self:BindEvent(self.model, CSMainConst.UPDATE_CS_MAIN_TASK_VIEW, on_update_task_view)
  98. local function on_active_process_change_var()
  99. self:UpdateActiveCon()
  100. end
  101. self.on_active_process_change_var_id = self.model:BindOne("active_process", on_active_process_change_var)
  102. local function on_arms_num_change_var()
  103. self:UpdateArmsNum()
  104. end
  105. self.on_arms_num_change_var_id = self.model:BindOne("arms_num", on_arms_num_change_var)
  106. local function on_active_dot_change_var()
  107. self:UpdateActiveCon()
  108. end
  109. self.on_active_dot_change_var_id = self.model:BindOne("active_dot", on_active_dot_change_var)
  110. local function update_red_dot(tab_id)
  111. if not self.is_loaded then return end
  112. if tab_id == CSMainConst.RedType.Task then
  113. self:UpdateTaskTabRed()
  114. end
  115. end
  116. self:BindEvent(self.model, CSMainConst.ANS_UPDATE_RED_DOT, update_red_dot)
  117. local function update_task_item_sort()
  118. if not self.is_loaded then return end
  119. self:UpdateTaskCon(self.current_index)
  120. end
  121. self:BindEvent(self.model, CSMainConst.REFRESH_CS_MAIN_TASK_ITEM_SORT, update_task_item_sort)
  122. local function CLICK_GET_WAY_ITEM( )
  123. self:Close()
  124. end
  125. self:BindEvent(GlobalEventSystem, EventName.CLICK_GET_WAY_ITEM, CLICK_GET_WAY_ITEM)
  126. end
  127. function CSMainTaskView:DoGetActiveReward(index)
  128. local active_process = self.model:GetCSMainActiveProcess()
  129. local active_dot = self.model:GetCSMainActiveDot()
  130. local active_cfg = self.model:GetCSMainActiveRewardsCfgByProgress(active_dot)
  131. local need_cfg = nil
  132. for i,v in ipairs(active_cfg) do
  133. if i == index then
  134. need_cfg = v
  135. break
  136. end
  137. end
  138. if need_cfg and not self.model:IsCSMainActiveDotRewardGet(need_cfg.id) then
  139. if active_process >= need_cfg.active then
  140. self.model:Fire(CSMainConst.REQUEST_CCMD_EVENT,60304,0,need_cfg.id)
  141. else
  142. if self.award_item_list[index] then
  143. self.award_item_list[index]:ManuallyClickFun(self.award_item_list[index].gameObject)
  144. end
  145. end
  146. else
  147. if self.award_item_list[index] then
  148. self.award_item_list[index]:ManuallyClickFun(self.award_item_list[index].gameObject)
  149. end
  150. end
  151. end
  152. function CSMainTaskView:OpenSuccess()
  153. end
  154. function CSMainTaskView:UpdateView( )
  155. end
  156. function CSMainTaskView:UpdateTaskCon(color_index)
  157. self.current_index = color_index
  158. for i=1,3 do
  159. local select_tmp_mat = ""
  160. if i == 1 then--B
  161. select_tmp_mat = ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBlueTab
  162. elseif i == 2 then--A
  163. select_tmp_mat = ShaderTools.TMPSharedMaterialType.HKYTW7OutlinePurple
  164. elseif i == 3 then--S
  165. select_tmp_mat = ShaderTools.TMPSharedMaterialType.HKYTW7OutlineDarkOrangeBtn
  166. end
  167. if i == color_index then
  168. self["tabSelect"..i.."_obj"]:SetActive(true)
  169. SetTMPSharedMaterial(self["tabText"..i.."_tmp"], select_tmp_mat)
  170. self["tabText"..i.."_tmp"].color = ColorUtil:ConvertHexToRGBColor("ffffff")
  171. else
  172. self["tabSelect"..i.."_obj"]:SetActive(false)
  173. SetTMPSharedMaterial(self["tabText"..i.."_tmp"], ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault)
  174. self["tabText"..i.."_tmp"].color = ColorUtil:ConvertHexToRGBColor("A0A4A8")
  175. end
  176. end
  177. local task_cfg_list = self.model:GetCSMainTaskCfgAfterSort(color_index)
  178. if not self.item_list_com then
  179. self.item_list_com = self:AddUIComponent(UI.ItemListCreator)
  180. end
  181. self.item_list_com:Reset()
  182. local info = {
  183. data_list = task_cfg_list,
  184. item_con = self.Content,
  185. item_class = CSMainTaskItem,
  186. item_width = 839,
  187. item_height = 100,
  188. space_y = 8,
  189. start_x = 6.5,
  190. start_y = -5,
  191. scroll_view = self.ScrollView,
  192. create_frequency = 0.01,
  193. on_update_item = function(item, i, v)
  194. item:SetData(v,i)
  195. end,
  196. }
  197. self.item_list_com:UpdateItems(info)
  198. self:UpdateTaskTabRed()
  199. end
  200. function CSMainTaskView:UpdateTaskTabRed( )
  201. local red_s = self.model:GetTaskRedByColor(3)
  202. local red_a = self.model:GetTaskRedByColor(2)
  203. local red_b = self.model:GetTaskRedByColor(1)
  204. self.tabRed3_obj:SetActive(red_s)
  205. self.tabRed2_obj:SetActive(red_a)
  206. self.tabRed1_obj:SetActive(red_b)
  207. end
  208. function CSMainTaskView:UpdateActiveCon( )
  209. local active_process = self.model:GetCSMainActiveProcess()
  210. local active_dot = self.model:GetCSMainActiveDot()
  211. local active_cfg = self.model:GetCSMainActiveRewardsCfgByProgress(active_dot)
  212. -- --active_dot转化出一个1到5的值用于和1到5进行比较
  213. -- local mulit = math.floor(active_dot/5)
  214. -- local remain = active_dot%5
  215. -- local trans_dot = active_dot
  216. -- if active_dot == 0 then
  217. -- trans_dot = 0
  218. -- else
  219. -- if remain ~= 0 then
  220. -- trans_dot = active_dot-mulit*5
  221. -- else
  222. -- trans_dot = active_dot-(mulit-1)*5
  223. -- end
  224. -- end
  225. self.activeNum_txt.text = active_process
  226. for i,v in ipairs(active_cfg) do--这里取了最新的5条配置,所以i也是1到5
  227. self["activeDotNum"..i.."_tmp"].text = v.active
  228. local reward_cfg = stringtotable(v.awards)
  229. if self.model:IsCSMainActiveDotRewardGet(v.id) then--已经领取了
  230. self["activeDotNum"..i.."_tmp"].color = ColorUtil:ConvertHexToRGBColor("fefeff")
  231. self["awardGetFlag"..i.."_obj"]:SetActive(true)
  232. self.award_item_list[i]:SetData(reward_cfg[1][2],reward_cfg[1][3],nil,nil,nil,nil,nil,nil,nil,true)
  233. self.award_item_list[i]:SetIconGray(true)
  234. self["awardRed"..i.."_obj"]:SetActive(false)
  235. else--等待领取或不可领取
  236. self["activeDotNum"..i.."_tmp"].color = ColorUtil:ConvertHexToRGBColor("a9c1e1")
  237. self["awardGetFlag"..i.."_obj"]:SetActive(false)
  238. self.award_item_list[i]:SetData(reward_cfg[1][2],reward_cfg[1][3])
  239. self.award_item_list[i]:SetIconGray(false)
  240. if active_process >= v.active then--可以领取
  241. self["awardRed"..i.."_obj"]:SetActive(true)
  242. else
  243. self["awardRed"..i.."_obj"]:SetActive(false)
  244. end
  245. end
  246. if i == 5 then
  247. lua_resM:setImageSprite(self, self["dot"..i.."_img"], "csMain_asset","cs_main_task_dot_big",true)
  248. else
  249. lua_resM:setImageSprite(self, self["dot"..i.."_img"], "csMain_asset","cs_main_task_dot_small",true)
  250. end
  251. SetImageGray(self["dot"..i.."_img"], not self.model:IsCSMainActiveDotRewardGet(v.id))
  252. end
  253. local max_process = active_cfg[5].active
  254. local last_page_active_cfg = self.model:GetCSMainLastPageActiveCfg(active_cfg[1].id-1) --上一页的活跃配置
  255. local last_page_max_process = 0--上一页的最高活跃
  256. if last_page_active_cfg then
  257. last_page_max_process = last_page_active_cfg[5].active
  258. end
  259. local final_fill_amount = 0
  260. if active_process <= active_cfg[1].active then
  261. final_fill_amount = 0.1 + (active_process-last_page_max_process)/(active_cfg[1].active-last_page_max_process)*0.1
  262. else
  263. final_fill_amount = 0.2
  264. for i=2,5 do
  265. if active_process < active_cfg[i].active then
  266. final_fill_amount = final_fill_amount + (active_process-active_cfg[i-1].active)/(active_cfg[i].active-active_cfg[i-1].active)*0.2
  267. break
  268. else
  269. final_fill_amount = final_fill_amount + 0.2
  270. end
  271. end
  272. end
  273. self.slider_img.fillAmount = final_fill_amount
  274. end
  275. function CSMainTaskView:UpdateArmsNum( )
  276. local arms_num = self.model:GetCSMainArmsNum()
  277. local color = arms_num > 0 and ColorUtil.GREEN_TIPS or ColorUtil.RED_DARK
  278. self.armsNum_tmp.text = string.format("星域活跃:<%s>%s</color>", color, arms_num)
  279. end
  280. function CSMainTaskView:SwitchTab( index )
  281. self.current_index = index
  282. if index == 1 then
  283. elseif index == 2 then
  284. end
  285. end
  286. function CSMainTaskView:DestroySuccess( )
  287. if self.on_active_process_change_var_id then
  288. self.model:UnBind(self.on_active_process_change_var_id)
  289. self.on_active_process_change_var_id = nil
  290. end
  291. if self.on_arms_num_change_var_id then
  292. self.model:UnBind(self.on_arms_num_change_var_id)
  293. self.on_arms_num_change_var_id = nil
  294. end
  295. if self.on_active_dot_change_var_id then
  296. self.model:UnBind(self.on_active_dot_change_var_id)
  297. self.on_active_dot_change_var_id = nil
  298. end
  299. for k,v in pairs(self.award_item_list) do
  300. if v then
  301. UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, v)
  302. v = nil
  303. end
  304. end
  305. self.award_item_list = {}
  306. end