GuideSpiritView = GuideSpiritView or BaseClass(BaseView) local GuideSpiritView = GuideSpiritView GuideSpiritView.MaxTaskNum = 3 function GuideSpiritView:__init() self.base_file = "guide" self.layout_file = "GuideSpiritView" self.layer_name = "Activity" self.destroy_imm = true self.use_background = true self.task_item_list = {} self.is_set_zdepth = true self.is_guide_module = true -- self.use_local_view = true self.isPlay = true self.finish_all = false self.load_callback = function () self:LoadSuccess() self:InitEvent() end self.open_callback = function () end self.close_callback = function () self:Remove() if self.finish_all then GlobalEventSystem:Fire(EventName.TEST_HELP_STEP, 999991011) elseif self.need_do_task then GuideModel:getInstance():BeginTask(self.layout_file) end end end function GuideSpiritView:LoadSuccess() self.leaveTime, self.desc_txt, self.explain_txt = self:GetChildTexts({ "InfoCon/CloseBtn/Text", "InfoCon/Desc/Text", "InfoCon/UICon/BG3/Text" }) self.background, self.bg1, self.bg2, self.bg3 = self:GetChildImages ({ "BG", "InfoCon/BG1", "InfoCon/BG2", "InfoCon/UICon/BG3", }) self.closeBtn, self.ModelBtn, self.SureBtn, self.DescCon, self.ContinueBtn = self:GetChildGameObjects({ "InfoCon/CloseBtn", "InfoCon/UICon/ModelBtn", "InfoCon/SureBtn", "InfoCon/Desc", "InfoCon/UICon/ContinueBtn" }) self.con, self.UICon, self.SpiritCon, self.BgEffectCon, self.EffectCon, self.mask = self:GetChildTransforms({ "InfoCon/Con", "InfoCon/UICon", "InfoCon/SpiritCon", "InfoCon/BgEffectCon", "InfoCon/UICon/EffectCon", "Mask" }) lua_resM:setOutsideImageSprite(self,self.background,GameResPath.GetJpgImage("bag_bg.jpg"),false) lua_resM:setOutsideImageSprite(self,self.bg1,GameResPath.GetGuideImage("hxui_bg"),false) lua_resM:setOutsideImageSprite(self,self.bg2,GameResPath.GetGuideImage("hxui_msz"),false) lua_resM:setOutsideImageSprite(self,self.bg3,GameResPath.GetGuideImage("hxui_qp"),false) self.mask.sizeDelta = Vector2(ScreenWidth,ScreenHeight) self.closeBtn.transform.anchoredPosition = Vector2(ScreenWidth / 2 - 50,ScreenHeight / 2 - 50) local function generateItem(i) local item = { gameObject = self:GetChild("InfoCon/Grid/title"..i).gameObject, task_name_txt = self:GetChild("InfoCon/Grid/title"..i.."/Text"):GetComponent("Text"), finish_flag_img = self:GetChild("InfoCon/Grid/title"..i.."/Sign"):GetComponent("Image"), } return item end for i = 1,3 do table.insert(self.task_item_list,generateItem(i)) end self:InitView() local function load_callback() self:SetSpiritModel() self:SetUIDepth(self.UICon.gameObject) end local data = { clothe_res_id = GuideModel.SpiritBgId, type = SceneBaseType.StarSoul, layer_name = self.layer_name, rotate = Vector3(-15,0,0), action_name_list = {"idle"}, can_rotate = false, scale = 150, position = Vector3(0, -156, 0), callBack = load_callback, layout_file = self.layout_file } lua_resM:SetRoleModel(self, self.con,data) end function GuideSpiritView:InitView() local finish_num = 0 local last_finish_task_id = TaskModel:getInstance().last_finish_task_id local list = Config.ConfigHelper.StarTaskList for index,id in ipairs(list) do if id > last_finish_task_id then lua_resM:setImageSprite(self, self.task_item_list[index].finish_flag_img, "common_asset", "tyui_wdc",true) else finish_num = finish_num + 1 lua_resM:setImageSprite(self, self.task_item_list[index].finish_flag_img, "common_asset", "tyui_ywc",true) end local basedata=ConfigItemMgr.Instance:GetTaskData(id) if basedata then self.task_item_list[index].task_name_txt.text = Trim("Lv."..basedata.level..basedata.name) end end if finish_num >= GuideSpiritView.MaxTaskNum then self.finish_all = true end if self.finish_all then self.SureBtn:SetActive(false) self.DescCon:SetActive(false) self.ContinueBtn:SetActive(false) self.explain_txt.text = "萌羊座被你唤醒了!让她与你并肩作战吧!" self.bg3.transform.localPosition = Vector3(-43,-174,0) GlobalEventSystem:Fire(EventName.STOP_AUTO_DO_TASK) GlobalEventSystem:Fire(EventName.STOPAUTOFIGHT) else self.SureBtn:SetActive(false) self.DescCon:SetActive(true) self.ContinueBtn:SetActive(true) self.explain_txt.text = "萌羊座似乎还能感知你的存在,点击试试看吧" self.desc_txt.text = string.format("完成主线任务:%d/%d",finish_num,GuideSpiritView.MaxTaskNum) end end function GuideSpiritView:SetSpiritModel() local function load_callback() if self.curr_Model == nil then self.curr_Model = lua_resM:GetPartModel(self, self.con) self.animator = self.curr_Model.gameObject:GetComponent("Animator") end if self.curr_Model then self.spirit_root = self.curr_Model.transform:Find("Bone001") if self.spirit_root then local function load_finish_func(go) if go then self.BGEffect = go.transform self:SetUILayer(go.transform) go.transform.localPosition = Vector3(-0.046,1.459,-0.036) go.transform.localScale = Vector3.one go.transform.localRotation = Quaternion.Euler(Vector3.zero) end self:SetUIDepth(self.UICon.gameObject) end local function load_finish(go) if go then self:SetUILayer(go.transform) go.transform.localPosition = Vector3(-0.046,1.459,-0.036) go.transform.localScale = Vector3.one go.transform.localRotation = Quaternion.Euler(Vector3.zero) end self:SetUIDepth(self.UICon.gameObject) self:AddUIEffect("ui_partnersys_bkgd",self.curr_Model.transform,self.layer_name, nil, -1, false, -1, nil, nil, load_finish_func, nil, nil, true) end self:AddUIEffect("ui_partnersys_platformfx",self.curr_Model.transform,self.layer_name, nil, -1, false, -1, nil, nil, load_finish, nil, nil, true) self.SpiritCon:SetParent(self.spirit_root.transform) end if self.finish_all then local onTimer = function () if self._use_delete_method then return end self:CancelDelayTimer() self:ShowActiveAnim() end self.delay_timer_id = TimerQuest.AddDelayQuest(GlobalTimerQuest, onTimer,0.5) end end end local data = { clothe_res_id = GuideModel.SpiritId, type = SceneBaseType.StarSoul, layer_name = self.layer_name, rotate = Vector3(0,180,0), action_name_list = {"idle2"}, can_rotate = false, scale = 1, position = Vector3(2.1, -92.2, 0), callBack = load_callback, layout_file = self.layout_file } lua_resM:SetRoleModel(self,self.SpiritCon.transform,data) end function GuideSpiritView:CancelDelayTimer() if self.delay_timer_id then TimerQuest.CancelQuest(GlobalTimerQuest, self.delay_timer_id) self.delay_timer_id = nil end end function GuideSpiritView:InitEvent() local function clickFunc(target) if target == self.closeBtn then self:Close() elseif target == self.SureBtn then self:ShowActiveAnim() elseif target == self.ModelBtn then if self.finish_all then return end if self.curr_Model == nil then self.curr_Model = lua_resM:GetPartModel(self, self.con) self.animator = self.curr_Model.gameObject:GetComponent("Animator") end if self.animator then self.animator.speed = 1 self.animator:Update(0) self.animator:CrossFade("shake1",0.1, 0) if not self.isPlay then return end local cur_state = self.animator:GetCurrentAnimatorStateInfo(0) if cur_state then local action_time = cur_state.length self.isPlay = false self.model_timer_1 = setTimeout(function() if self.animator then self.isPlay = true self.animator:CrossFade("idle",0.1,0) end end,action_time) end end elseif target == self.ContinueBtn then self:BtnCall() end end AddClickEvent(self.closeBtn,clickFunc ) AddClickEvent(self.ModelBtn,clickFunc,LuaSoundManager.SOUND_UI.SWITCH) AddClickEvent(self.SureBtn,clickFunc,LuaSoundManager.SOUND_UI.SWITCH) AddClickEvent(self.ContinueBtn,clickFunc,LuaSoundManager.SOUND_UI.SWITCH) end function GuideSpiritView:StartLeaveTimer( time ) local onUpdate = function ( ) time = time - 1 if time<=0 then self.leaveTime.text = "" self:CancelLeaveTimer() self:Close() return end self.leaveTime.text = time.."s后自动关闭" end self.leaveTime.text = "" if not self.leave_timer_id then self.leaveTime.text = time.."s后自动关闭" self.leave_timer_id = GlobalTimerQuest:AddPeriodQuest(onUpdate, 1, -1) end onUpdate() end function GuideSpiritView:CancelLeaveTimer( ) if self.leave_timer_id then GlobalTimerQuest:CancelQuest(self.leave_timer_id) self.leave_timer_id = nil end end function GuideSpiritView:Remove() if self.event_id then self.model:UnBind(self.event_id) end self:CancelLeaveTimer() self:CancelDelayTimer() if self.model_timer_1 then TimerQuest.CancelQuest(GlobalTimerQuest, self.model_timer_1) self.model_timer_1 = nil end if self.model_timer_2 then TimerQuest.CancelQuest(GlobalTimerQuest, self.model_timer_2) self.model_timer_2 = nil end if self.model_timer_3 then TimerQuest.CancelQuest(GlobalTimerQuest, self.model_timer_3) self.model_timer_3 = nil end end function GuideSpiritView:ShowActiveAnim() if self.curr_Model == nil then self.curr_Model = lua_resM:GetPartModel(self, self.con) self.animator = self.curr_Model.gameObject:GetComponent("Animator") end if self.animator then self.animator.speed = 1 self.animator:Update(0) self.animator:CrossFade("shake",0.1, 0) if self.spirit_root == nil then self.spirit_root = self.curr_Model.transform:Find("Bone001") end if self.spirit_root then local function load_finish_func(go) if go then self:SetUILayer(go.transform) go.transform.localPosition = Vector3(0,0,0) go.transform.localScale = Vector3.one go.transform.localRotation = Quaternion.Euler(Vector3.zero) end end self:AddUIEffect("ui_partnersys_touchhot",self.spirit_root.transform,self.layer_name, nil, -1, false, -1, nil, nil, load_finish_func, nil, nil, true) end local cur_state = self.animator:GetCurrentAnimatorStateInfo(0) if cur_state then local action_time = cur_state.length self.model_timer_2 = setTimeout(function() self.SpiritCon:SetParent(self.con.transform) SetLocalRotation(self.SpiritCon) SetAnchoredPosition(self.SpiritCon,0,132) if self.BGEffect then self.BGEffect:SetParent(self.con.transform) end self.curr_Model.gameObject:SetActive(false) local spirit_Model = lua_resM:GetPartModel(self, self.SpiritCon) if spirit_Model then spirit_Model.transform.localRotation = Vector3(0,180,0) local spirit_animator = spirit_Model.gameObject:GetComponent("Animator") spirit_animator.speed = 1 spirit_animator:Update(0) spirit_Model:PlayActions({"casual","idle"}) end self:AddUIEffect("ui_partnersys_breakout", self.EffectCon, self.layer_name, nil, {x=1,y=1,z=1}, true, nil, nil, nil, call_fun) self.model_timer_3 = setTimeout(function ( ) self.EffectCon.gameObject:SetActive(false) self:StartLeaveTimer(5) end,0.5) end,action_time) end end end function GuideSpiritView:BtnCall() self:Close() setTimeout(function () GlobalEventSystem:Fire(EventName.FORCE_TO_DO_TASK, true) end,0.2) end