源战役客户端
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

271 行
9.1 KiB

  1. -- <*
  2. -- @Author: Saber
  3. -- @Description: 成就系统主界面
  4. -- *>
  5. AchieveView = AchieveView or BaseClass(BaseItem)
  6. local AchieveView = AchieveView
  7. local MAIN_TYPE_DATA = {
  8. [1] = {name = "系统养成", type_id = 1, icon_res = "achi_main_type_icon1"},
  9. [2] = {name = "社交活跃", type_id = 2, icon_res = "achi_main_type_icon2"},
  10. [3] = {name = "日常挑战", type_id = 3, icon_res = "achi_main_type_icon3"},
  11. [4] = {name = "资源收集", type_id = 4, icon_res = "achi_main_type_icon4"},
  12. }
  13. function AchieveView:__init()
  14. self.base_file = "achievement"
  15. self.layout_file = "AchieveView"
  16. -- self.layer_name = "UI"
  17. -- self.destroy_imm = true
  18. -- self.use_background = G_USING_BG --全屏界面默认使用这个参数,非全屏界面自行设置
  19. -- self.hide_maincancas = true
  20. -- self.change_scene_close = true --是否切换场景时关闭(弹出界面使用)
  21. -- self.append_to_ctl_queue = true --是否要添加进界面堆栈
  22. -- self.blur_activity_bg = true
  23. self.cur_tab_index = 1 -- 当前页签的index
  24. self.category_data_req_list = {} -- 界面中请求进度协议的记录,保证在一次查看界面中不会反复请求章节成就进度协议
  25. self.model = AchieveModel:getInstance()
  26. self.item_list = {}
  27. self.cur_select_type = 1
  28. -- self.load_callback = function ()
  29. -- self:LoadSuccess()
  30. -- self:AddEvent()
  31. -- end
  32. -- self.open_callback = function ( )
  33. -- self:UpdateView()
  34. -- end
  35. -- self.destroy_callback = function ( )
  36. -- self:DestroySuccess()
  37. -- end
  38. self:Load()
  39. end
  40. function AchieveView:Open( index )
  41. -- self.cur_tab_index = index or 1
  42. BaseView.Open(self)
  43. end
  44. function AchieveView:Load_callback()
  45. local nodes = {
  46. "bg:raw",
  47. "money_con",
  48. "tab_scroll", "tab_scroll/Viewport/tab_con",
  49. "view_con",
  50. "close:obj",
  51. "btnCon",
  52. "total_view_con",
  53. }
  54. self:GetChildren(nodes)
  55. -- local function close_callback()
  56. -- self:Close()
  57. -- end
  58. -- self.tabWindowComponent = UITabWindow.New(self.transform, {}, nil ,close_callback, self.background_wnd, nil, UITabWindow.SizeSmallHallNoTab, false, nil, true)
  59. -- self.tabWindowComponent:SetTitleText("成就之路")
  60. -- self.tabWindowComponent:SetBackgroundRes("default_bg_6")
  61. --lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("achi_main_bg_1280_720"), false)
  62. self:AddEvent()
  63. if self.need_refreshData then
  64. self:UpdateView()
  65. end
  66. end
  67. function AchieveView:AddEvent()
  68. local function click_event(target)
  69. if target == self.close_obj then
  70. self:Close()
  71. end
  72. end
  73. AddClickEvent(self.close_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
  74. local function UPDATE_VIEW()
  75. self:AutoSwitchCategoryAfterClaimReward( )
  76. end
  77. self:BindEvent(self.model, AchieveModel.UPDATE_BASE_VIEW, UPDATE_VIEW)
  78. end
  79. function AchieveView:UpdateView( )
  80. self:InitMainTypeBtns()
  81. self:UpdateTotalView()
  82. --[[ local tab_list = self.model:GetChapterProgressTabData(true)
  83. local callback = function(index)
  84. self:ChangeTab(index)
  85. end
  86. self.tab_item_creator = self.tab_item_creator or self:AddUIComponent(UI.ItemListCreator)
  87. local info = {
  88. data_list = tab_list,
  89. item_con = self.tab_con,
  90. scroll_view = self.tab_scroll,
  91. item_class = AchieveTabBtnItem,
  92. item_height = 62,
  93. start_x = 0.5,
  94. start_y = -1,
  95. space_y = 2.5,
  96. create_frequency = 0.01,
  97. alignment = UnityEngine.TextAnchor.UpperLeft,
  98. on_update_item = function(item, i, v)
  99. item:SetData(v, i, callback)
  100. item:SetSelected(i == self.cur_tab_index)
  101. end,
  102. }
  103. self.tab_item_creator:UpdateItems(info)
  104. callback(self.cur_tab_index)--]]
  105. end
  106. -- 刷新主要的成就信息
  107. function AchieveView:UpdateTotalView( )
  108. if not self.achi_total_view then
  109. self.achi_total_view = AchieveTotalView.New(self.total_view_con)
  110. end
  111. end
  112. -- 初始化大类按钮
  113. function AchieveView:InitMainTypeBtns( need_top )
  114. local tb = self.model:GetMainTypeProgressData()
  115. local click_cb = function ( type_id )
  116. self:OnClickMainTypeBtn(type_id, nil, true)
  117. end
  118. local start_x = 39
  119. local start_y = -32
  120. local interval = 171
  121. for i,v in ipairs(MAIN_TYPE_DATA) do
  122. if tb[v.type_id] then
  123. local item = self.item_list[i]
  124. if not item then
  125. self.item_list[i] = AchieveMainTypeItem.New(self.btnCon)
  126. item = self.item_list[i]
  127. end
  128. item:SetData(v, tb[v.type_id], click_cb)
  129. item:SetPosition(start_x +(i - 1) * interval, start_y)
  130. end
  131. end
  132. local open_fun_cache = self.model:GetOpenFunCache()
  133. if open_fun_cache then
  134. -- print('Msh:AchieveView.lua[164] data', open_fun_cache.main_type)
  135. self.cur_select_type = open_fun_cache.main_type
  136. self.model:DelOpenFunCache() -- 删除跳转标志
  137. end
  138. self:OnClickMainTypeBtn(self.cur_select_type, true, need_top)
  139. end
  140. -- 点击大类按钮
  141. function AchieveView:OnClickMainTypeBtn( type_id, force_update, need_top )
  142. if (not force_update) and type_id == self.cur_select_type then
  143. return
  144. end
  145. self.cur_select_type = type_id
  146. for k,v in pairs(self.item_list) do
  147. v:SetSelected(v.data.type_id == type_id)
  148. end
  149. self:UpdateViewCon(need_top)
  150. end
  151. -- 刷新成就列表
  152. function AchieveView:UpdateViewCon( need_top )
  153. if not self.achi_variety_view then
  154. self.achi_variety_view = AchieveVarietyView.New(self.view_con)
  155. end
  156. -- 设置这边需要查看的成就章节数,由于章节是从第二个按钮开始所以这里要减1
  157. local main_type = self.cur_select_type or 1
  158. self.achi_variety_view:SetMainType(main_type, need_top)
  159. -- 如果缓存中不存在数据则要请求一次协议,并且保证空的章节在一次打开成就主界面情况下不会反复请求
  160. if not self.model:GetAchieveData(main_type) and not self.category_data_req_list[main_type] then
  161. self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40902, main_type)
  162. self.category_data_req_list[main_type] = true
  163. end
  164. -- self:PopUpChild(self.achi_variety_view)
  165. end
  166. --[[function AchieveView:ChangeTab(index)
  167. self.cur_tab_index = index
  168. if self.tab_item_creator then
  169. self.tab_item_creator:IterateItems(function( item, i )
  170. item:SetSelected(i == index)
  171. end)
  172. end
  173. self:SelectedTab(index)
  174. end--]]
  175. --[[-- 选中左侧页签后回调
  176. function AchieveView:SelectedTab(index)
  177. if index == 1 then -- 总览界面在第一位
  178. if not self.achi_total_view then
  179. self.achi_total_view = AchieveTotalView.New(self.view_con)
  180. end
  181. self:PopUpChild(self.achi_total_view)
  182. else
  183. if not self.achi_variety_view then
  184. self.achi_variety_view = AchieveVarietyView.New(self.view_con)
  185. end
  186. -- 设置这边需要查看的成就章节数,由于章节是从第二个按钮开始所以这里要减1
  187. local category = index - 1
  188. self.achi_variety_view:SetCategory(category)
  189. -- 如果缓存中不存在数据则要请求一次协议,并且保证空的章节在一次打开成就主界面情况下不会反复请求
  190. if not self.model:GetAchieveData(category) and not self.category_data_req_list[category] then
  191. self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40902, category)
  192. self.category_data_req_list[category] = true
  193. end
  194. self:PopUpChild(self.achi_variety_view)
  195. end
  196. end--]]
  197. function AchieveView:AutoSwitchCategoryAfterClaimReward( )
  198. local cur_main_type = self.cur_select_type
  199. local main_type_red = self.model:GetAchieveCacheRed(AchieveModelRedType.Achieve)
  200. if main_type_red then
  201. if not main_type_red[cur_main_type] then -- 当前查看的章节已经没有红点了,则自动切换章节页签
  202. local target_index
  203. --print('Msh:AchieveView.lua[224] data', data)
  204. for k, v in pairs(main_type_red) do
  205. if v and (not target_index or target_index > k) then -- 存在红点
  206. target_index = k
  207. end
  208. end
  209. --PrintTable(main_type_red)
  210. --print('Msh:AchieveView.lua[230] data', target_index)
  211. if target_index then
  212. self.cur_select_type = target_index
  213. self:InitMainTypeBtns( true)
  214. end
  215. end
  216. end
  217. end
  218. function AchieveView:SetData( data )
  219. self.data = data
  220. if self.is_loaded then
  221. self.need_refreshData = false
  222. self:UpdateView()
  223. else
  224. self.need_refreshData = true
  225. end
  226. end
  227. function AchieveView:__delete( )
  228. if self.achi_total_view then
  229. self.achi_total_view:DeleteMe()
  230. self.achi_total_view = nil
  231. end
  232. if self.achi_variety_view then
  233. self.achi_variety_view:DeleteMe()
  234. self.achi_variety_view = nil
  235. end
  236. -- if self.tabWindowComponent then
  237. -- self.tabWindowComponent:DeleteMe()
  238. -- self.tabWindowComponent = nil
  239. -- end
  240. for k,v in pairs(self.item_list) do
  241. v:DeleteMe()
  242. end
  243. end