--[[ 新功能开启,包括功能图标、技能图标的展示 ]] NewModelOpenView = NewModelOpenView or BaseClass(BaseView) local NewModelOpenView = NewModelOpenView --模型资源图标ID NewModelOpenView.model_icon_res = { [1] = {ab_name = "mainRole_asset", res_name = "mainrole_level_btn"}, [2] = {ab_name = "mainUI_asset", res_name = "icon_leftBottom_1"}, --巫女 [3] = {ab_name = "mainUI_asset", res_name = "icon_leftBottom_32"}, --契兽 [4] = {ab_name = "mainUI_asset", res_name = "guide_icon_xingpang"}, --星盘 [5] = {ab_name = "mainUI_asset", res_name = "guide_icon_baoju"}, --宝具 [6] = {ab_name = "mainUI_asset", res_name = "guide_icon_bingwu"}, --兵武 [9] = {ab_name = "mainUI_asset", res_name = "icon_leftBottom_22"}, --宝宝 } function NewModelOpenView:__init() self.base_file = "func" self.layout_file = "NewModelOpenView" self.layer_name = "Activity" self.destroy_imm = true self.change_scene_close = true self.open_guide_close = nil self.hide_maincancas = false --隐藏主界面 self.click_bg_toClose = true self.use_background = true --不一定显示遮罩 self.close_fog = true self.model = FuncOpenModel:getInstance() self.mainVo = RoleManager.Instance.mainRoleInfo self.time_diff = 10 self.model.is_open_func_model_view = true self.load_callback = function () self:LoadSuccess() self:AddEvent() end self.open_callback = function ( ) self:OpenSuccess() end self.close_callback = function () self:CloseSuccess() end self.destroy_callback = function ( ) self:DestroySuccess() end end function NewModelOpenView:Open( voList ) self.voList = voList self.cur_vo = self.voList[1] or {} BaseView.Open(self) end function NewModelOpenView:LoadSuccess() self.center_obj = self:GetChild("mid/center_cont").gameObject self.mask_obj = self:GetChild("mid/mask_img").gameObject self.mask_img = self:GetChild("mid/mask_img"):GetComponent("Image") self.title_img = self:GetChild("mid/center_cont/title_img"):GetComponent("Image") self.name_txt = self:GetChild("mid/center_cont/up_cont/name_txt"):GetComponent("TMPro.TextMeshProUGUI") self.desc_txt = self:GetChild("mid/center_cont/up_cont/desc_txt"):GetComponent("TMPro.TextMeshProUGUI") self.time_txt = self:GetChild("mid/center_cont/time_txt"):GetComponent("TMPro.TextMeshProUGUI") self.icon_cont = self:GetChild("icon_cont") self.model_cont = self:GetChild("icon_cont/model_cont") self.effect = self:GetChild("mid/center_cont/effect") self.effect2 = self:GetChild("mid/center_cont/effect2") self.up_cont = self:GetChild("mid/center_cont/up_cont").gameObject -- self:MoveUIToBack(self.effect) local function delay_method( ) self:AddUIEffect("ui_jihuoxinxitong01", self.effect, self.layer_name, nil, 1, true,nil,nil, nil, nil,nil,UIPartical.RenderingOther_List.UIBackward) self:AddUIEffect("ui_jihuoxinxitong02", self.effect2, self.layer_name, nil, 1, true,nil,nil, nil, nil,nil,UIPartical.RenderingOther_List.UIBackward) end setTimeout(delay_method, 0.02) --延时0.02秒后再加载特效防止层级错乱 local nodes = { "mid/center_cont/bg_img:img","mid/center_cont/up_cont/tipImg:img", } self:GetChildren(nodes) self.mask_img.alpha = 0 self.mask_obj.transform.sizeDelta = Vector2(ScreenWidth,ScreenHeight) -- self.mask_obj:SetActive(true) local function bg_back_func( ... ) if self.background_wnd and self.background_wnd:GetComponent("RawImageExtend") then self:MoveUIToBack(self.background_wnd:GetComponent("RawImageExtend")) end local function func( ... ) self:MoveUIToBack(self.bg_img_img) end lua_resM:setOutsideImageSprite(self, self.bg_img_img, GameResPath.GetFuncIcon("open_func_model_bg"),false,func) end if self.background_wnd then bg_back_func() else self.bg_back_func = bg_back_func end self.transform:SetInsetAndSizeFromParentEdge(self.transform.EdgeLeft, 0, ScreenWidth) end function NewModelOpenView:AddEvent() local function on_click( target ) if target == self.mask_obj then if Scene.Instance.main_role then local cfg = Scene.Instance.main_role:GetMainRoleStorycfg(PoseState.STORY) if cfg and cfg.ignore_click then return end end self:PlayAction() end end AddClickEvent(self.mask_obj, on_click) end function NewModelOpenView:OpenSuccess() GlobalEventSystem:Fire(SceneEventType.CLOSE_DIALOGUE_VIEW) GlobalEventSystem:Fire(EventName.STOP_AUTO_DO_TASK) GlobalEventSystem:Fire(EventName.STOPAUTOFIGHT) self:UpdateView() self:PlaySound() end function NewModelOpenView:PlaySound( ) if IsTableEmpty(self.cur_vo) then return end if self.cur_vo then lua_soundM:StopEffect(self, LuaSoundManager.SOUND_TYPE.FUNC, self.sound_id) -- lua_soundM:StopEffect(self, LuaSoundManager.SOUND_TYPE.FUNC, self.sound_id) if self.cur_vo.sound and Trim(self.cur_vo.sound) ~= "" then if lua_soundM then self.sound_id = lua_soundM:PlayEffect(self, Trim(self.cur_vo.sound),false,LuaSoundManager.SOUND_TYPE.FUNC) end end end end function NewModelOpenView:UpdateView() if IsTableEmpty(self.cur_vo) then return end if not self.cur_vo.fashion_type or self.cur_vo.fashion_type == 0 then return end lua_resM:setImageSprite(self, self.title_img, "func_asset", "open_func_title3", true) self:UpdateModelCon() --设置文本 -- self.name_txt.text = self.cur_vo.saying self.desc_txt.text = "[ " .. self.cur_vo.saying .. " ]" --倒计时 self:StartTimer() --创建图标 self:CreateFlyIcon() lua_resM:setImageSprite(self, self.tipImg_img, "func_asset", "open_func_tip_"..self.cur_vo.fashion_type, true) end function NewModelOpenView:UpdateModelCon( ) --ai娘、座驾的模型展示需要单独做一些位置调整(原则,尽量不调整模型的pos,能调con的位置就调con的参数,模型太大调整scale) local model_pos = nil local model_scale = nil local model_con_pos = Vector3(9,-10,0) local rotate = nil local can_rotate = nil if self.cur_vo.fashion_type == FuncOpenModel.TypeId.FHorse then--座驾 -- model_pos = Vector3(0, 135, 0) -- model_scale = 160 model_con_pos = Vector3(9,-120,350) rotate = Vector3(0, 160, 0) can_rotate = true elseif self.cur_vo.fashion_type == FuncOpenModel.TypeId.FJarvis then--ai娘 -- model_pos = Vector3(0, 120, 0) model_scale = 240 model_con_pos = Vector3(35,-30,150) elseif self.cur_vo.fashion_type == FuncOpenModel.TypeId.FPearl then--宝具 -- model_pos = Vector3(0, 180, 0) -- model_scale = 220 model_con_pos = Vector3(15,-20,0) elseif self.cur_vo.fashion_type == FuncOpenModel.TypeId.FWeapon then--武器 -- model_pos = Vector3(0, 180, 0) -- model_scale = 200 model_con_pos = Vector3(45,-10,280) elseif self.cur_vo.fashion_type == FuncOpenModel.TypeId.FCloud then--AI娘翅膀 model_con_pos = Vector3(20,-10,0) elseif self.cur_vo.fashion_type == FuncOpenModel.TypeId.FWing then--翅膀 model_con_pos = Vector3(20,-10,0) elseif self.cur_vo.fashion_type == FuncOpenModel.TypeId.Child then--宝宝 model_con_pos = Vector3(20, -10, 0) model_scale = 500 end self.model_cont.transform.localPosition = model_con_pos local res_data = { father_node = self, transform = self.model_cont, fashion_type = self.cur_vo.fashion_type, figure_id = self.cur_vo.figure_id, position = model_pos, scale = model_scale, figure_texture = 1, layer_name = self.layer_name, can_rotate = can_rotate, rotate = rotate, ui_model_type = UIModelCommon.ModelType.BackModel, } FuncOpenModel:getInstance():SetModelRes(res_data) if self.cur_vo.fashion_type == FuncOpenModel.TypeId.FHorse then--座驾 lua_soundM:PlayEffect(self, "activate_moto", false, LuaSoundManager.SOUND_TYPE.UI, 1) end end function NewModelOpenView:StartTimer( ) if self.time_id == nil then self.time_txt.text = HtmlColorTxt(self.time_diff, "#2cf86f") .. " 秒后自动关闭" local function onTimer() self.time_diff = self.time_diff - 1 if self.time_diff >= 0 then self.time_txt.text = HtmlColorTxt(self.time_diff, "#2cf86f") .. " 秒后自动关闭" else if self.time_id then GlobalTimerQuest:CancelQuest(self.time_id) self.time_id = nil end self:PlayAction() end end self.time_id = GlobalTimerQuest:AddPeriodQuest(onTimer,1,-1) end end function NewModelOpenView:CreateFlyIcon( ) if self.cur_vo then self.image_obj = UiFactory.createChild(self.icon_cont, UIType.ImageExtend) self.image_obj.transform.sizeDelta = Vector2(78, 78) self.image_icon = self.image_obj:GetComponent("ImageExtend") local ab_name, res_name = "activityIcon_asset", "" if self.cur_vo.winId and self.cur_vo.subId then local fun_vo = OpenFun.LinkWin[self.cur_vo.winId.."@"..self.cur_vo.subId] if fun_vo then res_name = fun_vo.icon_res end end if self.cur_vo.model_type and self.cur_vo.model_type ~= 0 and self.cur_vo.icon_res_name ~= nil then res_name = self.cur_vo.icon_res_name end self.center_obj:SetActive(true) self.image_obj:SetActive(false) local function callback( ... ) if ab_name == "activityIcon_asset" then self.image_obj.transform.sizeDelta = Vector2(60, 60) end end if ab_name and ab_name ~= "" and res_name and res_name ~= "" then lua_resM:setImageSprite(self, self.image_icon, ab_name, res_name, true, callback) if ab_name == "activityIcon_asset" then self.image_obj.transform.sizeDelta = Vector2(60, 60) end end end end function NewModelOpenView:PlayAction( ) local function callback( ) GlobalEventSystem:Fire(EventName.SHOW_FUNC_OPEN_ICON,self.voList) self.image_obj:SetActive(false) self:Close() end if self.cur_vo and self.cur_vo.ignore_fly then callback() return end if not self.image_obj then callback() return end local pos = self.cur_vo.pos if self.cur_vo then pos = self.model:GetFlyPos(self.cur_vo) end self.center_obj:SetActive(false) self.image_obj:SetActive(true) self.model_cont.gameObject:SetActive(false) if pos ~= nil then self.tween_id = TweenLite.to(self, self.image_obj.transform, TweenLite.UiAnimationType.POS, pos, 0.8, callback) end end --关闭界面后做什么 function NewModelOpenView:CloseSuccess( ) --完成引导 local main_role = Scene.Instance.main_role if main_role then main_role:ChangeState(PoseState.STAND) end local helpVo, endVo = GuideModel:getInstance():GetHelpVo(HelpType.TASK_ITEM_SHOW,1) if helpVo and not endVo then GlobalEventSystem:Fire(EventName.FINISH_CURRENT_HELP_STEP,helpVo) else --当前没有引导才继续做任务 GlobalEventSystem:Fire(EventName.FORCE_TO_DO_TASK) GlobalEventSystem:Fire(EventName.START_AUTO_DO_TASK) end -- if self.cur_vo.winId and self.cur_vo.subId then -- OpenFun.Open(self.cur_vo.winId, self.cur_vo.subId) -- else -- end if self.image_obj then self.image_obj:SetActive(false) end GlobalEventSystem:Fire(EventName.SHOW_FUNC_OPEN_ICON,self.voList) end function NewModelOpenView:DestroySuccess( ) self.model.is_open_func_model_view = false self:ClearUIEffect(self.effect) self:ClearUIEffect(self.effect2) if self.time_id then GlobalTimerQuest:CancelQuest(self.time_id) self.time_id = nil end end