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

1303 行
56 KiB

-- <*
-- @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