EquipExamBossView = EquipExamBossView or BaseClass(BaseItem) local EquipExamBossView = EquipExamBossView local MODEL_PARAM = { OFFSET_X = 0, OFFSET_Y = 130, SCALE = 100, } local SHOW_LEFT_ITEM_COUNT = 4 function EquipExamBossView:__init() self.base_file = "equipCollect" self.layout_file = "EquipExamBossView" self.model = EquipCollectModel:GetInstance() self.boss_model = BossModel:GetInstance() self.item_list = {} self.selfkill_award_item_list = {} self.firstblood_award_item_list = {} self.model:Fire(EquipCollectConst.REQUEST_SCMD_EVENT,14501) self.content_y = 0 self.ReOpen_callback = function ( ) self:UpdateModelInfo(true) end self:Load() end function EquipExamBossView:Load_callback() self.nodes = { "bg:raw", "lb_first_kill_tip:tmp", "btn_go:obj:img", "lb_kill_tip:tmp", "lb_first_kill_title:tmp", "con_model", "btn_up_arrow:obj:img", "con_kill_award:obj", "pic_title:obj:img", "lb_first_kill_info:tmp", "lb_boss_name:tmp", "con_first_kill_award:obj", "lb_kill_title:tmp", "btn_down_arrow:obj:img", "btn_red_packet:obj:img", "scroll_boss/Viewport/con_content:obj", "scroll_boss:scroll", "pic_model_bg:img", "btn_go/lb_btn_go:tmp", "lb_first_kill_time:tmp", "btn_up_arrow/btn_up_arrow_red:obj", "btn_down_arrow/btn_down_arrow_red:obj", } self:GetChildren(self.nodes) lua_resM:setOutsideRawImage(self,self.bg_raw, GameResPath.GetViewBigBg("equip_collect_bos_bg"),false) self.lb_kill_title_tmp.text = "击杀奖励" self.lb_first_kill_title_tmp.text = "首杀奖励" self.lb_first_kill_tip_tmp.text = "注:首杀奖励将通过邮件发放" self.lb_kill_tip_tmp.text = "BOSS为祸四方,快去击杀它!" self.lb_btn_go_tmp.text = "前往击杀" SetAnchoredPositionY(self.con_model, -72) self.SCROLL_BOSS_SHOW_HEIGHT = GetSizeDeltaY(self.scroll_boss) self:MoveUIToBack(self.pic_model_bg_img) self:AddEvents() if self.need_refreshData then self:UpdateView() end end function EquipExamBossView:AddEvents( ) local on_click = function ( click_obj ) if self.btn_go_obj == click_obj then local boss_cfg = self.boss_model:GetMoneyBossConf( self.select_boss_id ) -- 赏金配置 if boss_cfg.enter_lv > RoleManager.Instance.mainRoleInfo.level then Message.show(string.format('%s级解锁', boss_cfg.enter_lv)) return end if self.select_boss_id then self.model:Fire(EquipCollectConst.OPEN_EC_MAIN_VIEW, false) GlobalEventSystem:Fire(EventName.OPEN_BOSS_VIEW, Config.ConfigBoss.ModuleId.Money, self.select_boss_id) end elseif self.btn_red_packet_obj == click_obj then local boss_first_blood_data = self.model:GetBossData( self.select_boss_id ) -- 首杀后端数据 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 -- 可领未领 self.model:Fire(EquipCollectConst.OPEN_RED_PACKET_VIEW, true, self.select_boss_id, not can_get) elseif self.btn_up_arrow_obj == click_obj then self:ScrollDownOrUp() elseif self.btn_down_arrow_obj == click_obj then self:ScrollDownOrUp(true) end end AddClickEvent(self.btn_go_obj, on_click) AddClickEvent(self.btn_red_packet_obj, on_click) AddClickEvent(self.btn_up_arrow_obj, on_click) AddClickEvent(self.btn_down_arrow_obj, on_click) local update_view = function(boss_id) if self.select_boss_id and boss_id and boss_id ~= self.select_boss_id then return end self:UpdateView() end self:BindEvent(self.model, EquipCollectConst.UPDATE_BOSS_VIEW, update_view) local function clockFun() self:UpdateTimeInfo() end self.close_time_id = self.close_time_id or GlobalTimerQuest:AddPeriodQuest(clockFun, 1, -1) end function EquipExamBossView:UpdateView( ) self.boss_list_data = self.model:GetBossLeftTabData() local select_callback = function(boss_id) if boss_id and boss_id > 0 then self.select_boss_id = boss_id self.tab_item_list:IterateItems(function( item, i ) item:SetSelect(self.select_boss_id) end) self:UpdateBossInfo(boss_id) end end -- for i,v in ipairs(self.boss_list_data) do -- self.item_list[i] = self.item_list[i] or EquipExamBossItem.New(self.con_content) -- local item = self.item_list[i] -- item:SetData(v.boss_id, i, select_callback) -- item:SetSelect(self.select_boss_id) -- end -- 更新页签红点缓存 self.model:UpdateBossLeftBtnRed( ) local update_arrow = function() self:UpdateArrowObj() end self.tab_item_list = self.tab_item_list or self:AddUIComponent(UI.ItemListCreator) local data = { data_list = self.boss_list_data or {}, item_con = self.con_content, item_class = EquipExamBossItem, item_width = 100, item_height = EquipExamBossItem.ITEM_HEIGHT, space_y = EquipExamBossItem.SPACE_Y, start_x = 5, start_y = 0, scroll_view = self.scroll_boss, on_scroll = update_arrow, -- create_frequency = 0.10, on_update_item = function(item, i, v) item:SetData(i, v, select_callback) item:SetSelect(self.select_boss_id) end, } self.tab_item_list:UpdateItems(data) self.PER_ITEM_HEIGHT = EquipExamBossItem.ITEM_HEIGHT + EquipExamBossItem.SPACE_Y self.CONTENT_SIZE_Y = #self.boss_list_data * self.PER_ITEM_HEIGHT - EquipExamBossItem.SPACE_Y self:UpdateArrowObj() local boss_id, index if not self.select_boss_id then boss_id, index = self.model:GetFirstCanKillBossIdAndIndex() self.select_boss_id = boss_id end self:CheckSelectId( ) select_callback(self.select_boss_id) if index then self.tab_item_list:ScrollToItem(index) end end function EquipExamBossView:ScrollDownOrUp( is_down ) if not self.tab_item_list then return end if is_down then self.tab_item_list:ScrollToItem(#self.model:GetBossLeftTabData()) else self.tab_item_list:ScrollToItem(1) end end function EquipExamBossView:UpdateBossInfo() if not self.select_boss_id then return end local boss_cfg = self.boss_model:GetMoneyBossConf( self.select_boss_id ) -- 赏金配置 local boss_first_blood_cfg = self.model:GetBossFirstBloodCfg( self.select_boss_id ) --首杀配置 local boss_first_blood_data = self.model:GetBossData( self.select_boss_id ) -- 首杀后端数据 self:UpdateModelInfo() -- print('=======Msh:EquipExamBossView.lua[125] ===TABLE====') -- PrintTable(boss_first_blood_data) self.lb_boss_name_tmp.text = string.format('Lv.%s %s', boss_cfg.enter_lv, boss_cfg.boss_name) if boss_first_blood_data.killer and boss_first_blood_data.killer ~= "" then self.lb_first_kill_info_tmp.text = boss_first_blood_data.killer self.lb_first_kill_time_tmp.text = "首杀时间:" .. TimeUtil:timeConversion(boss_first_blood_data.time, 'mm-dd hh:MM:ss') SetAnchoredPositionY(self.lb_first_kill_info, 15) else self.lb_first_kill_info_tmp.text = HtmlColorTxt( "暂无首杀玩家", "#A1C1E1") self.lb_first_kill_time_tmp.text = "" SetAnchoredPositionY(self.lb_first_kill_info, 5) end local firstkill_reward_list = stringtotable(boss_first_blood_cfg.server_first_award) local kill_reward_list = stringtotable(boss_first_blood_cfg.self_first_award) -- 首杀奖励 -- local get_callback = function ( ) -- 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 -- self.model:Fire(EquipCollectConst.REQUEST_SCMD_EVENT, 14502,self.select_boss_id, 1) -- end -- end local has_get_firstkill_reward = boss_first_blood_data.killer and boss_first_blood_data.time > 0 for i,v in ipairs(firstkill_reward_list) do self.firstblood_award_item_list[i] = self.firstblood_award_item_list[i] or EquipExamBossAwardItem.New(self.con_first_kill_award) local get_status = has_get_firstkill_reward and 2 or 0 self.firstblood_award_item_list[i]:SetData(v, nil, get_status) end -- 自己的击杀奖励 local get_callback = function ( ) if boss_first_blood_data.self_kill_status == 1 then self.model:Fire(EquipCollectConst.REQUEST_SCMD_EVENT, 14502,self.select_boss_id, 2) end end for i,v in ipairs(kill_reward_list) do self.selfkill_award_item_list[i] = self.selfkill_award_item_list[i] or EquipExamBossAwardItem.New(self.con_kill_award) self.selfkill_award_item_list[i]:SetData(v, get_callback, boss_first_blood_data.self_kill_status) end -- 红包按钮 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 -- 可领未领 local red_btn_show = boss_first_blood_data.time and boss_first_blood_data.time > 0 self.btn_red_packet_obj:SetActive(red_btn_show) if can_get then self:SetRedPacketShakeAnim( ) else self:RemoveAllCCAction() end -- 按钮状态 if boss_cfg.enter_lv > RoleManager.Instance.mainRoleInfo.level then SetImageGray(self.btn_go_img, true) SetTMPSharedMaterial(self.lb_btn_go_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn) self.lb_btn_go_tmp.text = string.format('%s级解锁', boss_cfg.enter_lv) else SetImageGray(self.btn_go_img, false) SetTMPSharedMaterial(self.lb_btn_go_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn) self.lb_btn_go_tmp.text = "前往击杀" end -- boss存活状态 self:UpdateTimeInfo() end function EquipExamBossView:SetRedPacketShakeAnim( ) self:RemoveAllCCAction() if not self.action9 then local action1 = cc.RotateTo.New(0.1, 15, 1) local action2 = cc.RotateTo.New(0.1, -15, 1) local action3 = cc.RotateTo.New(0.1, 0, 1) local action7 = cc.DelayTime.New( 1 ) local action8 = cc.Sequence.New( action1,action2,action1,action2,action1,action2,action3,action7)--顺序 self.action9 = cc.RepeatForever.New( action8 ) self:AddAction(self.action9, self.btn_red_packet) end end function EquipExamBossView:RemoveAllCCAction( ) cc.ActionManager:getInstance():removeAction(self.action9) SetLocalRotation(self.btn_red_packet) self.action9 = nil end function EquipExamBossView:UpdateTimeInfo( ) if not self.is_loaded then return end local boss_data = self.boss_model:GetMoneyBossInfo()[self.select_boss_id] if not boss_data then return end local curTime = TimeUtil:getServerTime() local is_die = boss_data.reborn_time ~= 0 and boss_data.reborn_time > curTime if is_die then local temp = boss_data.reborn_time - curTime self.lb_kill_tip_tmp.text = string.format( "距离BOSS复活:%s", HtmlColorTxt( TimeUtil:convertTimeWithoutHour(temp), ColorUtil.GREEN_DARK) ) else self.lb_kill_tip_tmp.text = "BOSS为祸四方,快去击杀它!" end end function EquipExamBossView:UpdateModelInfo( force ) self:CheckSelectId() -- if self.first_open then return end--开界面不加载两次动画 if not self.is_loaded then return end ------------------------- --Boss形象 local monster = ConfigItemMgr.Instance:GetMonsterDataItem(self.select_boss_id) if not monster then print('----LZR BossMoneySubView.lua -- 没有找到怪物配置=') return end ------------------------- --BOSS展示的时候的第一次播放的动作 local aciton_list = {"show2","show", idle_name="show",loopList=false} local pos = EquipCollectConst.ModelPos[self.select_boss_id] or {0,0} if not self.last_boss_id or self.last_boss_id~=self.select_boss_id or force then local function delay( ) if self._use_delete_method then return end local res_data = { clothe_res_id = monster.icon, --weapon_res_id = monster.weapon_id, type = SceneBaseType.Monster, action_name_list = aciton_list, layer_name = "UI", father_node = self, transform = self.con_model, rotate = Vector3(0,180,0), fashion_type = FuncOpenModel.TypeId.Monster, position = Vector3(pos[1] + MODEL_PARAM.OFFSET_X, pos[2] + MODEL_PARAM.OFFSET_Y, 0), shadow2_plane_pos = Vector4(0, 10, 0, 1), scale = MODEL_PARAM.SCALE, ui_model_type = UIModelCommon.ModelType.BackModel, show_shadow = false, use_green_screen = true, green_screen_camera_type = 3, -- camera_type:1 主摄像机 2 UI摄像机 3 UIModel摄像机 } FuncOpenModel:getInstance():SetModelRes(res_data) end setTimeout(delay,0.05) end self.last_boss_id = self.select_boss_id end function EquipExamBossView:CheckSelectId( ) --检查选中Id是否符合规范 if (not self.select_boss_id) or (self.select_boss_id == 0) then --默认选择 self.select_boss_id = self.model:GetBossLeftTabData()[1].boss_id elseif not self.boss_model:GetMoneyBossConf(self.select_boss_id) then self.select_boss_id = self.model:GetBossLeftTabData()[1].boss_id end end -- 更新箭头红点 function EquipExamBossView:UpdateArrowObj( ) if self.boss_list_data and #self.boss_list_data > SHOW_LEFT_ITEM_COUNT then local _, y = GetAnchoredPosition(self.con_content) local per_height = self.PER_ITEM_HEIGHT self.btn_down_arrow_obj:SetActive(y < (#self.boss_list_data - SHOW_LEFT_ITEM_COUNT - 0.5) * per_height) self.btn_up_arrow_obj:SetActive(y > per_height * 0.5) self:UpdateArrowBtnRedDot(y) else self.btn_up_arrow_obj:SetActive(false) self.btn_down_arrow_obj:SetActive(false) end end -- 更新箭头红点显示 function EquipExamBossView:UpdateArrowBtnRedDot( content_y ) if not self.boss_list_data then return end local content_y = content_y or self.content_y self.content_y = content_y local hide_size_y_down = self.CONTENT_SIZE_Y - content_y - self.SCROLL_BOSS_SHOW_HEIGHT -- 处于下方的隐藏中content的高度 local hide_size_y_up = content_y -- 上方的高度 local hide_count_down = math.floor( hide_size_y_down / self.PER_ITEM_HEIGHT ) local hide_count_up = math.ceil( hide_size_y_up / self.PER_ITEM_HEIGHT ) -- 检查红点 隐藏中的Item的红点 local bool_down, bool_up = false, false for i = #self.boss_list_data - hide_count_down + 1, #self.boss_list_data do if self.model:GetBossLeftBtnRed(i) then bool_down = true break end end for i = 1, hide_count_up do if self.model:GetBossLeftBtnRed(i) then bool_up = true break end end self.btn_down_arrow_red_obj:SetActive(bool_down) self.btn_up_arrow_red_obj:SetActive(bool_up) end function EquipExamBossView:SetData( data ) self.data = data if self.is_loaded then self.need_refreshData = false self:UpdateView() else self.need_refreshData = true end end function EquipExamBossView:__delete( ) for k,v in pairs(self.item_list) do v:DeleteMe() end self.item_list = {} for k,v in pairs(self.firstblood_award_item_list) do v:DeleteMe() end self.firstblood_award_item_list = {} for k,v in pairs(self.selfkill_award_item_list) do v:DeleteMe() end self.selfkill_award_item_list = {} self:RemoveAllCCAction() if self.close_time_id then GlobalTimerQuest:CancelQuest(self.close_time_id) self.close_time_id = nil end end