源战役客户端
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

470 Zeilen
18 KiB

  1. ChatDressSubView = ChatDressSubView or BaseClass(BaseItem)
  2. local ChatDressSubView = ChatDressSubView
  3. local table_insert = table.insert
  4. function ChatDressSubView:__init()
  5. self.base_file = "chatDress"
  6. self.layout_file = "ChatDressSubView"
  7. self.model = ChatDressModel:GetInstance()
  8. self.model:Fire(ChatDressEvent.REQUEST_DRESS_INFO, 1)
  9. self.model:Fire(ChatDressEvent.REQUEST_DRESS_INFO, 2)
  10. self.mainVo = RoleManager.Instance.mainRoleInfo
  11. self.full_screen = true
  12. self.ani_left = -200
  13. self.ani_right = 400
  14. self.adjust_mid = {left = 50, right = 640}
  15. self.tab_data = {
  16. [1] = {name = "头像", id = ChatDressSubType.ROLE_HEAD},
  17. [2] = {name = "相框", id = ChatDressSubType.HEAD},
  18. [3] = {name = "气泡", id = ChatDressSubType.BUBBLE},
  19. }
  20. self.cur_select_index = nil
  21. self.cur_select_tab = nil
  22. self.cur_select_data = nil
  23. self.tab_item_list = {}
  24. self:Load()
  25. end
  26. function ChatDressSubView:Load_callback()
  27. self.nodes = {
  28. "right/item_scroll/Viewport/item_con","right/item_scroll","right/attr_scroll/Viewport/attr_con",
  29. "right/attr_scroll","right/bg:raw","mid/name_text:tmp",
  30. "left/tab_con","mid/power_text:txt","right/btn/btn_red:obj","right/btn/btn_text:tmp","right/btn:obj:imgex",
  31. "mid/holder/bubble_con:img:obj", "mid/holder/head_con:obj", "mid/holder/mid_text:tmp", "mid/holder:obj",
  32. "mid/text:tmp",
  33. -------------------------
  34. "right/wear_btn:obj:img","right/active_image:obj", "right/desc_text:tmp",
  35. --下面的物品消耗
  36. "right/cost_con:obj","right/cost_con/cost_name_text:tmp","right/cost_con/num_text:tmp",
  37. "right/cost_con/cost_item_con",
  38. }
  39. self:GetChildren(self.nodes)
  40. lua_resM:setOutsideRawImage(self,self.bg_raw,GameResPath.GetViewBigBg("designation_bg"),false)
  41. self.award_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem,self.cost_item_con)
  42. self.award_item:SetItemSize(62, 62)
  43. self:StartAction()
  44. self:AddEvents()
  45. if self.need_refreshData then
  46. self:UpdateView()
  47. end
  48. end
  49. function ChatDressSubView:AddEvents( )
  50. local function on_click( target )
  51. if self.btn_obj == target then
  52. if self.active_state == ChatDressModel.AcitiveState.CanActive then
  53. if self.cur_select_data then
  54. if self.cur_select_tab ~= 1 then
  55. self.model:Fire(ChatDressEvent.DRESS_ACTIVATE, self.cur_select_data.dress_id) -- 激活
  56. else
  57. GlobalEventSystem:Fire(EventName.REQ_ACTIVATE_ROLEHEAD, self.cur_select_data.dress_id)
  58. end
  59. end
  60. else
  61. if self.go_active_goods then
  62. UIToolTipMgr:getInstance():AppendGoodsTips(self.go_active_goods, x, y,nil,nil,nil,false,true)
  63. end
  64. end
  65. elseif self.wear_btn_obj == target then
  66. if self.cur_select_data then
  67. if self.cur_select_tab ~= 1 then
  68. local data = {
  69. dress_id = self.cur_select_data.dress_id
  70. }
  71. self.model:Fire(ChatDressEvent.USE_DRESS, data) -- 保存至使用
  72. else
  73. GlobalEventSystem:Fire(EventName.REQ_CHANGE_ROLEHEAD, self.cur_select_data.dress_id)
  74. end
  75. end
  76. end
  77. end
  78. AddClickEvent(self.btn_obj, on_click)
  79. AddClickEvent(self.wear_btn_obj, on_click)
  80. local function on_update_view( )
  81. self.force_update = true
  82. self:UpdateView()
  83. end
  84. self:BindEvent(self.model, ChatDressEvent.DRESS_ACTIVATE_SUCCESS, on_update_view)
  85. local function on_update_wear( )
  86. self:UpdateRightInfo()
  87. end
  88. self:BindEvent(self.model, ChatDressEvent.USE_DRESS_SUCCESS, on_update_view)
  89. end
  90. function ChatDressSubView:UpdateView( )
  91. self:SetTabCon()
  92. self:SetSelectTab(self.cur_select_tab or 1)
  93. end
  94. function ChatDressSubView:UpdateRightItem( )
  95. if not self.item_list_com then
  96. self.item_list_com = self:AddUIComponent(UI.ItemListCreator)
  97. end
  98. if self.need_reset then
  99. self.item_list_com:Reset()
  100. self.need_reset = false
  101. end
  102. local cur_type = self.tab_data[self.cur_select_tab].id
  103. local dress_list_config = self.model:GetChatDressFigure(self.tab_data[self.cur_select_tab].id)
  104. ---------排序
  105. self.dress_list = {}
  106. local list1 = {} -- 可以激活
  107. local list2 = {} -- 已经激活
  108. local list3 = {} -- 未激活且目前不可以激活
  109. for k,v in pairs(dress_list_config) do
  110. if self.model:CanActivate(self.tab_data[self.cur_select_tab].id,v.dress_id) and v.is_default ~= 1 then--默认的排除
  111. table_insert(list1,v)
  112. list1[#list1].can_active = true
  113. list1[#list1].is_active = false
  114. elseif self.model:FindDressIsActive(self.tab_data[self.cur_select_tab].id,v.dress_id) then
  115. table_insert(list2,v)
  116. list2[#list2].is_active = true
  117. list2[#list2].can_active = false
  118. else
  119. --未激活且目前不可激活的 需要判断是否是开放时间
  120. local cur_time = TimeUtil:getServerTime( )
  121. local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
  122. if v.open_time <= cur_time and v.open_day <= open_day then
  123. table_insert(list3,v)
  124. list3[#list3].is_active = false
  125. list3[#list3].can_active = false
  126. end
  127. end
  128. end
  129. local sort_func = function ( a, b )
  130. return a.sequence < b.sequence
  131. end
  132. table.sort(list1, sort_func)
  133. table.sort(list2, sort_func)
  134. table.sort(list3, sort_func)
  135. for k,v in ipairs(list1) do
  136. table_insert(self.dress_list,v)
  137. end
  138. for k,v in ipairs(list2) do
  139. table_insert(self.dress_list,v)
  140. end
  141. for k,v in ipairs(list3) do
  142. table_insert(self.dress_list,v)
  143. end
  144. local jump_info = self.model:GetJumpInfo()
  145. if jump_info then
  146. for i,v in ipairs(self.dress_list) do
  147. if v.dress_id == jump_info then
  148. self.cur_select_index = i
  149. self.cur_select_data = v
  150. end
  151. end
  152. self.model:CleanJumpInfo()
  153. end
  154. if not self.cur_select_index then--没有选中就要选中自己目前穿戴的东西
  155. local wear_id = self.model:GetCurUseDressId(self.tab_data[self.cur_select_tab].id)
  156. for i,v in ipairs(self.dress_list) do
  157. if v.dress_id == wear_id then
  158. self.cur_select_index = i--拿选中的称号配置数据
  159. self.cur_select_data = v--拿选中的称号配置数据
  160. break
  161. end
  162. end
  163. if not self.cur_select_index then
  164. self.cur_select_index = 1
  165. self.cur_select_data = self.dress_list[1]--拿选中的称号配置数据
  166. end
  167. else
  168. if not jump_info then
  169. for i,v in ipairs(self.dress_list) do
  170. if i == self.cur_select_index then
  171. self.cur_select_data = v--拿选中的称号配置数据
  172. break
  173. end
  174. end
  175. end
  176. end
  177. local function call_back( index,data )
  178. self:SetSelectItem(index,data)
  179. end
  180. local function load_all_callback( )
  181. self:SetSelectItem(self.cur_select_index,self.cur_select_data)
  182. end
  183. local info = {
  184. data_list = self.dress_list,
  185. item_con = self.item_con,
  186. item_class = ChatDressItem,
  187. item_width = 114,
  188. item_height = 116,
  189. space_x = 10,
  190. space_y = 10,
  191. start_x = 16,
  192. start_y = -12,
  193. scroll_view = self.item_scroll.transform,
  194. create_frequency = 0,
  195. is_scroll_back_on_update = false,
  196. final_callback = load_all_callback,
  197. on_update_item = function(item, i, v)
  198. item:SetData(i, v, call_back)
  199. item:SetSelect(self.cur_select_index)
  200. end,
  201. }
  202. self.item_list_com:UpdateItems(info)
  203. end
  204. function ChatDressSubView:SetSelectItem( index,data )
  205. self.cur_select_index = index
  206. self.cur_select_data = data
  207. self.item_list_com:IterateItems(function ( item )
  208. item:SetSelect(self.cur_select_index)
  209. end)
  210. self:UpdateRightInfo()
  211. end
  212. function ChatDressSubView:UpdateRightInfo( )
  213. local data = self.cur_select_data
  214. if not data then
  215. print("HWR:ChatDressSubView [163]data: ",data)
  216. return
  217. end
  218. local attr_list = stringtotable(data.dress_starup_attr or data.dress_attr)
  219. self.power_text_txt.text = GetFighting(attr_list,true)
  220. self.desc_text_tmp.text = Trim(data.dress_desc)
  221. self.go_active_goods = data.dress_consume_id
  222. self:ShowDressImg()
  223. if not self.attr_list_com then
  224. self.attr_list_com = self:AddUIComponent(UI.ItemListCreator)
  225. end
  226. local child_names = {
  227. "attr_text:tmp",
  228. }
  229. local info = {
  230. data_list = attr_list,
  231. item_con = self.attr_con,
  232. prefab_ab_name = "chatDress",
  233. prefab_res_name = "ChatDressPropItem",
  234. item_width = 180,
  235. item_height = 28,
  236. space_x = 11,
  237. space_y = 0,
  238. start_x = 20,
  239. start_y = -8,
  240. scroll_view = self.attr_scroll,
  241. create_frequency = 0.05,
  242. is_scroll_back_on_update = false,
  243. child_names = child_names,
  244. on_update_item = function(item, i, v)
  245. self:UpdateAttrItem(item,i,v)
  246. end,
  247. }
  248. self.attr_list_com:UpdateItems(info)
  249. local active_state = nil
  250. self.item_list_com:IterateItems(function ( item )
  251. if data.dress_id == item:GetId() then
  252. active_state = item:GetActiveState()
  253. end
  254. end)
  255. self.active_state = active_state
  256. self.wear_btn_obj:SetActive(self.model:GetCurUseDressId(data.dress_type) ~= data.dress_id)
  257. self.cost_con_obj:SetActive(false)
  258. self.btn_red_obj:SetActive(false)
  259. self.btn_obj:SetActive(false)
  260. self.btn_imgex.gray = false
  261. self.active_image_obj:SetActive(active_state == ChatDressModel.AcitiveState.Actived)--永久激活的就显示这个图片
  262. if active_state == ChatDressModel.AcitiveState.Locked then
  263. self.btn_text_tmp.text = "激活"
  264. self.btn_obj:SetActive(true)
  265. if data.dress_consume_id > 0 then
  266. self.award_item:SetData(data.dress_consume_id,1)
  267. local num = GoodsModel:getInstance():GetTypeGoodsNum(data.dress_consume_id)
  268. local color_str = ColorUtil.RED_DARK
  269. local need_num = 1
  270. if num >= need_num then
  271. color_str = ColorUtil.GREEN_DARK
  272. end
  273. local num_str = string.format("%s/%s", HtmlColorTxt(num, color_str), need_num)
  274. self.num_text_tmp.text = num_str
  275. self.cost_name_text_tmp.text = GoodsModel:getInstance():getGoodsName(data.dress_consume_id, true)
  276. self.cost_con_obj:SetActive(true)
  277. end
  278. elseif active_state == ChatDressModel.AcitiveState.CanActive then
  279. if data.dress_consume_id > 0 then
  280. self.award_item:SetData(data.dress_consume_id,1)
  281. local num = GoodsModel:getInstance():GetTypeGoodsNum(data.dress_consume_id)
  282. local color_str = ColorUtil.RED_DARK
  283. local need_num = 1
  284. if num >= need_num then
  285. color_str = ColorUtil.GREEN_DARK
  286. end
  287. local num_str = string.format("%s/%s", HtmlColorTxt(num, color_str), need_num)
  288. self.num_text_tmp.text = num_str
  289. self.cost_name_text_tmp.text = GoodsModel:getInstance():getGoodsName(data.dress_consume_id, true)
  290. self.cost_con_obj:SetActive(true)
  291. end
  292. self.btn_text_tmp.text = "激活"
  293. self.btn_obj:SetActive(true)
  294. self.btn_red_obj:SetActive(true)
  295. else
  296. self.btn_red_obj:SetActive(false)
  297. self.btn_obj:SetActive(false)
  298. end
  299. end
  300. function ChatDressSubView:UpdateAttrItem(item,i,v)
  301. local _, name, _, val = WordManager:GetPropertyInfo(v[1], v[2])
  302. local str = string.format("%s %s", name, HtmlColorTxt("+"..val, ColorUtil.WHITE_DARK))
  303. item.attr_text_tmp.text = str
  304. end
  305. function ChatDressSubView:SetTabCon( )
  306. local y_offset = 66
  307. local function call_back( index )
  308. self.need_reset = true
  309. self.cur_select_index = nil
  310. self:SetSelectTab(index)
  311. end
  312. for i=1,#self.tab_data do
  313. local item = self.tab_item_list[i]
  314. if not item then
  315. item = ChatDressVerTabItem.New(self.tab_con)
  316. self.tab_item_list[i] = item
  317. end
  318. item:SetData(i,self.tab_data[i], call_back)
  319. item:SetPosition(0, -(i-1) * y_offset)
  320. end
  321. end
  322. function ChatDressSubView:SetSelectTab( index )
  323. if self.cur_select_tab == index and not self.force_update then
  324. return
  325. end
  326. self.force_update = false
  327. for i,v in ipairs(self.tab_item_list) do
  328. v:SetSelect(i == index)
  329. end
  330. self.cur_select_tab = index
  331. self.cur_select_index = nil
  332. -------------------------
  333. -- local list = self.model:GetChatDressFigure(self.tab_data[self.cur_select_tab].id) or {}
  334. -- for i,v in pairsByKeys(list) do
  335. -- if i == self.cur_select_index then
  336. -- self.cur_select_data = v--拿选中的配置数据
  337. -- break
  338. -- end
  339. -- end
  340. -------------------------
  341. self.text_tmp.text = string.format("%s战力", self.tab_data[self.cur_select_tab].name)
  342. self:UpdateRightItem()
  343. self:SetSelectItem(self.cur_select_index, self.cur_select_data)
  344. end
  345. function ChatDressSubView:SetData(index, sub_index )
  346. if sub_index == 0 then--有这个东西 意味着是道具跳转进来的
  347. self.jump_info = self.model:GetJumpInfo()
  348. elseif sub_index then
  349. --跳转到对应页签
  350. self.cur_select_tab = sub_index or self.cur_select_tab
  351. self.force_update = true
  352. end
  353. if TableSize(self.jump_info) > 0 then
  354. self.cur_select_tab = self.jump_info.main_type
  355. self.force_update = true
  356. end
  357. if self.is_loaded then
  358. self.need_refreshData = false
  359. self:UpdateView()
  360. else
  361. self.need_refreshData = true
  362. end
  363. end
  364. function ChatDressSubView:StartAction( )
  365. SetAnchoredPositionY( self.holder.transform, 0 )
  366. local do_up,do_down
  367. function do_up()
  368. self.tween_id1 = TweenLite.to(self, self.holder.transform,TweenLite.UiAnimationType.ANCHORED_POSY,0,2,do_down)
  369. end
  370. function do_down()
  371. self.tween_id2 = TweenLite.to(self, self.holder.transform,TweenLite.UiAnimationType.ANCHORED_POSY,20,2,do_up)
  372. end
  373. do_down()
  374. end
  375. function ChatDressSubView:ShowDressImg()
  376. local data = self.cur_select_data
  377. if not data then
  378. return
  379. end
  380. local type = self.tab_data[self.cur_select_tab].id
  381. local dress_id = data.dress_id
  382. self.bubble_con_obj:SetActive(type == ChatDressSubType.BUBBLE)
  383. self.head_con_obj:SetActive(type ~= ChatDressSubType.BUBBLE)
  384. self.name_text_tmp.text = data.dress_name
  385. if type == ChatDressSubType.BUBBLE then
  386. -- self.mid_text_tmp.text = HtmlColorTxt(data.dress_desc, ColorUtil.GREEN_DARK)
  387. SetSizeDelta(self.bubble_con, 400, 100)
  388. -- SetSizeDelta(self.bubble_con, self.mid_text_tmp.preferredWidth + 50, self.mid_text_tmp.preferredHeight + 30)
  389. -- ---不同框的偏移
  390. -- local addTable = Config.ConfigChatDress.Pos[tostring(dress_id)]
  391. -- SetSizeDeltaX(self.bubble_con, GetSizeDeltaX(self.bubble_con) + addTable.size_x )
  392. -- SetSizeDeltaY(self.bubble_con, GetSizeDeltaY(self.bubble_con) + addTable.size_y )
  393. if dress_id then -- 0为后端传来的空
  394. lua_resM:setOutsideImageSprite(self, self.bubble_con_img, GameResPath.GetChatDressIcon(dress_id), false)
  395. end
  396. elseif type == ChatDressSubType.HEAD then
  397. self.mid_text_tmp.text = ""
  398. if not self.mainRoleHeadItem then
  399. self.mainRoleHeadItem = HeadRoleItem.New(self.head_con)
  400. self.mainRoleHeadItem:SetItemSize(200,200)
  401. end
  402. local head_data = {
  403. vo = {id = self.mainVo.role_id, use_bg = 3, career = 0, sex = self.mainVo.sex, turn = self.mainVo.turn, dress_board_id = dress_id, profile_photo_id = self.mainVo.profile_photo_id},
  404. }
  405. self.mainRoleHeadItem:SetData(head_data)
  406. elseif type == ChatDressSubType.ROLE_HEAD then
  407. self.mid_text_tmp.text = ""
  408. if not self.mainRoleHeadItem then
  409. self.mainRoleHeadItem = HeadRoleItem.New(self.head_con)
  410. self.mainRoleHeadItem:SetItemSize(200,200)
  411. end
  412. local head_data = {
  413. vo = {id = self.mainVo.role_id, use_bg = 3, career = 0, sex = self.mainVo.sex, turn = self.mainVo.turn, dress_board_id = self.mainVo.dress_board, profile_photo_id = dress_id},
  414. }
  415. self.mainRoleHeadItem:SetData(head_data)
  416. end
  417. end
  418. function ChatDressSubView:__delete( )
  419. if not self.model.is_enter_view then --刷一次红点
  420. self.model.is_enter_view = true
  421. WardrobeModel:GetInstance():Fire(WardrobeConst.UPDATE_RED_DOT, WardrobeConst.TabId.DRESS)
  422. end
  423. for i,v in ipairs(self.tab_item_list) do
  424. v:DeleteMe()
  425. v = nil
  426. end
  427. self.tab_item_list = {}
  428. if self.on_update_view_id then
  429. self.model:UnBind(self.on_update_view_id)
  430. self.on_update_view_id = nil
  431. end
  432. if self.on_update_wear_id then
  433. self.model:UnBind(self.on_update_wear_id)
  434. self.on_update_wear_id = nil
  435. end
  436. if self.tween_id1 then
  437. TweenLite.Stop(self.tween_id1)
  438. self.tween_id1 = nil
  439. end
  440. if self.tween_id2 then
  441. TweenLite.Stop(self.tween_id2)
  442. self.tween_id2 = nil
  443. end
  444. if self.mainRoleHeadItem then
  445. self.mainRoleHeadItem:DeleteMe()
  446. self.mainRoleHeadItem = nil
  447. end
  448. end