源战役客户端
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

325 linhas
9.9 KiB

4 semanas atrás
  1. EquipCollectView = EquipCollectView or BaseClass(BaseView)
  2. local EquipCollectView = EquipCollectView
  3. local table_insert = table.insert
  4. --[[
  5. EquipCollectView.TabData = {
  6. [1] = {name = "人物", level = MainRoleModel.TabOpenLevel[1]},
  7. }
  8. --]]
  9. function EquipCollectView:__init()
  10. self.base_file = "equipCollect"
  11. self.layout_file = "EquipCollectView"
  12. self.layer_name = "UI"
  13. self.need_show_money = false
  14. self.destroy_imm = true
  15. self.use_background = G_USING_BG
  16. self.hide_maincancas = true --全屏界面需要放开隐藏主UI
  17. self.append_to_ctl_queue = true --添加进入控制队列
  18. self.change_scene_close = true
  19. self.close_fog = true
  20. self.model_activity_bg = true
  21. self.model_activity_bg_pos = Vector2(-132,52)
  22. self.show_back_camera = true--打开backmodel摄像机
  23. self.ani_right = 400
  24. self.ani_left = -200
  25. self.adjust_mid = {left = 262, right = 446}
  26. self.progress_item = {}
  27. self.progress_con_width = 277--进度条长度
  28. self.fire_change_visible_event = true
  29. self.model = EquipCollectModel:getInstance()
  30. self.tab_all_close = false
  31. self.id = 1
  32. self.is_first = true
  33. self.equip_item_list = {}
  34. --根据策划给的排序规则弄的映射表
  35. self.pos_map_list = {
  36. [1] = EquipModel.EquipType.Weapon,
  37. [2] = EquipModel.EquipType.Head,
  38. [3] = EquipModel.EquipType.Hand,
  39. [4] = EquipModel.EquipType.Body,
  40. [5] = EquipModel.EquipType.Shoulder,
  41. [6] = EquipModel.EquipType.Shoes,
  42. [7] = EquipModel.EquipType.Leg,
  43. }
  44. self.load_callback = function ()
  45. self:LoadSuccess()
  46. end
  47. self.open_callback = function ( )
  48. self:OpenSuccess()
  49. end
  50. self.switch_callback = function(index)
  51. end
  52. self.destroy_callback = function ( )
  53. self:DestroySuccess()
  54. end
  55. end
  56. function EquipCollectView:Open( )
  57. BaseView.Open(self)
  58. end
  59. function EquipCollectView:LoadSuccess()
  60. local nodes = {
  61. --左边
  62. "tabWinCon", "left/left_scroll/Viewport/left_con", "left/left_scroll", "left/left_item_con", "left",
  63. "left/left_bg:raw",
  64. --中间
  65. "mid/role_con", "mid/power_text:txt", "mid",
  66. --右边
  67. "right/active_btn/active_btn_text:tmp", "right/finish_image:obj", "right/progress_bg",
  68. "right/progress_image:img", "right/designation_con:img", "right/desination_power_text:tmp",
  69. "right/active_btn:obj", "right/right_bg:raw", "right/attr_scroll", "right/right_item_con",
  70. "right/active_btn/active_btn_red:obj", "right/attr_scroll/Viewport/attr_con", "right",
  71. "right/progress_con",
  72. }
  73. self:GetChildren(nodes)
  74. self:AddEvent()
  75. local close_callback = function()
  76. self:Close()
  77. end
  78. self.tab_win = UITabWindow.New(self.tabWinCon, nil, select_callback,
  79. close_callback, self.background_wnd, self.container, UITabWindow.SizeLargeNoTab, false,nil,true)
  80. self.tab_win:SetTitleText("装备套装")
  81. lua_resM:setOutsideRawImage(self, self.left_bg_raw, GameResPath.GetViewBigBg("equip_collect_bg_left"), false,func)
  82. lua_resM:setOutsideRawImage(self, self.right_bg_raw, GameResPath.GetViewBigBg("equip_collect_bg_right"), false,func)
  83. self.id, self.sub_id = self.model:GetEquipCollectJumpId()
  84. end
  85. function EquipCollectView:AddEvent()
  86. local function on_click( target )
  87. if target == self.close_btn_obj then
  88. self:Close()
  89. elseif target == self.active_btn_obj then
  90. local cur_data = self.cur_select_data
  91. self.model:Fire(EquipCollectConst.REQUEST_SCMD_EVENT,15220, cur_data[1].id, cur_data[1].sub_id)
  92. end
  93. end
  94. AddClickEvent(self.active_btn_obj, on_click)
  95. local function on_update( ... )
  96. self:UpdateView()
  97. self:UpdateRightInfo()
  98. end
  99. self:BindEvent(self.model,EquipCollectConst.ANS_EQUIP_COLLECT_INFO,on_update)
  100. end
  101. function EquipCollectView:OpenSuccess()
  102. self:UpdateView()
  103. self:UpdateModel()
  104. end
  105. function EquipCollectView:UpdateView()
  106. self:UpdateLeftItems(true)
  107. end
  108. function EquipCollectView:UpdateLeftItems( need_refresh )
  109. self.tab_cfg = self.model:GetEquipCollectCFG()
  110. self.tab_creator = self.tab_creator or self:AddUIComponent(UI.ItemListCreator)
  111. -- 声明点击回调
  112. local data = {}
  113. local type_cfg = Config.Equipmentcollecttype
  114. for i,v in pairsByKeys(self.tab_cfg) do
  115. if type_cfg[i].open_lv <= RoleManager.Instance.mainRoleInfo.level then
  116. for ii,vv in pairsByKeys(v) do
  117. table_insert(data, DeepCopy(vv))
  118. end
  119. end
  120. end
  121. self.tab_data = data
  122. self.cur_select_data = self.tab_cfg[self.id][self.sub_id]
  123. local call_back = function(data, id, sub_id)
  124. self.id = id
  125. self.sub_id = sub_id
  126. self:UpdateLeftItems()
  127. self:UpdateSelectVer()
  128. end
  129. local function final_callback( )
  130. if self.is_first then
  131. self.cur_select_data = self.model:GetEquipCollectCFG(self.id, self.sub_id)
  132. self:UpdateSelectVer(true)
  133. self.is_first = false
  134. end
  135. end
  136. local tag_all_info = {
  137. data_list = data,
  138. item_con = self.left_con,
  139. item_class = EquipCollectLeftItem,
  140. item_height = 113,
  141. start_x = 8,
  142. start_y = -10,
  143. space_y = 20,
  144. scroll_view = self.left_scroll,
  145. create_frequency = 0.01,
  146. final_callback = final_callback,
  147. on_update_item = function(item, i, v)
  148. item:SetData(v, self.id, self.sub_id)
  149. item:SetCallBackFunc(call_back)
  150. end,
  151. }
  152. self.tab_creator:UpdateItems(tag_all_info)
  153. end
  154. --设置垂直tab选择
  155. function EquipCollectView:UpdateSelectVer( need_refresh )
  156. self.tab_creator:IterateItems(function(item, i, v)
  157. item:SetSelect(self.id, self.sub_id)
  158. end)
  159. if need_refresh then
  160. self:ScrollToSelectItem()
  161. end
  162. self:UpdateRightItems()
  163. self:UpdateRightInfo()
  164. end
  165. function EquipCollectView:ScrollToSelectItem( )
  166. for i,v in ipairs(self.tab_data) do
  167. if v[1].id == self.id and v[1].sub_id == self.sub_id then
  168. self.tab_creator:ScrollToItem(i)
  169. end
  170. end
  171. end
  172. --更新右边的装备
  173. function EquipCollectView:UpdateRightItems( )
  174. local y_offset = 135
  175. local data = self.cur_select_data
  176. local server_data = self.model:GetEquipCollectInfo(self.id, self.sub_id)
  177. for i=1,7 do
  178. local item = self.equip_item_list[i]
  179. if not item then
  180. if i%2 == 1 then
  181. item = EquipCollectEquipItem.New(self.left_item_con)
  182. item:SetPosition(-11, -math.floor((i-1)/2)*y_offset-5)
  183. else
  184. item = EquipCollectEquipItem.New(self.right_item_con)
  185. item:SetPosition(-21, -math.floor((i-1)/2)*y_offset-5)
  186. end
  187. self.equip_item_list[i] = item
  188. end
  189. item:SetData(data[self.pos_map_list[i]], index, self.pos_map_list[i], server_data[self.pos_map_list[i]], "equip_collect_base_view")
  190. end
  191. end
  192. --更新右边的属性栏
  193. function EquipCollectView:UpdateRightInfo( )
  194. local cur_data = self.cur_select_data
  195. self.attr_creator = self.attr_creator or self:AddUIComponent(UI.ItemListCreator)
  196. self.attr_creator:Reset()
  197. local cur_progress = self.model:GetEquipCollectProgress(cur_data[1].id, cur_data[1].sub_id)
  198. local cur_active_num = 0
  199. if TableSize(cur_progress) > 0 then
  200. cur_active_num = cur_progress.cur_active
  201. end
  202. local power = 0
  203. if cur_active_num > 0 then
  204. local attr = stringtotable(cur_data[cur_active_num].attr_total)
  205. power = GetFighting(attr)
  206. end
  207. self.power_text_txt.text = power
  208. self.active_btn_red_obj:SetActive(self.model:IsEquipCollectNeedRedById(cur_data[1].id, cur_data[1].sub_id))
  209. local is_all_collect = self.model:CheckIsAllEquipCollected(cur_data[1].id, cur_data[1].sub_id)
  210. self.active_btn_obj:SetActive(not is_all_collect)
  211. self.finish_image_obj:SetActive(is_all_collect)
  212. local cur_attr_list = {}
  213. for i,v in ipairs(cur_data) do
  214. if TableSize(v.attr_list) > 0 then--筛选出有属性加成的才丢进去了
  215. table_insert(cur_attr_list, v)
  216. end
  217. end
  218. local final_space = 10--前后预留的位置
  219. local len = TableSize(cur_attr_list)
  220. local item_width = 32
  221. self.pos_data = self.pos_data or {}
  222. local space_x = (self.progress_con_width - final_space * 2 - item_width) / (len - 1) --算出一个item和间隔的大小
  223. for i,v in ipairs(cur_attr_list) do
  224. local item = self.progress_item[i]
  225. if not item then
  226. item = EquipCollectProgressItem.New(self.progress_con)
  227. self.progress_item[i] = item
  228. self.pos_data[v.pos] = (i - 1)*space_x+final_space + 8--8是小白图到item最左边的距离
  229. item:SetPosition((i - 1)*space_x+final_space, 8 )
  230. end
  231. item:SetData(v,i)
  232. end
  233. --构造位置数据
  234. for i=0,7 do
  235. if i == 0 then
  236. self.pos_data[i] = 0
  237. elseif i == 7 then
  238. self.pos_data[i] = self.progress_con_width
  239. else
  240. if not self.pos_data[i] then
  241. self.pos_data[i] = (self.pos_data[i-1] + self.pos_data[i+1])/2
  242. end
  243. end
  244. end
  245. self.progress_image_img.fillAmount = self.pos_data[cur_active_num]/self.progress_con_width
  246. local sub_cfg = Config.Equipmentcollectsubtype[cur_data[1].id.."@"..cur_data[1].sub_id]
  247. if sub_cfg then
  248. local reward = stringtotable(sub_cfg.reward)
  249. local designation_id = DesignationModel:getInstance():GetDesignationIdByGoodsId(reward[1][2])
  250. local dsgt_cfg = Config.Dsgt
  251. local power = DesignationModel:GetInstance():GetDesignationPowerById(designation_id)
  252. if dsgt_cfg[designation_id] then
  253. lua_resM:setOutsideImageSprite(self, self.designation_con_img, GameResPath.GetDesignImage(designation_id), true)
  254. end
  255. self.desination_power_text_tmp.text = string.format("战力: %s", HtmlColorTxt(power, ColorUtil.YELLOW_DARK))
  256. end
  257. local data = {
  258. data_list = cur_attr_list,
  259. item_con = self.attr_con,
  260. item_class = EquipCollectAttrItem,
  261. item_width = 324,
  262. item_height = 50,
  263. start_x = -20,
  264. start_y = 10,
  265. space_y = 0,
  266. scroll_view = self.attr_scroll,
  267. create_frequency = 0.01,
  268. on_update_item = function(item, i, v)
  269. item:SetData(v, i, cur_active_num)
  270. end,
  271. }
  272. self.attr_creator:UpdateItems(data)
  273. end
  274. function EquipCollectView:UpdateModel( )
  275. local res_data = {
  276. father_node = self,
  277. transform = self.role_con,
  278. fashion_type = FuncOpenModel.TypeId.Clothes,
  279. size = Vector2(720,720),
  280. scale = 250,
  281. ui_model_type = UIModelCommon.ModelType.BackModel,
  282. }
  283. FuncOpenModel:getInstance():SetModelRes(res_data)
  284. end
  285. function EquipCollectView:DestroySuccess( )
  286. if self.tab_win then
  287. self.tab_win:DeleteMe()
  288. self.tab_win = nil
  289. end
  290. if self.money_view then
  291. self.money_view:DeleteMe()
  292. self.money_view = nil
  293. end
  294. for i,v in ipairs(self.progress_item) do
  295. v:DeleteMe()
  296. v = nil
  297. end
  298. self.progress_item = {}
  299. for i,v in ipairs(self.equip_item_list) do
  300. v:DeleteMe()
  301. v = nil
  302. end
  303. self.equip_item_list = {}
  304. end