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

317 рядки
12 KiB

1 місяць тому
  1. SelectSysRoleHeadView = SelectSysRoleHeadView or BaseClass(BaseView)
  2. local table_insert = table.insert
  3. local table_sort = table.sort
  4. function SelectSysRoleHeadView:__init()
  5. self.base_file = "newMainRole"
  6. self.layout_file = "SelectSysRoleHeadView"
  7. self.layer_name = "Activity"
  8. -- self.use_local_view = true
  9. self.use_background = true
  10. self.is_set_zdepth = true
  11. self.is_delay_callback = false
  12. self.change_scene_close = true
  13. self.blur_activity_bg = true
  14. self.select_photo_id = false -- 当前选中的头像图片id
  15. self.select_can_activate = false -- 当前选中的头像是否满足激活条件(针对运营头像)
  16. self.item_list = {}
  17. self.cur_select_head = nil
  18. self.mainVo = RoleManager.Instance.mainRoleInfo
  19. self.model = NewMainRoleModel:getInstance()
  20. self.load_callback = function()
  21. self:LoadSuccess()
  22. self:InitEvent()
  23. end
  24. self.open_callback = function()
  25. self:UpdateView()
  26. end
  27. self.destroy_callback = function()
  28. self:Remove()
  29. end
  30. end
  31. function SelectSysRoleHeadView:Remove()
  32. if self.tween_id1 then
  33. TweenLite.Stop(self.tween_id1)
  34. self.tween_id1 = nil
  35. end
  36. if self.tween_id2 then
  37. TweenLite.Stop(self.tween_id2)
  38. self.tween_id2 = nil
  39. end
  40. if self.update_view_id then
  41. self.model:UnBind(self.update_view_id)
  42. self.update_view_id = nil
  43. end
  44. if self.change_head_success_id then
  45. RoleManager.Instance.mainRoleInfo:UnBind(self.change_head_success_id)
  46. self.change_head_success_id = nil
  47. end
  48. self.select_photo_id = false
  49. for _, v in pairs(self.item_list) do
  50. v:DeleteMe()
  51. end
  52. self.item_list = {}
  53. if self.cur_select_head then
  54. self.cur_select_head:DeleteMe()
  55. self.cur_select_head = nil
  56. end
  57. if self.cost_icon then
  58. UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.cost_icon)
  59. end
  60. self.cost_icon = nil
  61. if self.tabWindowComponent then
  62. self.tabWindowComponent:DeleteMe()
  63. end
  64. self.tabWindowComponent = nil
  65. end
  66. function SelectSysRoleHeadView:LoadSuccess()
  67. local node ={
  68. "content",
  69. -- 头像相关
  70. "content/headScroll","content/headScroll/Viewport/headCon", "content/container_head/cur_head:raw",
  71. "content/confirmBtn:obj:img", "content/confirmBtn/comfirmBtn_str:tmp","content/container_head",
  72. -- 属性相关
  73. "content/attr_1:obj","content/attr_1/attr1_val:tmp","content/attr_1/attr1_name:tmp",
  74. "content/attr_2:obj","content/attr_2/attr2_val:tmp","content/attr_2/attr2_name:tmp",
  75. "content/attr_3:obj","content/attr_3/attr3_val:tmp","content/attr_3/attr3_name:tmp",
  76. -- 消耗道具相关
  77. "content/icon_name:tmp", "content/icon_num:tmp", "content/icon_con:obj", "content/activateBtn:obj",
  78. -- 其他
  79. "content/unlock_bg:obj", "content/con_fight/fight_num:txt", "content/unlock_bg2:obj",
  80. "content/unlock_bg/unlock_condition:tmp", "content/unlock_bg/unlock_condition/goto_btn:obj",
  81. "content/head_name:tmp", "content/head_name2:tmp", "content/head_des:tmp",
  82. }
  83. self:GetChildren(node)
  84. self.cost_icon = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.icon_con)
  85. self.cost_icon:SetItemSize(78, 78)
  86. self.cost_icon:SetPosition(0, 0)
  87. self.icon_con_obj:SetActive(false)
  88. SetLocalScale(self.cur_head.transform, 0.97,0.97,0.97)
  89. local function close_callback()
  90. self:Close()
  91. end
  92. self.tabWindowComponent = UITabWindow.New(self.transform, {}, nil, close_callback, self.background_wnd, self.content, UITabWindow.SizeSmallNoTab, "select_head_bg", nil, true)
  93. self.tabWindowComponent:SetTitleText("头像选择")
  94. self.tabWindowComponent:SetBackgroundRes("select_role_head_bg")
  95. self:StartAction()
  96. end
  97. function SelectSysRoleHeadView:StartAction( )
  98. -------------------------
  99. SetAnchoredPositionY( self.container_head.transform, 45 )
  100. local do_up,do_down
  101. function do_up()
  102. self.tween_id1 = TweenLite.to(self, self.container_head.transform,TweenLite.UiAnimationType.ANCHORED_POSY,45,2,do_down)
  103. end
  104. function do_down()
  105. self.tween_id2 = TweenLite.to(self, self.container_head.transform,TweenLite.UiAnimationType.ANCHORED_POSY,32,2,do_up)
  106. end
  107. do_down()
  108. end
  109. function SelectSysRoleHeadView:Open()
  110. BaseView.Open(self)
  111. end
  112. function SelectSysRoleHeadView:InitEvent()
  113. local function btnClickFunc(target, x, y)
  114. if target == self.confirmBtn_obj then -- 更换头像
  115. if self.select_photo_id then
  116. if self.select_photo_id == self.mainVo.profile_photo_id then
  117. return
  118. else
  119. GlobalEventSystem:Fire(EventName.REQ_CHANGE_ROLEHEAD, self.select_photo_id)
  120. end
  121. end
  122. elseif target == self.activateBtn_obj then -- 激活头像
  123. if self.select_photo_id then
  124. if self.select_can_activate then
  125. GlobalEventSystem:Fire(EventName.REQ_ACTIVATE_ROLEHEAD, self.select_photo_id)
  126. else
  127. UIToolTipMgr:getInstance():AppendGoodsTips(self.select_photo_id, x, y, nil,nil,nil,nil,true)
  128. end
  129. end
  130. elseif target == self.goto_btn_obj then
  131. self:OnTurnGotoBtnClick()
  132. end
  133. end
  134. AddClickEvent(self.confirmBtn_obj, btnClickFunc)
  135. AddClickEvent(self.activateBtn_obj, btnClickFunc)
  136. AddClickEvent(self.goto_btn_obj, btnClickFunc)
  137. local function update_view()
  138. self:UpdateView(self.mainVo.profile_photo_id)
  139. end
  140. self.change_head_success_id = self.mainVo:BindOne("profile_photo_id", update_view)
  141. end
  142. function SelectSysRoleHeadView:UpdateView(photo_id)
  143. local list = self.model:GetRoleHeadInfo()
  144. local function call_func(index)
  145. self.select_photo_id = list[index].photo_id
  146. self.head_item_creator:IterateItems(function(item, i)
  147. item:SetSelect(item.index == index)
  148. end)
  149. self:UpdateCurSelectHead(list[index])
  150. end
  151. -- 更新当前的头像选中索引
  152. photo_id = photo_id or self.select_photo_id or self.mainVo.profile_photo_id
  153. local selected_index
  154. for k, v in pairs(list) do
  155. if v.photo_id == photo_id then
  156. selected_index = k
  157. break
  158. end
  159. end
  160. self.head_item_creator = self.head_item_creator or self:AddUIComponent(UI.ItemListCreator)
  161. local info = {
  162. data_list = list,
  163. item_con = self.headCon,
  164. scroll_view = self.headScroll,
  165. item_class = RoleHeadShowItem,
  166. item_height = 119,
  167. item_width = 119,
  168. start_x = 15,
  169. start_y = -10,
  170. space_x = 5,
  171. space_y = 7.25,
  172. create_frequency = 0.01,
  173. alignment = UnityEngine.TextAnchor.UpperLeft,
  174. on_update_item = function(item, i, v)
  175. item:SetData(i, v, call_func)
  176. item:SetSelect(item.index == selected_index)
  177. end,
  178. }
  179. self.head_item_creator:UpdateItems(info)
  180. -- 更新选中的头像数据
  181. if photo_id ~= 0 then
  182. for k, v in pairs(list) do
  183. if v.photo_id == photo_id then
  184. call_func(k)
  185. break
  186. end
  187. end
  188. else
  189. call_func(1)
  190. end
  191. end
  192. -- 更新当前选中的头像
  193. function SelectSysRoleHeadView:UpdateCurSelectHead(data)
  194. self.cur_selected_data = data
  195. -- 更换头像资源
  196. lua_resM:setOutsideRawImage(self, self.cur_head_raw, GameResPath.GetHeadIcon(self.select_photo_id), true)
  197. local unlock_str = ""
  198. local career_list = stringtotable(data.career)
  199. if data.status ~= 2 then -- 如果头像未激活
  200. if #career_list == 1 and career_list[1] ~= 0 then -- 职业列表为1且不为0代表转职获得的头像
  201. unlock_str = "完成第"..data.turn.."次觉醒后激活"
  202. else
  203. unlock_str = "运营活动获得"
  204. end
  205. end
  206. self.unlock_condition_tmp.text = unlock_str
  207. -- 激活了的头像展示替换按钮
  208. self.confirmBtn_obj:SetActive(data.status == 2)
  209. self.unlock_bg2_obj:SetActive(data.status == 2)
  210. -- 拥有可激活的通用头像则显示激活
  211. self.activateBtn_obj:SetActive(data.status ~= 2 and not data.is_rein_head)
  212. self.unlock_bg_obj:SetActive(data.status == 0 and data.is_rein_head)
  213. self.head_name_tmp.text = Trim(data.name)
  214. self.head_name2_tmp.text = GoodsModel:getInstance():getGoodsName(data.photo_id, true, true)
  215. self.head_des_tmp.text = data.desc
  216. if data.attr_list then
  217. local attr_list = stringtotable(data.attr_list)
  218. for k, v in ipairs(attr_list) do
  219. local attr_name = WordManager:GetProperties(v[1])
  220. self["attr"..k.."_name_tmp"].text = attr_name
  221. self["attr"..k.."_val_tmp"].text = "+" .. v[2]
  222. end
  223. self.attr_1_obj:SetActive(#attr_list>0)
  224. self.attr_2_obj:SetActive(#attr_list>1)
  225. self.attr_3_obj:SetActive(#attr_list>2)
  226. self.fight_num_txt.text = GetFighting(attr_list,data.status == 2)
  227. else
  228. self.attr_1_obj:SetActive(false)
  229. self.attr_2_obj:SetActive(false)
  230. self.attr_3_obj:SetActive(false)
  231. self.fight_num_txt.text = 0
  232. end
  233. -- 更新确认按钮
  234. self:UpdateComfirmBtn()
  235. -- 更新激活道具
  236. self:UpdateActivateGoods(data)
  237. end
  238. -- 更新确认按钮文本内容
  239. function SelectSysRoleHeadView:UpdateComfirmBtn( )
  240. self.comfirmBtn_str_tmp.text = self.select_photo_id and self.select_photo_id == self.mainVo.profile_photo_id and "当前头像" or "更换"
  241. local is_gray = self.select_photo_id and self.select_photo_id == self.mainVo.profile_photo_id
  242. SetImageGray( self.confirmBtn_img, is_gray )
  243. SetTMPSharedMaterial(self.comfirmBtn_str_tmp, is_gray and ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn or ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn)
  244. end
  245. -- 前往转生任务
  246. function SelectSysRoleHeadView:OnTurnGotoBtnClick( )
  247. -- 当前的转职任务可以进行
  248. local turn, lv = self.mainVo.turn, self.mainVo.level
  249. local target_turn = self.cur_selected_data and self.cur_selected_data.turn
  250. -- 转职数跨度超过1
  251. if target_turn - turn > 1 then
  252. Message.show("请完成前置觉醒任务")
  253. return
  254. end
  255. -- 转职数跨度为1
  256. local rein_model = ReincarnationModel:getInstance()
  257. local stage_cfg = rein_model:GetReinLvStageData(target_turn)
  258. local stage = self.mainVo.turn_stage
  259. -- 保险起见,更新一下当前转职任务
  260. rein_model:UpdateCurReinTask()
  261. -- 先判断是否有进行中的转职任务否则获取可接任务
  262. local task_vo = rein_model:GetCurTaskVo() or TaskModel:getInstance():GetTaskByType(TaskType.TRUN_LINE)
  263. if task_vo then
  264. TaskModel:getInstance():TaskClickFun(task_vo)
  265. GlobalEventSystem:Fire(EventName.CLOSE_NEW_MAIN_ROLE_VIEW)
  266. self:Close()
  267. return
  268. end
  269. stage = stage == 0 and stage + 1 or stage
  270. -- 如果当前没有任务,则进行等级提升提示
  271. for k, v in pairs(stage_cfg) do
  272. if v.stage == stage then
  273. if lv < v.need_lev then -- 转职数跨度为1,但是到下一阶段任务的等级不足
  274. local str = string.format("请提升至%s", v.need_lev .. "")
  275. Message.show(str)
  276. return
  277. end
  278. end
  279. end
  280. end
  281. function SelectSysRoleHeadView:UpdateActivateGoods(data)
  282. if data.status ~= 2 and not data.is_rein_head then
  283. local cost_list = stringtotable(data.cost_list)[1]
  284. self.cost_icon:SetData(cost_list[1], cost_list[2])
  285. self.icon_con_obj:SetActive(true)
  286. -- self.cost_icon:SetVisible(true)
  287. self.icon_name_tmp.text = GoodsModel:getInstance():getGoodsName(data.photo_id, true, true)
  288. local goods_num_inbag = GoodsModel:getInstance():GetTypeGoodsNum(cost_list[1])
  289. self.select_can_activate = goods_num_inbag >= cost_list[2]
  290. self.icon_num_tmp.text = string.format("<color=%s>%s</color>/%s",
  291. self.select_can_activate and ColorUtil.GREEN_DARK or ColorUtil.RED_DARK,
  292. goods_num_inbag, cost_list[2])
  293. else
  294. self.icon_name_tmp.text = ""
  295. self.icon_num_tmp.text = ""
  296. self.icon_con_obj:SetActive(false)
  297. -- self.cost_icon:SetVisible(false)
  298. end
  299. end