|
|
- -- <*
- -- @Author: Saber
- -- @Description: 经验挂机 主界面
- -- *>
- ExpHangupMainView = ExpHangupMainView or BaseClass(BaseView)
- local ExpHangupMainView = ExpHangupMainView
- local ExpDunAnimConst = ExpDunAnimConst
- local SetAnchoredPosition = SetAnchoredPosition
- local TweenLite = TweenLite
- local SetLocalScale = SetLocalScale
- local cc = cc
- local GlobalTimerQuest = GlobalTimerQuest
- local math_random = math.random
- local Status = Status
- local GoodsModel = GoodsModel
-
- function ExpHangupMainView:__init()
- self.base_file = "expDun"
- self.layout_file = "ExpHangupMainView"
- self.layer_name = "UI"
- self.destroy_imm = true
- self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置
- self.hide_maincancas = true
- self.append_to_ctl_queue = false
- -- self.blur_activity_bg = true
- self.use_show_anim = true
- self.use_hide_anim = true
- self:AddPreLoadList("expDun", {"ExpHangupMonModelItem"})
- self.model = ExpDunModel:getInstance()
- self.dun_model = BaseDungeonModel:getInstance()
- self.main_role = RoleManager.Instance.mainRoleInfo
- self.is_set_zdepth = true
-
- self.cur_page = 1 -- 当前选中的章节
- self.cur_page_index = 1 -- 当前选中的章节
- self.limit_page = 1 -- 限制查看的章节数
- self.total_pages = 0
- self.page_limit_lv = 0
- self.first_load_route = true
- self.route_item = {}
- self.expdun_route_update_func = nil
- -- 模型动画相关参数
- self.bg_roll_uvRect = self.model.main_bg_roll_uvRect
- self.bg_roll_back_uvRect = self.model.main_bg_roll_back_uvRect
- self.role_skill_list = nil -- 当前职业和性别使用的技能列表缓存
- self.last_anim_mon_id = nil
- -- 新 宝 岛
- self.anim_stage = 1 -- 当前动画阶段 1为移动阶段,2为战斗阶段,3为战斗结束后的奖励表现和等待阶段
- self.temp_stage_data = nil -- 临时动画数据资源,第一次打开界面获取,使用一次后删除
- self.role_ran_pos = ExpDunAnimConst.RoleRamPos
- self.mon_id_list = ExpDunAnimConst.AnimMonList
- self.role_pos_origin = Vector2(-270, 0) -- 玩家模型坐标原点
- self.mon_stage_data = {} -- 怪物阶段数据
- self.mon_model_list = nil
- self.has_play_effect_time = 0 -- 第几次播放终结动画
- self.last_slay_effect_time = Status.NowTime
- self.role_mod_pos_offset = nil -- 模型起点偏移
- self.launch_pos_offset = nil -- 发射坐标偏移
- self.clicked_enhance_btn = false
- self.load_callback = function ()
- self:LoadSuccess()
- self:AddEvent()
- -- lua_soundM:PlayBackgroundSound("dungeon4", LuaSoundManager.SOUND_TYPE.SCENE, true)
- end
- self.open_callback = function ( )
- self:UpdateView()
- end
- self.destroy_callback = function ( )
- self:DestroySuccess()
- -- --播放场景背景音乐
- -- local cur_scene = SceneManager:getInstance():GetSceneId()
- -- lua_soundM:PlayBackground(cur_scene)
- end
- end
-
- function ExpHangupMainView:Open(need_show_guide, need_show_offline_con)
- --self.data = data
- self.need_show_guide = need_show_guide
- self.need_show_offline_con = need_show_offline_con
- BaseView.Open(self)
- end
-
- function ExpHangupMainView:LoadSuccess()
- local nodes = {
- -- 动画相关
- -- 2020年6月24日新增 bullet_slay_con, 专门用来处理终结弹幕表现
- "anim_node",
- "anim_node/role_con:obj:raw",
- "anim_node/mon_con", "anim_node/hp_con", "anim_node/bullet_con", "anim_node/bullet_slay_con", -- (三个大小完全一样的动画节点,用来区分层级)
- "anim_reward_con1", "anim_reward_con2", "anim_reward_con3",
- -- 背景相关
- "anim_bg:raw", "close:obj",
- "anim_node/bg_roll_mask:raw",
- "anim_node/bg_roll_mask/bg_roll:raw",
- "anim_node/bg_roll_mask/bg_roll_back:raw",
- "help_btn:obj",
- "route_bg:raw",
- -- 其他
- "buy_btn:obj:imgex", -- 快速挂机购买界面按钮
- "buy_timer:tmp", -- 快速挂机冷却相关
- "reward_icon_btn:obj:img", -- 放置挂机领取按钮
- "hang_receive_tip:obj", -- 放置挂机奖励领取提示
- "challenge_btn:obj:img", -- 打开副本主入口界面
- "challenge_btn/challenge_lb:tmp",
- "sweep_btn:obj", -- 扫荡按钮
- "sweep_btn/sweep_lb:tmp",
- "sweep_btn/sweep_btn_red:obj",
- -- "ques_con:obj",
- -- "dun_name:tmp", -- 当前副本名称
- "eff_val:tmp", -- 副本效率
- "reward_icon_lb:tmp",
- -- 红点
- "challenge_btn/challenge_red:obj", "buy_btn/buy_btn_red:obj","buy_btn/buy_btn_effect", "reward_icon_btn/reward_icon_btn_red:obj",
- -- 2021年3月11日 第六版改动新增 合并副本进度
- "enhance_btn:obj",
- "rec_power_bg",
- "rec_power_bg/rec_power_icon:img",
- "rec_power_bg/rec_power:tmp",
- -- "route_scroll:scroll:cg",
- -- "route_scroll/Viewport/route_con", -- 路线容器
- "route_con:cg", -- 路线容器
- "award_con:obj",
- "arrow_left:obj",
- "arrow_left/arrow_left_red:img",
- "arrow_right:obj:img",
- "arrow_right/arrow_right_red:img",
- -- 2021年5月11日 第七版改动新增 波数排行
- "exp_wave_rank_btn:obj",
- -- 2021年7月8日新增 追加章节查看限制
- "route_limit_bg:obj",
- "route_limit_bg/route_limit_icon",
- "route_limit_bg/route_limit_lb:tmp",
- --buff相关
- "buffText:tmp:obj", "buffImg:obj",
- }
- self:GetChildren(nodes)
- SetAnchoredPositionX(self.role_con, 9999) -- 加载模型前移出屏幕外
- local mask_x, mask_y = GetSizeDeltaXY(self.bg_roll_mask)
- SetSizeDelta(self.bg_roll_mask, mask_x * 0.99, mask_y * 0.99)
- for i = 1, 3 do
- self["award_item" .. i] = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self["anim_reward_con" .. i])
- self["award_item" .. i]:SetAnchoredPosition(0, 0)
- self["award_item" .. i]:SetItemSize(59, 59)
- self["award_item" .. i]:SetVisible(false)
- self["award_item" .. i]:SetData(100007)
- end
-
- lua_resM:setOutsideRawImage(self, self.anim_bg_raw, GameResPath.GetViewBigBg("exp_anim_bg"))
- lua_resM:setOutsideRawImage(self, self.route_bg_raw, GameResPath.GetViewBigBg("exp_route_bg"))
- -- self.bg_roll_mask_raw.color = Color(1, 1, 1, 1 / 255)
- -- lua_resM:setOutsideRawImage(self, self.bg_roll_mask_raw, GameResPath.GetViewBigBg("expDun_anim_mask"))
- -- local function bg_roll_callback()
- -- self.bg_roll_raw.uvRect = self.bg_roll_uvRect
- -- end
- -- lua_resM:setOutsideRawImage(self, self.bg_roll_raw, GameResPath.GetViewBigBg("expDun_rollBg_1446_558"), false, bg_roll_callback)
- -- self.route_con_cg.alpha = 1
- self:AddToStageHandler()
-
- local buff_kind = OperateActivityModel.MaterialSubmitBuffKind.ADVENTURE_EXP_UP--触发加成后,玩家每分钟放置冒险经验收益提升100%(增对初始数值计算)
- local buff_cfg,buff_info = OperateActivityModel:getInstance():GetMaterialBuffInfoByKind(buff_kind)
- local buff_str = ""
- -- buff_info = {etime = TimeUtil:getServerTime( )+300}
- -- buff_cfg = {data = 100}
- self.add_buff_exp_str = ""
- if buff_cfg and buff_info then
- local sec = buff_info.etime - TimeUtil:getServerTime( )
- if sec > 0 then
- self.buffText_tmp.text = "放置倍速 生效期间生效期间提升效率<color=#2cf89a>"
- self.add_buff_exp_str = HtmlColorTxt("+"..buff_cfg.data.."%", ColorUtil.ORANGE_DARK)
- self.buffImg_obj:SetActive(true)
- else
- self.buffText_tmp.text = ""
- self.buffImg_obj:SetActive(false)
- end
- else
- self.buffText_tmp.text = ""
- self.buffImg_obj:SetActive(false)
- end
-
-
- if self.need_show_guide then --打开界面强制播放聚焦特效
- self:AddUIEffect("ui_jujiaodianji", self.challenge_btn, self.layer_name, nil, 1, true)
- end
- if OperateActivityModel:getInstance().boss_drop_act then --打开界面强制播放聚焦特效
- self:AddUIEffect("ui_jujiaodianji", self.buy_btn_effect, self.layer_name, nil, 1, true)
- end
- end
-
- function ExpHangupMainView:AddEvent()
- local function click_event(target, x, y)
- if target == self.close_obj then
- self:Close()
- elseif target == self.sweep_btn_obj then -- 扫荡
- self.dun_model:Fire(BaseDungeonModel.REQUEST_CCMD_EVENT, 61130)
- elseif target == self.challenge_btn_obj then -- 打开副本主入口界面
- -- self.model:Fire(ExpDunModel.OPEN_EXP_DUN_MAIN_VIEW, true)
- -- local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_EXP_DUNGEON,3)
- -- if helpVo then
- -- GlobalEventSystem:Fire(EventName.FINISH_CURRENT_HELP_STEP,helpVo)
- -- end
- if self.expdun_can_enter_flag then
- self.dun_model:Fire(BaseDungeonModel.REQUEST_CCMD_EVENT, 61001, BaseDungeonModel.EXP_DUN_ID)
- else
- Message.show("未达到挑战要求,请提升后再来吧~", "fault")
- end
- -- self.model:Fire(ExpDunModel.OPEN_EXP_HANGUP_MAIN_VIEW, false)
- -- self:Close()
- elseif target == self.reward_icon_btn_obj then -- 挂机奖励领取
- -- local condition = Config.Modulesub["610@16"].open_lv
- -- local lv = self.main_role.level
- -- if condition > lv then
- -- local str = string.format("%s级开放", condition)
- -- Message.show(str, "fault")
- -- else
- -- self.dun_model:Fire(BaseDungeonModel.REQUEST_CCMD_EVENT, 61050, 0, 0)
- -- end
- self.model:Fire(ExpDunModel.CHECK_OPEN_HANGUP_RECEIVE_VIEW)
- elseif target == self.help_btn_obj then -- 挂机玩法查询
- GlobalEventSystem:Fire(EventName.OPEN_INSTRUCTION_VIEW, "610@2")
- elseif target == self.buy_btn_obj then -- 快速挂机按钮
- OperateActivityModel:getInstance().boss_drop_act = false
- self:ClearUIEffect(self.buy_btn_effect)
- -- 2020年3月28日新增 快速挂机区分等级开放
- local condition = Config.Modulesub["610@15"].open_lv
- local lv = self.main_role.level
- if condition > lv then
- local str = string.format("%s级开放", condition)
- Message.show(str, "fault")
- else
- self.model:Fire(ExpDunModel.OPEN_QUICK_HANGUP_VIEW, true)
- end
- elseif target == self.arrow_right_obj then
- -- 追加限制,限制页码后不可以查看后续章节
- local target_page_index = self.limit_page < self.total_pages and self.limit_page or self.total_pages
- if self.cur_page_index + 1 <= target_page_index then
- self:ScrollToTargetPage(self.cur_page_index + 1)
- else
- Message.show("解锁当前章节后可浏览", "fault")
- end
- elseif target == self.arrow_left_obj then
- if self.cur_page_index - 1 > 0 then
- self:ScrollToTargetPage(self.cur_page_index - 1)
- end
- elseif target == self.enhance_btn_obj then -- 提升按钮,点击弹出引导
- if not self.clicked_enhance_btn then
- self.clicked_enhance_btn = true
- self:AddUIEffect("ui_jujiaodianji", self.challenge_btn, self.layer_name, nil, 1, true)
- end
- elseif target == self.exp_wave_rank_btn_obj then -- 波数排行界面
- self.model:Fire(ExpDunModel.OPEN_WAVE_RANK_VIEW, true)
- elseif target == self.buffText_obj then -- buff相关
- local buff_kind = OperateActivityModel.MaterialSubmitBuffKind.ADVENTURE_EXP_UP --伤害结算计算BUFF加成,对BOSS伤害提高10%,BOSS对人物伤害降低10%
- local buff_cfg,buff_info,dot = OperateActivityModel:getInstance():GetMaterialBuffInfoByKind(buff_kind)
- if buff_cfg and buff_info then
- local abs_pos = target.transform:TransformPoint(Vector3.zero)
- local sub_type = CustomActivityModel:getInstance():getActMinSubType(CustomActivityModel.CustomActBaseType.MATERIAL_SUBMIT)
- local act_list = CustomActivityModel:getInstance():getActList(CustomActivityModel.CustomActBaseType.MATERIAL_SUBMIT, sub_type)
- if act_list then
- local buff_data = nil
- for k,v in pairs(act_list.condition_list) do--[{role_lv,80},{sub,1},{cost,30},{group,5}]
- if v[1] == "suit" then--全服进度套件ID
- buff_data = OperateActivityModel:getInstance():GetMaterialSubmitServerCfg(tonumber(v[2]),dot)
- break
- end
- end
- if buff_data then
- local data = {
- sub_type = sub_type,
- buff_data = buff_data,
- pos_x = abs_pos.x,
- pos_y = abs_pos.y,
- is_outside = true,
- }
- OperateActivityModel:getInstance():Fire(OperateActivityModel.OPEN_MATERIAL_SUBMIT_BUFF_VIEW,data)
- end
- end
- end
- end
- end
- AddClickEvent(self.close_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
- AddClickEvent(self.sweep_btn_obj, click_event)
- AddClickEvent(self.challenge_btn_obj, click_event)
- AddClickEvent(self.reward_icon_btn_obj, click_event)
- AddClickEvent(self.help_btn_obj, click_event)
- AddClickEvent(self.buy_btn_obj, click_event)
- AddClickEvent(self.arrow_right_obj, click_event)
- AddClickEvent(self.arrow_left_obj, click_event)
- AddClickEvent(self.enhance_btn_obj, click_event)
- AddClickEvent(self.exp_wave_rank_btn_obj, click_event)
- AddClickEvent(self.buffText_obj, click_event)
-
-
- -- 经验副本奖励状态的上次领取时间更新
- local function update_expdun_reward_icon(red_type)
- self:UpdateHangupRewardIconStage()
- end
- self:BindEvent(self.model, ExpDunModel.UPDATE_HANGUP_RECEIVE_TIME, update_expdun_reward_icon)
-
- -- 更新扫荡或挑战按钮状态
- local function update_sweep_or_challenge_status(dun_type)
- if dun_type and dun_type == BaseDungeonModel.DUN_TYPE.EXP then
- self:UpdateSweepOrChallengeStatus()
- end
- end
- self:BindEvent(self.dun_model, BaseDungeonModel.UPDATE_DUN_BASE_INFO, update_sweep_or_challenge_status)
-
- local function update_expdun_offline_red(red_type)
- if not red_type or red_type == ExpDunModel.Red_Type.Offline then
- self:UpdateHangupRewardIconStage()
- end
- end
- self:BindEvent(self.model, ExpDunModel.UPDATE_EXP_RED_BY_REDTYPE, update_expdun_offline_red)
-
- -- 当挂机效率更新时刷新一次
- local function on_update_hangup_ratio()
- self:UpdateDunWaveData()
- end
- self:BindEvent(self.model, ExpDunModel.UPDATE_HANGUP_RATIO, on_update_hangup_ratio)
-
- -- 领取玩快速挂机后刷新
- local function refresh_quick_hangup_timer()
- self:UpdateQuickHangupTimer()
- end
- self:BindEvent(self.model, ExpDunModel.UPDATE_QUICKHANGUP_DATA, refresh_quick_hangup_timer)
-
- local function update_challenge_red(red_type)
- if not red_type or red_type == ExpDunModel.Red_Type.Milestone then
- self:UpdateEffRed()
- end
- end
- self:BindEvent(self.model, ExpDunModel.UPDATE_EXP_RED_BY_REDTYPE, update_challenge_red)
- self:BindEvent(self.model, ExpDunModel.UPDATE_MAINUI_EXP_TIP, update_challenge_red) -- 追加绑定这个,用于战斗力或者波次更新的时候
-
- local function onGuideTrigger()
- self:AddToStageHandler()
- end
- self:BindEvent(GlobalEventSystem, EventName.TRIGGER_GUIDE_TYPE, onGuideTrigger)
-
- local function updata_buff_state(id)
- if id == KfActivityModel.TabID.MaterialSubmit and self.is_loaded then
- self:UpdateQuickHangupTimer()
- end
- end
- self:BindEvent(KfActivityModel:getInstance(), KfActivityModel.ANS_UPDATE_VIEW, updata_buff_state)
-
- local function show_ms_reward(ms_data, pos, index)
- self:ShowMsReward(ms_data, pos, index)
- end
- self:BindEvent(self.model, ExpDunModel.SHOW_MS_REWARD, show_ms_reward) -- 追加绑定这个,用于战斗力或者波次更新的时候
-
- local function on_level_up()
- self:UpdateExpDunEnterLvAndPowerCondition()
- self:UpdateMilestoneItems()
- end
- self.on_level_up_id = self.main_role:Bind(EventName.CHANGE_LEVEL, on_level_up)
-
- local function on_role_power_change()
- local function on_timemgr_delay_func()
- self:UpdateExpDunEnterLvAndPowerCondition()
- end
- TimeManager.GetInstance():StartTime("ExpHangupMainView_UpdateExpDunEnterLvAndPowerCondition", 1, on_timemgr_delay_func)
- end
- self.on_role_power_change_id = self.main_role:BindOne("fighting", on_role_power_change)
- end
-
- function ExpHangupMainView:CancelHide()
- BaseView.CancelHide(self)
- if self.is_loaded then
- self:UpdateRoleModel()
- end
- end
-
- function ExpHangupMainView:UpdateView()
- self:UpdateDunWaveData()
- self:UpdateSweepOrChallengeStatus()
- self:UpdateExpDunEnterLvAndPowerCondition()
- self:UpdateHangupRewardIconStage()
- self:UpdateQuickHangupTimer()
- self:UpdateEffRed()
- self:UpdateMilestoneItems(true)
- -- 动画相关
- self:StartBgRollAnim() -- 背景滚动
- self:UpdateRoleModel() -- 玩家模型
- self:UpdateMonModel() -- 怪物模型
- self:CreateBulletItems() -- 子弹节点
- -- 后面要改为推算阶段(已改)
- self.anim_stage, self.temp_stage_data = self.model:GetRandomAnimStatusAndData()
- self:ViewAnimSwitcher()
- end
-
- -- 根据当前副本进度更新数据
- function ExpHangupMainView:UpdateDunWaveData( )
- -- 更新基本奖励
- self.cur_wave = self.model:GetCurrentWave()
- local route_data = self.model:GetWaveRouteData(self.cur_wave ~= 0 and self.cur_wave or 1)
- local chapter_data = self.model:GetExpChapterData(route_data.chapter)
- -- self.dun_name_tmp.text = string.format("当前关卡:%s第%s波",
- -- Trim(Config.Expdunchapter[route_data.chapter].chapter_name),
- -- (self.cur_wave ~= 0 and self.cur_wave or 1) - chapter_data.min_wave + 1)
- local ratio = self.model:GetExpHangUpRatio()
- local has_ratio_str = ratio == 10000 and "" or string.format("(%s)", (ratio / 100) .. "%")
- print("huangcong:ExpHangupMainView [start:399] :", has_ratio_str)
- self.eff_val_tmp.text = string.format("当前经验收益:<color=#fdffc2>%s/分%s</color>%s",
- WordManager:ConvertNum(self.model:GetExpEfficiency(self.cur_wave, true)),
- has_ratio_str,self.add_buff_exp_str)
-
- -- 里程碑相关
- self.next_wave = self.cur_wave < TableSize(Config.Expdunwave) and self.cur_wave + 1 or self.cur_wave
- local next_wave_route = self.model:GetWaveRouteData(self.next_wave)
- -- 首次加载需要限定一次章节数和里程碑数
- self.cur_route = next_wave_route.id
- self.cur_ms_cfg = self.model:GetNextMainPointByWave(self.next_wave, false) -- 当前进度的下一个里程碑点
- end
-
- -- 检查当前是应该扫荡还是挑战副本
- function ExpHangupMainView:UpdateSweepOrChallengeStatus( )
- -- 先判断玩家是否处于红点等级限制的情况,是则需要实时计算扫荡状态,否则就拿红点缓存就行了
- local limit_red = self.model:GetExpDunLimitNewlyRed()
- local sweep_red = false
- if limit_red then
- local dun_data = self.dun_model:GetDunProtoInfo(BaseDungeonModel.DUN_TYPE.EXP)
- if dun_data and dun_data[1] then
- for k, v in pairs(dun_data[1].rec_data) do
- if v.key == 13 then
- sweep_red = v.val == 0
- break
- end
- end
- end
- else
- sweep_red = self.model:GetExpRedByRedType(ExpDunModel.Red_Type.Sweep)
- end
-
- self.challenge_btn_obj:SetActive(not sweep_red)
- self.sweep_btn_obj:SetActive(sweep_red)
- -- 红点直接在显示扫荡的时候显示
- self.sweep_btn_red_obj:SetActive(sweep_red)
- end
-
- -- 当前玩家等级或者战力发生变化时调用,刷新界面等级或战力引导,并判断是否可以挑战副本
- function ExpHangupMainView:UpdateExpDunEnterLvAndPowerCondition( )
- local power = self.main_role.fighting
- local level = self.main_role.level
- local wave_cfg = Config.Expdunwave[self.next_wave]
- local match_power = power >= wave_cfg.power_limit
- local match_level = level >= wave_cfg.lv_limit
- -- 等级不够时 显示等级不够的表现 其他情况显示为战力
- if match_level then
- self.rec_power_tmp.text = string.format("战力要求: <color=%s>%s</color><color=#ffffff>/%s</color>",
- match_power and ColorUtil.GREEN_DARK or ColorUtil.RED_DARK, power, wave_cfg.power_limit)
- else
- self.rec_power_tmp.text = string.format("等级要求: <color=%s>%s</color><color=#ffffff>/%s</color>",
- ColorUtil.RED_DARK, level, wave_cfg.lv_limit)
- end
- self.expdun_can_enter_flag = match_power and match_level
- lua_resM:setImageSprite(self, self.rec_power_icon_img, "expDun_asset", self.expdun_can_enter_flag and "exp_route_img11" or "exp_route_img6", true)
- SetAnchoredPositionX(self.rec_power_icon, self.expdun_can_enter_flag and 18 or 9.5)
- local total_len = 36 + self.rec_power_tmp.preferredWidth + 30
- SetSizeDeltaX(self.rec_power_bg, total_len)
- -- 设置按钮和文本灰化
- SetImageGray(self.challenge_btn_img, not self.expdun_can_enter_flag)
- SetTMPSharedMaterial(self.challenge_lb_tmp, self.expdun_can_enter_flag
- and ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn
- or ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
- end
-
- -- 更新放置挂机奖励展示表现和红点
- function ExpHangupMainView:UpdateHangupRewardIconStage( )
- self:ClearExpDunRewardIconTimer()
- local condition = Config.Modulesub["610@16"].open_lv
- local lv = self.main_role.level
- if condition > lv then -- 未达到开放等级
- SetImageGray(self.reward_icon_btn_img, true)
- self.reward_icon_lb_tmp.text = string.format("%s级开放", condition)
- self.reward_icon_btn_red_obj:SetActive(false)
- self.hang_receive_tip_obj:SetActive(false)
- else
- SetImageGray(self.reward_icon_btn_img, false)
- -- 获取挂机时长配置
- local max_sec = self.model:GetHangupResourceLimitTime() * 3600
- -- 已累计挂机时间
- local contain_time
- -- local last_time = self.model:GetHangUpReceiveTime()
- local offline_red = self.model:GetExpRedByRedType(ExpDunModel.Red_Type.Offline)
- local function exp_dun_reward_icon_timer()
- contain_time = self.model:GetHangUpContainTimeData()
- -- 设置资源储存时间
- self.reward_icon_lb_tmp.text = string.format("累计 <color=#2cf86f>%s</color>", TimeUtil:timeConvert(contain_time > max_sec and max_sec or contain_time, "hh:mm:ss"))
- if (contain_time >= 3600 or offline_red) and not self.reward_icon_btn_red_obj.activeSelf then -- 超过1小时或者有离线卡显示红点
- self.reward_icon_btn_red_obj:SetActive(true)
- elseif (contain_time < 3600 and not offline_red) and self.reward_icon_btn_red_obj.activeSelf then
- self.reward_icon_btn_red_obj:SetActive(false)
- end
- if contain_time >= 3600 and not self.hang_receive_tip_obj.activeSelf then -- 超过1小时显示奖励领取tips
- self.hang_receive_tip_obj:SetActive(true)
- elseif contain_time < 3600 and self.hang_receive_tip_obj.activeSelf then
- self.hang_receive_tip_obj:SetActive(false)
- end
- end
- self.exp_dun_reward_icon_timer_id = GlobalTimerQuest:AddPeriodQuest(exp_dun_reward_icon_timer, 1, -1)
- exp_dun_reward_icon_timer()
- end
- end
-
- function ExpHangupMainView:ClearExpDunRewardIconTimer( )
- if self.exp_dun_reward_icon_timer_id then
- GlobalTimerQuest:CancelQuest(self.exp_dun_reward_icon_timer_id)
- self.exp_dun_reward_icon_timer_id = nil
- end
- end
-
- -- 更新快速挂机累计表现
- function ExpHangupMainView:UpdateQuickHangupTimer( )
- self:ClearQuickHangupTimer()
- local condition = Config.Modulesub["610@15"].open_lv
- local lv = self.main_role.level
-
- local have_time = 0
- local buff_kind = OperateActivityModel.MaterialSubmitBuffKind.ADVENTURE_EXP --是否存在活动加成buff 免费收取一次二倍
- local buff_cfg,buff_info = OperateActivityModel:getInstance():GetMaterialBuffInfoByKind(buff_kind)
- -- buff_cfg = {discount = 80,data = 1}
- -- buff_info = {etime = TimeUtil:getServerTime( )+300,used = {{kdata = 1,vdata=0}}}
- if buff_cfg and buff_info then
- have_time = 1
- local sec = buff_info.etime - TimeUtil:getServerTime( )
- if sec > 0 then
- self:ActBuffTimeLate(sec)
- for k,v in pairs(buff_info.used) do
- if v.kdata == 1 and v.vdata == 1 then--buff有一次免费二倍
- have_time = 0
- break
- end
- end
- end
- end
- if condition > lv then -- 未达到开放等级,默认0进度
- self.buy_btn_imgex.gray = true
- self.buy_timer_tmp.text = string.format("%s级开放", condition)
- self.buy_btn_red_obj:SetActive(false)
- else
- local last_time = self.model:GetQuickHangUpReceiveTime()
- local max_time, use_time = self.model:GetHangUpTimeCount()
- local left_time -- 距离下次刷新的时间
- if last_time ~= 0 and use_time < max_time then
- -- 加载当前等级的配置
- local hangup_exp_cfg = self.model:GetBuyExpBasicExpCfg()
- if not hangup_exp_cfg then
- self:ClearQuickHangupTimer()
- return
- end
- local end_time = last_time + hangup_exp_cfg.time -- 下次刷新的时间戳
- local function quick_hangup_timer()
- left_time = end_time - TimeUtil:getServerTime()
- if left_time < 0 or (have_time >= 1 and self.model:GetExpRedByRedType(ExpDunModel.Red_Type.QuickHangUp)) then
- self.buy_btn_imgex.gray = false
- self.buy_timer_tmp.text = ""
- self.buy_btn_red_obj:SetActive(true)
- self:ClearQuickHangupTimer()
- else
- if not self.buy_btn_imgex.gray then
- self.buy_btn_imgex.gray = true
- end
- if self.buy_btn_red_obj.activeSelf then
- self.buy_btn_red_obj:SetActive(false)
- end
- self.buy_timer_tmp.text = string.format("冷却 <color=%s>%s</color>", ColorUtil.RED_DARK, TimeUtil:timeConvert2(left_time))
- end
- end
- self.quick_hangup_timer_id = GlobalTimerQuest:AddPeriodQuest(quick_hangup_timer, 0.5, -1)
- quick_hangup_timer()
- else
- self.buy_btn_imgex.gray = false
- self.buy_timer_tmp.text = ""
- self.buy_btn_red_obj:SetActive(false)
- end
- end
- end
-
- function ExpHangupMainView:ClearQuickHangupTimer( )
- if self.quick_hangup_timer_id then
- GlobalTimerQuest:CancelQuest(self.quick_hangup_timer_id)
- self.quick_hangup_timer_id = nil
- end
- end
-
- function ExpHangupMainView:ShowMsReward(ms_data, pos, index)
- if not ms_data or not ms_data.reward then return end
- if self.temp_ms_data and self.temp_ms_data.wave == ms_data.wave then
- self.award_con_obj:SetActive(false)
- self.temp_ms_data = nil
- return
- end
- self.temp_ms_data = ms_data
- -- 加载里程碑奖励
- self.ms_reward_creator = self.ms_reward_creator or self:AddUIComponent(UI.ItemListCreator)
- local info = {
- data_list = self.temp_ms_data.reward,
- item_con = self.award_con,
- scroll_view = self.award_con,
- obj_pool_type = UIObjPool.UIType.AwardItem,
- item_width = 62,
- start_x = 6,
- start_y = 35,
- space_x = 8,
- create_frequency = 0.01,
- alignment = UnityEngine.TextAnchor.UpperCenter,
- on_update_item = function(item, i, v)
- local type_Id, lock = GoodsModel:getInstance():GetMappingTypeId(v[1], v[2])
- item:SetData(type_Id, v[3], nil, nil, lock)
- item:SetItemSize(62, 62)
- end,
- }
- self.ms_reward_creator:UpdateItems(info)
- local total_len = 70 * #self.temp_ms_data.reward + 25
- SetSizeDeltaX(self.award_con, total_len < 230 and 230 or total_len)
- self.award_con_obj:SetActive(true)
- -- local cur_scroll_pos_x = self.route_scroll.anchoredPosition.x
- local cur_node_pos_x = self.route_con.anchoredPosition.x
- local pos_x = pos.x + cur_node_pos_x + self.award_con.sizeDelta.x * 0.25 + 10
- local pos_y = index % 2 == 1 and -141.5 or -81.5
- SetAnchoredPosition(self.award_con, pos_x, pos_y)
- end
-
- -- 2021年3月11日新增
- -- 整合副本进度相关表现
- -- 加载路线节点 delay_show:界面的表现太多了,这个字段用来控制在打开界面的时候延迟加载
- function ExpHangupMainView:UpdateMilestoneItems(delay_show)
- -- local data = self.model:GetExpRouteData()
- local data = self.model:GetMainRouteData()
- local data_num = #data
- local role_lv = self.main_role.level
- self.total_pages = math.ceil(data_num / 4) -- 这边的数据是将5个波次合并成1条数据,实际上将会是20波一页
- self.route_item_creator = self.route_item_creator or self:AddUIComponent(UI.ItemListCreator)
- -- 计算当前的目标波数所在的页码,并计算出能查看的页码上限
- self.limit_page = self.total_pages + 1
- local checked_cur_page = false
- local checked_limit_page = false
- local temp_route_data, temp_chapter_data
- local page_min_wave, page_max_wave
- for k = 1, self.total_pages do
- local temp_index = k * 4 > data_num and data_num or k * 4
- page_max_wave = data[temp_index].ms_data.wave
- if self.next_wave <= page_max_wave and not checked_cur_page then
- self.cur_page = k
- checked_cur_page = true
- -- break
- end
- if not checked_limit_page then
- local temp_min_page = k * 4 - 3
- page_min_wave = data[temp_min_page].ms_data.wave
- temp_route_data = self.model:GetWaveRouteData(page_min_wave)
- temp_chapter_data = Config.Expdunchapter[temp_route_data.chapter]
- if temp_chapter_data and temp_chapter_data.min_lv > role_lv then
- self.limit_page = k
- self.page_limit_lv = temp_chapter_data.min_lv
- checked_limit_page = true
- else
- -- 如果不是未解锁的章节,则需要再次置空
- page_min_wave = nil
- end
- end
- end
- -- 更新当前等级的限制文本内容
- self:UpdateRouteLimitLb()
- self.expdun_route_update_func = function(cur_page)
- local data_index_min = (cur_page - 1) * 4 + 1
- local data_index_max = cur_page * 4
- data_index_max = data_index_max > data_num and data_num or data_index_max
- local item_index = 0 -- 一次最多加载4个节点,这边用来做索引
- for i = data_index_min, data_index_max do
- item_index = item_index + 1
- self.route_item[item_index] = self.route_item[item_index] or ExpDunRouteItem.New(self.route_con)
- self.route_item[item_index]:SetData(data[i], self.cur_wave, i, page_min_wave)
- self.route_item[item_index]:SetAnchoredPosition((item_index - 1) * 251, 0)
- self.route_item[item_index]:SetVisible(true)
- end
- -- 隐藏多余的节点
- for i = item_index + 1, 4 do
- if self.route_item[i] then
- self.route_item[i]:SetVisible(false)
- end
- end
- end
- -- local info = {
- -- data_list = data,
- -- item_con = self.route_con,
- -- scroll_view = self.route_scroll,
- -- item_class = ExpDunRouteItem,
- -- item_width = 246,
- -- start_x = 5,
- -- -- space_x = 5,
- -- create_frequency = 0.01,
- -- reuse_item_num = 7,
- -- alignment = UnityEngine.TextAnchor.UpperLeft,
- -- on_update_item = function(item, i, v)
- -- item:SetData(v, self.cur_wave, i, page_min_wave)
- -- end,
- -- final_callback = function()
- -- self.route_scroll_scroll.horizontal = false
- -- -- SetSizeDeltaX(self.route_con, self.route_con.sizeDelta.x + 20, self.route_con.sizeDelta.y)
- -- self:ScrollToTargetPage()
- -- end,
- -- }
- if delay_show then
- local function delay_method( )
- self.expdun_route_update_func(self.cur_page_index)
- self:ScrollToTargetPage()
- -- self.route_item_creator:UpdateItems(info)
- end
- if not self.route_item_creator_delayId then
- self.route_item_creator_delayId = setTimeout(delay_method, 0.1)
- end
- else
- self.expdun_route_update_func(self.cur_page_index)
- self:ScrollToTargetPage()
- -- self.route_item_creator:UpdateItems(info)
- end
- end
- function ExpHangupMainView:ScrollToTargetPage(page)
- if self.is_in_action then return end
- page = page or (self.cur_page > self.limit_page and self.limit_page or self.cur_page) -- 初始加载不可以超过限制页数
- if not (self.cur_page_index == page) or self.first_load_route then -- 页码不同才需要坐动画
- -- local x_offset = (self.cur_page_index - page) * 984
- self.is_in_action = true
- if self.route_cg_alpha_id then
- TweenLite.Stop(self.route_cg_alpha_id)
- self.route_cg_alpha_id = nil
- end
- self.route_con_cg.alpha = 0
- -- local action_con = cc.SweepAction.New(0.1, self.route_con, "right", x_offset, true, true)
- local action_con = cc.CallFunc.New(function ()
- self.is_in_action = false
- self.route_cg_alpha_id = TweenLite.to(self, self.route_con_cg, TweenLite.UiAnimationType.ALPHA_ALL, 1, 0.2)
- end)
- -- 添加动画
- cc.ActionManager:getInstance():addAction(action_con, self.route_con)
- self.first_load_route = false
- end
- self.cur_page_index = page
- -- 刷新节点
- if self.expdun_route_update_func then
- self.expdun_route_update_func(self.cur_page_index)
- end
- self.arrow_right_obj:SetActive(self.cur_page_index < self.total_pages)
- self.arrow_left_obj:SetActive(self.cur_page_index > 1)
- -- 如果处于限制页码时,右侧箭头需要灰化
- local show_right_arrow_gray = self.limit_page <= self.total_pages and self.cur_page_index == self.limit_page
- SetImageGray(self.arrow_right_img, show_right_arrow_gray)
- self.route_limit_bg_obj:SetActive(show_right_arrow_gray)
-
- self:UpdateArrowRed()
- end
-
- function ExpHangupMainView:UpdateRouteLimitLb( )
- self.route_limit_lb_tmp.text = string.format("解锁等级:<color=%s>%s</color>/%s", ColorUtil.RED_DARK,
- self.main_role.level, self.page_limit_lv)
- end
-
- function ExpHangupMainView:UpdateArrowRed( )
- if self.cur_page_index > 1 then -- 更新左侧按钮红点
- local bool = false
- for i = 1, self.cur_page_index - 1 do
- bool = bool or self.model:GetMainRouteMilestoneRedByPages(i)
- end
- self.arrow_left_red_img.enabled = bool
- end
- if self.cur_page_index < self.total_pages then -- 更新右侧按钮红点
- local bool = false
- for i = self.cur_page_index + 1, self.total_pages do
- bool = bool or self.model:GetMainRouteMilestoneRedByPages(i)
- end
- self.arrow_right_red_img.enabled = bool
- end
- end
-
- -- 动画相关 --
- -- 动画相关 --
- -- 动画相关 --
- -- 主界面动画总控制
- function ExpHangupMainView:ViewAnimSwitcher( )
- local now_time = Status.NowTime
- local function anim_mgr_func()
- if self.anim_stage == 1 then -- 飞行阶段
- -- 创建怪物数据
- self:UpdateMonStageData()
- -- 阶段倒计时
- local function stage1_timer()
- local stage_time = Status.NowTime - now_time
- if stage_time >= ExpDunAnimConst.Stage1_Time * 0.8 then -- 飞行时间过后切换到2阶段
- self:ClearAnimMgrFuncId()
- self.anim_stage = 2
- self:ViewAnimSwitcher()
- end
- end
- self:ClearAnimMgrFuncId()
- self.anim_mgr_func_id = GlobalTimerQuest:AddPeriodQuest(stage1_timer, 0.05, -1)
- elseif self.anim_stage == 2 then -- 发射弹幕阶段
- self.has_play_effect_time = 0
- self:StartShootBullet()
- self:UpdateMonStageData()
- self.temp_stage_data = nil
- elseif self.anim_stage == 3 then -- 留时间播放奖励表现
- local function stage1_timer()
- self:ClearAnimMgrFuncId()
- self.anim_stage = 1
- self:ViewAnimSwitcher()
- end
- self:UpdateMonStageData()
- self:ClearAnimMgrFuncId()
- self.anim_mgr_func_id = GlobalTimerQuest:AddPeriodQuest(stage1_timer, ExpDunAnimConst.Run_Stage_Time, -1)
- end
- end
- anim_mgr_func()
- end
- function ExpHangupMainView:ClearAnimMgrFuncId( )
- if self.anim_mgr_func_id then
- GlobalTimerQuest:CancelQuest(self.anim_mgr_func_id)
- self.anim_mgr_func_id = nil
- end
- end
- -- 加载主角模型
- function ExpHangupMainView:UpdateRoleModel( )
- -- 加载章节载具
- local chapter = self.model:GetExpDunWaveChapter(self.model:GetCurrentWave())
- local chapter_cfg = Config.Expdunchapter[chapter]
- local extra_offset = ExpDunAnimConst.ExtraOffset[chapter_cfg.res_id]
- self.role_mod_pos_offset = extra_offset and extra_offset.model_pos or Vector2(0, 0)
- self.launch_pos_offset = extra_offset and extra_offset.launch_pos or Vector2(0, 0)
- -- 加载模型
- local res_data = {
- layer_name = "UI",
- type = SceneBaseType.Include_Horse,
- father_node = self,
- transform = self.role_con,
- fashion_type = FuncOpenModel.TypeId.Clothes,
- size = Vector2(1200*1.067, 720*1.067),
- raycast_size = Vector2(200, 277),
- action_name_list = {"run"},
- light_id = self.main_role.light_id,
- talisman_id = GetTalismanClotheId(self.main_role),
- -- scale = 0.43,
- -- position = Vector3(0,213,-100),
- -- ui_model_type = UIModelCommon.ModelType.RT,
- scale = 1,
- can_rotate = false,
- rotate = 180,
- position = Vector3(55, -10, -500),
- show_shadow = false,
- free_param = chapter_cfg.res_id,
- callBack = function()
- -- 加载完移回来
- SetAnchoredPositionX(self.role_con, -270)
- -- 首次加载不需要动画,直接定在某个点
- self:StartRoleModelAutoAnim(true)
- end,
- }
- FuncOpenModel:getInstance():SetModelRes(res_data)
- -- 重新加载背景图
- local function bg_roll_callback()
- self.bg_roll_raw.uvRect = self.bg_roll_uvRect
- end
- lua_resM:setOutsideRawImage(self, self.bg_roll_raw, GameResPath.GetViewBigBg("exp_anim_bg" .. chapter_cfg.bg_id), false, bg_roll_callback)
- -- 加载背景图远景图
- local function bg_roll_back_callback()
- self.bg_roll_back_raw.uvRect = self.bg_roll_back_uvRect
- end
- lua_resM:setOutsideRawImage(self, self.bg_roll_back_raw, GameResPath.GetViewBigBg("exp_anim_bg_back_" .. chapter_cfg.bg_id), false, bg_roll_back_callback)
- end
-
- -- 开始主角模型漂移动画
- function ExpHangupMainView:StartRoleModelAutoAnim(no_anim)
- if not self.role_ram_pos_index then
- self.role_ram_pos_index = math_random(1, #self.role_ran_pos)
- else
- local new_pos = self.role_ram_pos_index
- -- 保证获取一个跟上个坐标不相等的位移点
- while(new_pos == self.role_ram_pos_index) do
- new_pos = math_random(1, #self.role_ran_pos)
- end
- self.role_ram_pos_index = new_pos
- end
- local pos_cfg = self.role_ran_pos[self.role_ram_pos_index]
- local auto_pos = Vector3(self.role_pos_origin.x + pos_cfg.pos.x + self.role_mod_pos_offset.x, self.role_pos_origin.y + pos_cfg.pos.y + self.role_mod_pos_offset.y, 0)
- local amin_scale = Vector3(pos_cfg.scale, pos_cfg.scale, pos_cfg.scale)
- local call_back = function()
- self:StartRoleModelAutoAnim(false)
- end
- self:ClearRoleModelAutoAnimId()
- self.role_model_move_anim_id = TweenLite.to(self, self.role_con, TweenLite.UiAnimationType.POS, auto_pos, pos_cfg.anim_time, call_back)
- self.role_model_scale_anim_id = TweenLite.to(self, self.role_con, TweenLite.UiAnimationType.SCALE, amin_scale, pos_cfg.anim_time)
- end
- function ExpHangupMainView:ClearRoleModelAutoAnimId( )
- if self.role_model_move_anim_id then
- TweenLite.Stop(self.role_model_move_anim_id)
- self.role_model_move_anim_id = nil
- end
- if self.role_model_scale_anim_id then
- TweenLite.Stop(self.role_model_scale_anim_id)
- self.role_model_scale_anim_id = nil
- end
- end
-
- function ExpHangupMainView:UpdateMonModel()
- -- 播放怪物死亡后的奖励动画
- local function reward_anim_callback(index)
- local mon_item_pos = self.mon_model_list[index]:GetAnchoredPosition()
- SetAnchoredPosition(self["anim_reward_con"..index], mon_item_pos.x - 29.5 + 1, mon_item_pos.y + 93 + 59)
- self["award_item" .. index]:SetVisible(true)
- local function anim_end_fun()
- if self["award_item" .. index] then
- self["award_item" .. index]:SetVisible(false)
- self:OnRewardAnimEndShake() -- 收入宝箱之后播放宝箱动画
- end
- end
- self:ClearRewardAnim(index)
- self["reward_anim_id" .. index] = TweenLite.to(self, self["anim_reward_con"..index],
- TweenLite.UiAnimationType.ANCHORED_POS, self.reward_icon_btn.anchoredPosition, 1,
- anim_end_fun, TweenFunc.EASE_IN_QUINT)
- end
-
- if self.mon_model_list == nil then
- self.mon_model_list = {}
- for i = 1, 3 do
- self.mon_model_list[i] = ExpHangupMonModelItem.New(self.mon_con, nil, self.layer_name)
- self.mon_model_list[i]:SetRewardAnimCallback(i, reward_anim_callback)
- self.mon_model_list[i]:SetHpParentNode(self.hp_con)
- end
- end
- self:StartMonModelIndexFunc()
- end
- -- 收入宝箱之后播放宝箱动画
- function ExpHangupMainView:OnRewardAnimEndShake( )
- -- 先清除动画
- cc.ActionManager:getInstance():removeAllActionsFromTarget(self.reward_icon_btn)
- SetLocalScale(self.reward_icon_btn, 1, 1, 1)
- local anim_scale = 1 * 0.9
- local action1 = cc.ScaleTo.New( 0.1, anim_scale, anim_scale, anim_scale)
- local action2 = cc.ScaleTo.New( 0.1, 1, 1, 1)
- local action8 = cc.Sequence.New(action1, action2)--顺序
- cc.ActionManager:getInstance():addAction(action8, self.reward_icon_btn)
- end
- function ExpHangupMainView:ClearRewardAnim(index)
- if self["reward_anim_id" .. index] then
- TweenLite.Stop(self["reward_anim_id" .. index])
- self["reward_anim_id" .. index] = nil
- end
- end
- function ExpHangupMainView:StartMonModelIndexFunc( )
- self:ClearMonModelIndexFunc()
- self.mon_index_1 = self.mon_model_list[1].transform:GetSiblingIndex()
- self.mon_index_2 = self.mon_model_list[2].transform:GetSiblingIndex()
- self.mon_index_3 = self.mon_model_list[3].transform:GetSiblingIndex()
- local temp_tb = {}
- local function mon_model_index_func()
- for k, v in ipairs(self.mon_model_list) do
- temp_tb[k] = temp_tb[k] or {}
- temp_tb[k].index = k - 1
- temp_tb[k].scale = v:GetMonConScale()
- end
- local sort_func = function ( a, b )
- return a.scale < b.scale
- end
- table.sort(temp_tb, sort_func)
- if self.mon_index_1 ~= temp_tb[1].index
- or self.mon_index_2 ~= temp_tb[2].index
- or self.mon_index_3 ~= temp_tb[3].index then -- 缩放顺序发生变动
- self.mon_model_list[1].transform:SetSiblingIndex(temp_tb[1].index)
- self.mon_index_1 = temp_tb[1].index
- self.mon_model_list[2].transform:SetSiblingIndex(temp_tb[2].index)
- self.mon_index_2 = temp_tb[2].index
- self.mon_model_list[3].transform:SetSiblingIndex(temp_tb[3].index)
- self.mon_index_3 = temp_tb[3].index
- end
- end
- self.mon_model_index_func_id = GlobalTimerQuest:AddPeriodQuest(mon_model_index_func, 0.1, -1)
- end
- function ExpHangupMainView:ClearMonModelIndexFunc( )
- if self.mon_model_index_func_id then
- GlobalTimerQuest:CancelQuest(self.mon_model_index_func_id)
- self.mon_model_index_func_id = nil
- end
- end
- -- 更新阶段怪物数据
- function ExpHangupMainView:UpdateMonStageData( )
- local chapter = self.model:GetExpDunWaveChapter(self.model:GetCurrentWave())
- local chapter_cfg = Config.Expdunchapter[chapter]
- local mon_id = chapter_cfg and chapter_cfg.mon_id
- -- -- 生成一个随机boss
- -- local mon_id = self.anim_stage ~= 1 and self.last_anim_mon_id or self.mon_id_list[math_random(1, #self.mon_id_list)]
- for k, v in ipairs(self.mon_model_list) do
- if self.anim_stage == 1 or not self.mon_stage_data[k] then -- 初次创建或者1阶段时需要重新刷新
- self.mon_stage_data[k] = {
- pos = Vector2((k % 2) * -70, -80 + (k-1) * 80 - 20),
- mod_pos = Vector2((k % 2 == 0) and 130 or 250, math_random(-50, 50)),
- }
- end
- if self.anim_stage == 2 and self.temp_stage_data then
- self.mon_stage_data[k] = self.mon_stage_data[k] or {}
- self.mon_stage_data[k].cur_hp = self.temp_stage_data.hp_data[k]
- end
- v:SetData(self.anim_stage, mon_id, self.mon_stage_data[k])
- end
- end
-
- -- 创建一定量的子弹节点
- function ExpHangupMainView:CreateBulletItems( )
- if not self.bullet_list then
- self.bullet_list = {}
- for i = 1, ExpDunAnimConst.BulletNum do
- self.bullet_list[i] = ExpHangupBulletItem.New(self.bullet_con, nil, self.layer_name, 1)
- end
- end
-
- if not self.bullet_slay_list then
- self.bullet_slay_list = {}
- for i = 1, ExpDunAnimConst.BulletNumSlay do
- self.bullet_slay_list[i] = ExpHangupBulletItem.New(self.bullet_slay_con, nil, self.layer_name, 2)
- end
- end
- end
-
- -- 使用已创建的子弹特效节点做到击中怪物的效果
- function ExpHangupMainView:StartShootBullet( )
- local bullet_time = ExpDunAnimConst.BulletTime -- 子弹动画时间
- local atk_duration = ExpDunAnimConst.Role_Attack_Duration -- 攻击间隔
- -- 动画开始的时间
- local start_anim_time = Status.NowTime - (self.temp_stage_data and self.temp_stage_data.status_pass_time or 0)
- -- 上次发射时间
- local last_launch_time = Status.NowTime - bullet_time
- local slay_wait_time = ExpDunAnimConst.SlayBulletEffectWaitTime
- local slay_anim_time = ExpDunAnimConst.SlayBulletEffectAnimTime
- local bullet_data = {}
- local function auto_shoot_func()
- local pass_time = Status.NowTime - last_launch_time
- local anim_total_time = Status.NowTime - start_anim_time -- 动画经过了的时间
- if pass_time >= atk_duration then
- -- 选出一个不在动画状态中的子弹
- local item
- for k, v in ipairs(self.bullet_list) do
- if not v:GetIsAnimating() then
- item = v
- break
- end
- end
- -- 随机出一个没死的怪物
- local un_dead_list = {}
- for k, v in ipairs(self.mon_model_list) do
- if not v:GetIsDead() then
- un_dead_list[#un_dead_list+1] = v
- end
- end
- if #un_dead_list == 0 then -- 怪物死完,播放第三阶段
- self:ClearAnimMgrFuncId()
- self.anim_stage = 3
- self:ViewAnimSwitcher()
- -- self:PlayShootingSound(false)
- else
- if item then
- local function hit_callback()
- for k, target in ipairs(un_dead_list) do
- if target then
- if not target:GetIsDead() then
- target:UpdateGetHit(math_random(2, 5))
- end
- end
- end
- end
- -- 控制终结动画
- if anim_total_time >= slay_wait_time and Status.NowTime - self.last_slay_effect_time > slay_anim_time then
- self.last_slay_effect_time = Status.NowTime
- self:StartSlayBulletEffect()
- end
- bullet_data = {
- start_pos = self.role_con.anchoredPosition + Vector2(self.launch_pos_offset.x, self.launch_pos_offset.y),
- anim_time = bullet_time,
- callback = hit_callback,
- is_normal_bullet = true,
- }
- item:SetData(bullet_data)
- last_launch_time = Status.NowTime
- -- self:PlayShootingSound(true)
- end
- end
- end
- end
- self:ClearAnimMgrFuncId()
- self.anim_mgr_func_id = GlobalTimerQuest:AddPeriodQuest(auto_shoot_func, 0.03, -1)
- end
-
- -- 子弹音效
- function ExpHangupMainView:PlayShootingSound( is_play )
- do return end
- if is_play then
- if not self.shooting_sound_id then
- self.shooting_sound_id = lua_soundM:PlayEffect(self, "shooting", true, LuaSoundManager.SOUND_TYPE.UI)
- end
- else
- if self.shooting_sound_id then
- lua_soundM:StopEffect(self, LuaSoundManager.SOUND_TYPE.UI, self.shooting_sound_id)
- self.shooting_sound_id = nil
- end
- end
- end
-
- -- 开始终结子弹表现
- function ExpHangupMainView:StartSlayBulletEffect( )
- local bullet_data = {}
- local anim_time = ExpDunAnimConst.SlayBulletEffectAnimTime
- self.has_play_effect_time = self.has_play_effect_time + 1
- for k, v in pairs(self.bullet_slay_list) do
- bullet_data = {
- start_pos = self.role_con.anchoredPosition + Vector2(self.launch_pos_offset.x, self.launch_pos_offset.y),
- anim_time = anim_time,
- show_effect_type = self.has_play_effect_time,
- is_normal_bullet = false,
- }
- v:SetData(bullet_data)
- end
- -- 延时销毁所有怪物
- local function delay_slay_all_mon()
- for k, v in ipairs(self.mon_model_list) do
- if not v:GetIsDead() then
- v:UpdateGetHit(ExpDunAnimConst.SlayBulletEffectDmg)
- end
- end
- end
- self:ClearDelaySlayAllMonId()
- self.delay_slay_all_mon_id = GlobalTimerQuest:AddDelayQuest(delay_slay_all_mon, ExpDunAnimConst.SlayBulletEffectDmgWaitTime)
- end
-
- function ExpHangupMainView:ClearDelaySlayAllMonId( )
- if self.delay_slay_all_mon_id then
- GlobalTimerQuest:CancelQuest(self.delay_slay_all_mon_id)
- self.delay_slay_all_mon_id = nil
- end
- end
-
- -- 开始背景滚动
- function ExpHangupMainView:StartBgRollAnim( )
- local last_time = Status.NowTime
- local speed = ExpDunAnimConst.BgSpeed
- local function bg_roll_anim()
- local pass_time = Status.NowTime - last_time
- local move_x = pass_time * speed * (self.anim_stage ~= 1 and ExpDunAnimConst.CombatBgSpeed or 1)
- self.bg_roll_uvRect.x = self.bg_roll_uvRect.x + move_x
- self.bg_roll_raw.uvRect = self.bg_roll_uvRect
- self.bg_roll_back_uvRect.x = self.bg_roll_back_uvRect.x + move_x * 0.2
- self.bg_roll_back_raw.uvRect = self.bg_roll_back_uvRect
- last_time = Status.NowTime
- end
- self:ClearBgRollAnimId()
- self.bg_roll_anim_id = GlobalTimerQuest:AddPeriodQuest(bg_roll_anim, 0.02, -1)
- end
- function ExpHangupMainView:ClearBgRollAnimId( )
- if self.bg_roll_anim_id then
- GlobalTimerQuest:CancelQuest(self.bg_roll_anim_id)
- self.bg_roll_anim_id = nil
- end
- end
-
- function ExpHangupMainView:UpdateEffRed( )
- self.challenge_red_obj:SetActive(self.model:GetNextWaveFitPowerRed() and self.model:GetNextWaveFitLevel())
- end
-
- function ExpHangupMainView:DestroySuccess( )
- -- self:PlayShootingSound(false)
- self:ClearExpDunRewardIconTimer()
- self:ClearQuickHangupTimer()
- for k,v in pairs(self.route_item) do
- v:DeleteMe()
- v = nil
- end
- self.route_item = {}
- if self.route_item_creator_delayId then
- GlobalTimerQuest:CancelQuest(self.route_item_creator_delayId)
- self.route_item_creator_delayId = nil
- end
- if self.route_cg_alpha_id then
- TweenLite.Stop(self.route_cg_alpha_id)
- self.route_cg_alpha_id = nil
- end
- self:ClearUIEffect(self.challenge_btn)
- OperateActivityModel:getInstance().boss_drop_act = false
- self:ClearUIEffect(self.buy_btn_effect)
- self:ClearAnimMgrFuncId()
- self:ClearMonModelIndexFunc()
- self:ClearDelaySlayAllMonId()
- self:ClearRewardAnim(1)
- self:ClearRewardAnim(2)
- self:ClearRewardAnim(3)
- if self.mon_model_list then
- for k, v in pairs(self.mon_model_list) do
- v:DeleteMe()
- v = nil
- end
- self.mon_model_list = nil
- end
- if self.bullet_list then
- for k, v in pairs(self.bullet_list) do
- v:DeleteMe()
- v = nil
- end
- self.bullet_list = nil
- end
- if self.bullet_slay_list then
- for k, v in pairs(self.bullet_slay_list) do
- v:DeleteMe()
- v = nil
- end
- self.bullet_slay_list = nil
- end
- for i = 1, 3 do
- if self["award_item" .. i] then
- UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self["award_item" .. i])
- self["award_item" .. i] = nil
- end
- end
-
- if self.act_buff_timer_id then
- GlobalTimerQuest:CancelQuest(self.act_buff_timer_id)
- self.act_buff_timer_id = nil
- end
-
- if self.on_level_up_id then
- self.main_role:UnBind(self.on_level_up_id)
- self.on_level_up_id = nil
- end
-
- if self.on_role_power_change_id then
- self.main_role:UnBind(self.on_role_power_change_id)
- self.on_role_power_change_id = nil
- end
-
- self:ClearRoleModelAutoAnimId()
- self:ClearBgRollAnimId()
- cc.ActionManager:getInstance():removeAllActionsFromTarget(self.reward_icon_btn)
- cc.ActionManager:getInstance():removeAllActionsFromTarget(self.route_con)
- -- 缓存背景的uv偏移
- self.model.main_bg_roll_uvRect = self.bg_roll_uvRect
- self.model.main_bg_roll_back_uvRect = self.bg_roll_back_uvRect
- end
-
- function ExpHangupMainView:AddToStageHandler()
- local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_EXP_DUNGEON,3)
- if not helpVo then return end
- local help_type = helpVo.help_type
- local step = helpVo.step
- local button = false
- if (help_type == HelpType.TYPE_EXP_DUNGEON) and step == 3 then
- button = self.challenge_btn_obj
- end
- if button then
- local function call_back()
- end
- GlobalEventSystem:Fire(EventName.OPEN_GUIDE_PROMPT_VIEW, button.transform, self.transform, call_back, helpVo, self.layout_file)
- end
- end
-
- function ExpHangupMainView:Close()
- local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_EXP_DUNGEON,3)
- if helpVo then
- if helpVo.step == 3 then
- GlobalEventSystem:Fire(EventName.CLOSE_GUIDE_PROMPT_VIEW)
- end
- end
- BaseView.Close(self)
- end
-
- --活动BUFF时间倒计时
- function ExpHangupMainView:ActBuffTimeLate( sec )
- if self.is_loaded then
- if self.act_sec == sec then
- return
- else
- self.act_sec = sec
- end
- if self.act_buff_timer_id then
- GlobalTimerQuest:CancelQuest(self.act_buff_timer_id)
- self.act_buff_timer_id = nil
- end
- local sec = sec or 0
- if sec > 0 then
- local function onTimer()
- sec = sec - 1
- if sec > 0 then
-
- else
- if self.act_buff_timer_id then
- GlobalTimerQuest:CancelQuest(self.act_buff_timer_id)
- self.act_buff_timer_id = nil
- end
- self:UpdateQuickHangupTimer()
- end
- end
- if not self.act_buff_timer_id then
- self.act_buff_timer_id = GlobalTimerQuest:AddPeriodQuest(onTimer, 1, -1)
- end
- onTimer()
- else
- self:UpdateQuickHangupTimer()
- end
- end
- end
|