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

411 行
14 KiB

  1. EquipExamBossView = EquipExamBossView or BaseClass(BaseItem)
  2. local EquipExamBossView = EquipExamBossView
  3. local MODEL_PARAM = {
  4. OFFSET_X = 0,
  5. OFFSET_Y = 130,
  6. SCALE = 100,
  7. }
  8. local SHOW_LEFT_ITEM_COUNT = 4
  9. function EquipExamBossView:__init()
  10. self.base_file = "equipCollect"
  11. self.layout_file = "EquipExamBossView"
  12. self.model = EquipCollectModel:GetInstance()
  13. self.boss_model = BossModel:GetInstance()
  14. self.item_list = {}
  15. self.selfkill_award_item_list = {}
  16. self.firstblood_award_item_list = {}
  17. self.model:Fire(EquipCollectConst.REQUEST_SCMD_EVENT,14501)
  18. self.content_y = 0
  19. self.ReOpen_callback = function ( )
  20. self:UpdateModelInfo(true)
  21. end
  22. self:Load()
  23. end
  24. function EquipExamBossView:Load_callback()
  25. self.nodes = {
  26. "bg:raw",
  27. "lb_first_kill_tip:tmp", "btn_go:obj:img",
  28. "lb_kill_tip:tmp", "lb_first_kill_title:tmp", "con_model",
  29. "btn_up_arrow:obj:img", "con_kill_award:obj",
  30. "pic_title:obj:img", "lb_first_kill_info:tmp",
  31. "lb_boss_name:tmp", "con_first_kill_award:obj",
  32. "lb_kill_title:tmp", "btn_down_arrow:obj:img",
  33. "btn_red_packet:obj:img", "scroll_boss/Viewport/con_content:obj",
  34. "scroll_boss:scroll", "pic_model_bg:img", "btn_go/lb_btn_go:tmp",
  35. "lb_first_kill_time:tmp",
  36. "btn_up_arrow/btn_up_arrow_red:obj", "btn_down_arrow/btn_down_arrow_red:obj",
  37. }
  38. self:GetChildren(self.nodes)
  39. lua_resM:setOutsideRawImage(self,self.bg_raw, GameResPath.GetViewBigBg("equip_collect_bos_bg"),false)
  40. self.lb_kill_title_tmp.text = "击杀奖励"
  41. self.lb_first_kill_title_tmp.text = "首杀奖励"
  42. self.lb_first_kill_tip_tmp.text = "注:首杀奖励将通过邮件发放"
  43. self.lb_kill_tip_tmp.text = "BOSS为祸四方,快去击杀它!"
  44. self.lb_btn_go_tmp.text = "前往击杀"
  45. SetAnchoredPositionY(self.con_model, -72)
  46. self.SCROLL_BOSS_SHOW_HEIGHT = GetSizeDeltaY(self.scroll_boss)
  47. self:MoveUIToBack(self.pic_model_bg_img)
  48. self:AddEvents()
  49. if self.need_refreshData then
  50. self:UpdateView()
  51. end
  52. end
  53. function EquipExamBossView:AddEvents( )
  54. local on_click = function ( click_obj )
  55. if self.btn_go_obj == click_obj then
  56. local boss_cfg = self.boss_model:GetMoneyBossConf( self.select_boss_id ) -- 赏金配置
  57. if boss_cfg.enter_lv > RoleManager.Instance.mainRoleInfo.level then
  58. Message.show(string.format('%s级解锁', boss_cfg.enter_lv))
  59. return
  60. end
  61. if self.select_boss_id then
  62. self.model:Fire(EquipCollectConst.OPEN_EC_MAIN_VIEW, false)
  63. GlobalEventSystem:Fire(EventName.OPEN_BOSS_VIEW, Config.ConfigBoss.ModuleId.Money, self.select_boss_id)
  64. end
  65. elseif self.btn_red_packet_obj == click_obj then
  66. local boss_first_blood_data = self.model:GetBossData( self.select_boss_id ) -- 首杀后端数据
  67. local can_get = boss_first_blood_data.server_award_status and boss_first_blood_data.server_award_status == 0 and boss_first_blood_data.time > 0 -- 可领未领
  68. self.model:Fire(EquipCollectConst.OPEN_RED_PACKET_VIEW, true, self.select_boss_id, not can_get)
  69. elseif self.btn_up_arrow_obj == click_obj then
  70. self:ScrollDownOrUp()
  71. elseif self.btn_down_arrow_obj == click_obj then
  72. self:ScrollDownOrUp(true)
  73. end
  74. end
  75. AddClickEvent(self.btn_go_obj, on_click)
  76. AddClickEvent(self.btn_red_packet_obj, on_click)
  77. AddClickEvent(self.btn_up_arrow_obj, on_click)
  78. AddClickEvent(self.btn_down_arrow_obj, on_click)
  79. local update_view = function(boss_id)
  80. if self.select_boss_id and boss_id and boss_id ~= self.select_boss_id then
  81. return
  82. end
  83. self:UpdateView()
  84. end
  85. self:BindEvent(self.model, EquipCollectConst.UPDATE_BOSS_VIEW, update_view)
  86. local function clockFun()
  87. self:UpdateTimeInfo()
  88. end
  89. self.close_time_id = self.close_time_id or GlobalTimerQuest:AddPeriodQuest(clockFun, 1, -1)
  90. end
  91. function EquipExamBossView:UpdateView( )
  92. self.boss_list_data = self.model:GetBossLeftTabData()
  93. local select_callback = function(boss_id)
  94. if boss_id and boss_id > 0 then
  95. self.select_boss_id = boss_id
  96. self.tab_item_list:IterateItems(function( item, i )
  97. item:SetSelect(self.select_boss_id)
  98. end)
  99. self:UpdateBossInfo(boss_id)
  100. end
  101. end
  102. -- for i,v in ipairs(self.boss_list_data) do
  103. -- self.item_list[i] = self.item_list[i] or EquipExamBossItem.New(self.con_content)
  104. -- local item = self.item_list[i]
  105. -- item:SetData(v.boss_id, i, select_callback)
  106. -- item:SetSelect(self.select_boss_id)
  107. -- end
  108. -- 更新页签红点缓存
  109. self.model:UpdateBossLeftBtnRed( )
  110. local update_arrow = function()
  111. self:UpdateArrowObj()
  112. end
  113. self.tab_item_list = self.tab_item_list or self:AddUIComponent(UI.ItemListCreator)
  114. local data = {
  115. data_list = self.boss_list_data or {},
  116. item_con = self.con_content,
  117. item_class = EquipExamBossItem,
  118. item_width = 100,
  119. item_height = EquipExamBossItem.ITEM_HEIGHT,
  120. space_y = EquipExamBossItem.SPACE_Y,
  121. start_x = 5,
  122. start_y = 0,
  123. scroll_view = self.scroll_boss,
  124. on_scroll = update_arrow,
  125. -- create_frequency = 0.10,
  126. on_update_item = function(item, i, v)
  127. item:SetData(i, v, select_callback)
  128. item:SetSelect(self.select_boss_id)
  129. end,
  130. }
  131. self.tab_item_list:UpdateItems(data)
  132. self.PER_ITEM_HEIGHT = EquipExamBossItem.ITEM_HEIGHT + EquipExamBossItem.SPACE_Y
  133. self.CONTENT_SIZE_Y = #self.boss_list_data * self.PER_ITEM_HEIGHT - EquipExamBossItem.SPACE_Y
  134. self:UpdateArrowObj()
  135. local boss_id, index
  136. if not self.select_boss_id then
  137. boss_id, index = self.model:GetFirstCanKillBossIdAndIndex()
  138. self.select_boss_id = boss_id
  139. end
  140. self:CheckSelectId( )
  141. select_callback(self.select_boss_id)
  142. if index then
  143. self.tab_item_list:ScrollToItem(index)
  144. end
  145. end
  146. function EquipExamBossView:ScrollDownOrUp( is_down )
  147. if not self.tab_item_list then return end
  148. if is_down then
  149. self.tab_item_list:ScrollToItem(#self.model:GetBossLeftTabData())
  150. else
  151. self.tab_item_list:ScrollToItem(1)
  152. end
  153. end
  154. function EquipExamBossView:UpdateBossInfo()
  155. if not self.select_boss_id then return end
  156. local boss_cfg = self.boss_model:GetMoneyBossConf( self.select_boss_id ) -- 赏金配置
  157. local boss_first_blood_cfg = self.model:GetBossFirstBloodCfg( self.select_boss_id ) --首杀配置
  158. local boss_first_blood_data = self.model:GetBossData( self.select_boss_id ) -- 首杀后端数据
  159. self:UpdateModelInfo()
  160. -- print('=======Msh:EquipExamBossView.lua[125] ===TABLE====')
  161. -- PrintTable(boss_first_blood_data)
  162. self.lb_boss_name_tmp.text = string.format('Lv.%s %s', boss_cfg.enter_lv, boss_cfg.boss_name)
  163. if boss_first_blood_data.killer and boss_first_blood_data.killer ~= "" then
  164. self.lb_first_kill_info_tmp.text = boss_first_blood_data.killer
  165. self.lb_first_kill_time_tmp.text = "首杀时间:" .. TimeUtil:timeConversion(boss_first_blood_data.time, 'mm-dd hh:MM:ss')
  166. SetAnchoredPositionY(self.lb_first_kill_info, 15)
  167. else
  168. self.lb_first_kill_info_tmp.text = HtmlColorTxt( "暂无首杀玩家", "#A1C1E1")
  169. self.lb_first_kill_time_tmp.text = ""
  170. SetAnchoredPositionY(self.lb_first_kill_info, 5)
  171. end
  172. local firstkill_reward_list = stringtotable(boss_first_blood_cfg.server_first_award)
  173. local kill_reward_list = stringtotable(boss_first_blood_cfg.self_first_award)
  174. -- 首杀奖励
  175. -- local get_callback = function ( )
  176. -- if boss_first_blood_data.server_award_status and boss_first_blood_data.server_award_status == 0 and boss_first_blood_data.time > 0 then
  177. -- self.model:Fire(EquipCollectConst.REQUEST_SCMD_EVENT, 14502,self.select_boss_id, 1)
  178. -- end
  179. -- end
  180. local has_get_firstkill_reward = boss_first_blood_data.killer and boss_first_blood_data.time > 0
  181. for i,v in ipairs(firstkill_reward_list) do
  182. self.firstblood_award_item_list[i] = self.firstblood_award_item_list[i] or EquipExamBossAwardItem.New(self.con_first_kill_award)
  183. local get_status = has_get_firstkill_reward and 2 or 0
  184. self.firstblood_award_item_list[i]:SetData(v, nil, get_status)
  185. end
  186. -- 自己的击杀奖励
  187. local get_callback = function ( )
  188. if boss_first_blood_data.self_kill_status == 1 then
  189. self.model:Fire(EquipCollectConst.REQUEST_SCMD_EVENT, 14502,self.select_boss_id, 2)
  190. end
  191. end
  192. for i,v in ipairs(kill_reward_list) do
  193. self.selfkill_award_item_list[i] = self.selfkill_award_item_list[i] or EquipExamBossAwardItem.New(self.con_kill_award)
  194. self.selfkill_award_item_list[i]:SetData(v, get_callback, boss_first_blood_data.self_kill_status)
  195. end
  196. -- 红包按钮
  197. local can_get = boss_first_blood_data.server_award_status and boss_first_blood_data.server_award_status == 0 and boss_first_blood_data.time > 0 -- 可领未领
  198. local red_btn_show = boss_first_blood_data.time and boss_first_blood_data.time > 0
  199. self.btn_red_packet_obj:SetActive(red_btn_show)
  200. if can_get then
  201. self:SetRedPacketShakeAnim( )
  202. else
  203. self:RemoveAllCCAction()
  204. end
  205. -- 按钮状态
  206. if boss_cfg.enter_lv > RoleManager.Instance.mainRoleInfo.level then
  207. SetImageGray(self.btn_go_img, true)
  208. SetTMPSharedMaterial(self.lb_btn_go_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
  209. self.lb_btn_go_tmp.text = string.format('%s级解锁', boss_cfg.enter_lv)
  210. else
  211. SetImageGray(self.btn_go_img, false)
  212. SetTMPSharedMaterial(self.lb_btn_go_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn)
  213. self.lb_btn_go_tmp.text = "前往击杀"
  214. end
  215. -- boss存活状态
  216. self:UpdateTimeInfo()
  217. end
  218. function EquipExamBossView:SetRedPacketShakeAnim( )
  219. self:RemoveAllCCAction()
  220. if not self.action9 then
  221. local action1 = cc.RotateTo.New(0.1, 15, 1)
  222. local action2 = cc.RotateTo.New(0.1, -15, 1)
  223. local action3 = cc.RotateTo.New(0.1, 0, 1)
  224. local action7 = cc.DelayTime.New( 1 )
  225. local action8 = cc.Sequence.New( action1,action2,action1,action2,action1,action2,action3,action7)--顺序
  226. self.action9 = cc.RepeatForever.New( action8 )
  227. self:AddAction(self.action9, self.btn_red_packet)
  228. end
  229. end
  230. function EquipExamBossView:RemoveAllCCAction( )
  231. cc.ActionManager:getInstance():removeAction(self.action9)
  232. SetLocalRotation(self.btn_red_packet)
  233. self.action9 = nil
  234. end
  235. function EquipExamBossView:UpdateTimeInfo( )
  236. if not self.is_loaded then return end
  237. local boss_data = self.boss_model:GetMoneyBossInfo()[self.select_boss_id]
  238. if not boss_data then return end
  239. local curTime = TimeUtil:getServerTime()
  240. local is_die = boss_data.reborn_time ~= 0 and boss_data.reborn_time > curTime
  241. if is_die then
  242. local temp = boss_data.reborn_time - curTime
  243. self.lb_kill_tip_tmp.text = string.format( "距离BOSS复活:%s",
  244. HtmlColorTxt( TimeUtil:convertTimeWithoutHour(temp), ColorUtil.GREEN_DARK) )
  245. else
  246. self.lb_kill_tip_tmp.text = "BOSS为祸四方,快去击杀它!"
  247. end
  248. end
  249. function EquipExamBossView:UpdateModelInfo( force )
  250. self:CheckSelectId()
  251. -- if self.first_open then return end--开界面不加载两次动画
  252. if not self.is_loaded then return end
  253. -------------------------
  254. --Boss形象
  255. local monster = ConfigItemMgr.Instance:GetMonsterDataItem(self.select_boss_id)
  256. if not monster then
  257. print('----LZR BossMoneySubView.lua -- 没有找到怪物配置=')
  258. return
  259. end
  260. -------------------------
  261. --BOSS展示的时候的第一次播放的动作
  262. local aciton_list = {"show2","show", idle_name="show",loopList=false}
  263. local pos = EquipCollectConst.ModelPos[self.select_boss_id] or {0,0}
  264. if not self.last_boss_id or self.last_boss_id~=self.select_boss_id or force then
  265. local function delay( )
  266. if self._use_delete_method then return end
  267. local res_data = {
  268. clothe_res_id = monster.icon,
  269. --weapon_res_id = monster.weapon_id,
  270. type = SceneBaseType.Monster,
  271. action_name_list = aciton_list,
  272. layer_name = "UI",
  273. father_node = self,
  274. transform = self.con_model,
  275. rotate = Vector3(0,180,0),
  276. fashion_type = FuncOpenModel.TypeId.Monster,
  277. position = Vector3(pos[1] + MODEL_PARAM.OFFSET_X, pos[2] + MODEL_PARAM.OFFSET_Y, 0),
  278. shadow2_plane_pos = Vector4(0, 10, 0, 1),
  279. scale = MODEL_PARAM.SCALE,
  280. ui_model_type = UIModelCommon.ModelType.BackModel,
  281. show_shadow = false,
  282. use_green_screen = true,
  283. green_screen_camera_type = 3, -- camera_type:1 主摄像机 2 UI摄像机 3 UIModel摄像机
  284. }
  285. FuncOpenModel:getInstance():SetModelRes(res_data)
  286. end
  287. setTimeout(delay,0.05)
  288. end
  289. self.last_boss_id = self.select_boss_id
  290. end
  291. function EquipExamBossView:CheckSelectId( )
  292. --检查选中Id是否符合规范
  293. if (not self.select_boss_id) or (self.select_boss_id == 0) then
  294. --默认选择
  295. self.select_boss_id = self.model:GetBossLeftTabData()[1].boss_id
  296. elseif not self.boss_model:GetMoneyBossConf(self.select_boss_id) then
  297. self.select_boss_id = self.model:GetBossLeftTabData()[1].boss_id
  298. end
  299. end
  300. -- 更新箭头红点
  301. function EquipExamBossView:UpdateArrowObj( )
  302. if self.boss_list_data and #self.boss_list_data > SHOW_LEFT_ITEM_COUNT then
  303. local _, y = GetAnchoredPosition(self.con_content)
  304. local per_height = self.PER_ITEM_HEIGHT
  305. self.btn_down_arrow_obj:SetActive(y < (#self.boss_list_data - SHOW_LEFT_ITEM_COUNT - 0.5) * per_height)
  306. self.btn_up_arrow_obj:SetActive(y > per_height * 0.5)
  307. self:UpdateArrowBtnRedDot(y)
  308. else
  309. self.btn_up_arrow_obj:SetActive(false)
  310. self.btn_down_arrow_obj:SetActive(false)
  311. end
  312. end
  313. -- 更新箭头红点显示
  314. function EquipExamBossView:UpdateArrowBtnRedDot( content_y )
  315. if not self.boss_list_data then return end
  316. local content_y = content_y or self.content_y
  317. self.content_y = content_y
  318. local hide_size_y_down = self.CONTENT_SIZE_Y - content_y - self.SCROLL_BOSS_SHOW_HEIGHT -- 处于下方的隐藏中content的高度
  319. local hide_size_y_up = content_y -- 上方的高度
  320. local hide_count_down = math.floor( hide_size_y_down / self.PER_ITEM_HEIGHT )
  321. local hide_count_up = math.ceil( hide_size_y_up / self.PER_ITEM_HEIGHT )
  322. -- 检查红点 隐藏中的Item的红点
  323. local bool_down, bool_up = false, false
  324. for i = #self.boss_list_data - hide_count_down + 1, #self.boss_list_data do
  325. if self.model:GetBossLeftBtnRed(i) then
  326. bool_down = true
  327. break
  328. end
  329. end
  330. for i = 1, hide_count_up do
  331. if self.model:GetBossLeftBtnRed(i) then
  332. bool_up = true
  333. break
  334. end
  335. end
  336. self.btn_down_arrow_red_obj:SetActive(bool_down)
  337. self.btn_up_arrow_red_obj:SetActive(bool_up)
  338. end
  339. function EquipExamBossView:SetData( data )
  340. self.data = data
  341. if self.is_loaded then
  342. self.need_refreshData = false
  343. self:UpdateView()
  344. else
  345. self.need_refreshData = true
  346. end
  347. end
  348. function EquipExamBossView:__delete( )
  349. for k,v in pairs(self.item_list) do
  350. v:DeleteMe()
  351. end
  352. self.item_list = {}
  353. for k,v in pairs(self.firstblood_award_item_list) do
  354. v:DeleteMe()
  355. end
  356. self.firstblood_award_item_list = {}
  357. for k,v in pairs(self.selfkill_award_item_list) do
  358. v:DeleteMe()
  359. end
  360. self.selfkill_award_item_list = {}
  361. self:RemoveAllCCAction()
  362. if self.close_time_id then
  363. GlobalTimerQuest:CancelQuest(self.close_time_id)
  364. self.close_time_id = nil
  365. end
  366. end