GuideMasktView = GuideMasktView or BaseClass(BaseView) GuideMasktView.FORCE_MASK_HELP_STEP = 7 --=强制黑色遮罩提示,所有的强制遮罩都做一起 function GuideMasktView:__init() self.base_file = "guide" self.layout_file = "GuideMasktView" self.layer_name = "Activity" self.destroy_imm = true self.hide_maincancas = false self.model = GuideModel:getInstance() self.arrow_component = nil --箭头组件 self.change_scene_close = true self.append_to_ctl_queue = true self.time_diff = 10 self.load_callback = function () self:LoadSuccess() self:InitEvent() end self.open_callback = function () GlobalEventSystem:Fire(EventName.STOP_AUTO_DO_TASK) self:ShowPrompt() end self.close_callback = function () GlobalEventSystem:Fire(EventName.START_AUTO_DO_TASK) end self.destroy_callback = function () self:Clear() end self.x = 0 self.y = 0 self.w = 0 self.h = 0 --黑幕的alpha值 self.alpha_value = 0.5 self.ref_tar = nil self.prompt_type = nil end function GuideMasktView:Open(ref_tar,prompt_type) self.ref_tar = ref_tar self.prompt_type = prompt_type BaseView.Open(self) end function GuideMasktView:ShowPrompt() local prompt_type = self.prompt_type if prompt_type == GuideMasktView.FORCE_MASK_HELP_STEP then self:ForceMaskHelpPrompt_1() end self:SetSkipBtnEvent() end function GuideMasktView:SetSkipBtnEvent() local function onBtnClickHandler(target) if target == self.skip_btn then local prompt_type = self.prompt_type if prompt_type == GuideMasktView.FORCE_MASK_HELP_STEP then local helpVo = GuideModel:getInstance():GetCurHelpVo() if helpVo then GlobalEventSystem:Fire(EventName.FINISH_CURRENT_HELP_STEP,helpVo) end ItemUseModel:getInstance():ShowItemUseView() GuideModel:getInstance():ShowUILayUI() end self:Close() end end AddClickEvent(self.skip_btn,onBtnClickHandler) end function GuideMasktView:Clear() if self.delay_timer then GlobalTimerQuest:CancelQuest(self.delay_timer) self.delay_timer = nil end if self.trigger_skill_id then GlobalEventSystem:UnBind(self.trigger_skill_id) self.trigger_skill_id = nil end if self.arrow_component then self.arrow_component:DeleteMe() self.arrow_component = nil end ItemUseModel:getInstance():ShowItemUseView() GuideModel:getInstance():ShowUILayUI() self:CancelTimer() end function GuideMasktView:Close() BaseView.Close(self) end function GuideMasktView:LoadSuccess() --左上 self.C2 = UiFactory.createChild(self.transform,UIType.ImageExtend,"C2") self.C2.transform.pivot = Vector2(0,1) self.C2.transform:SetAsFirstSibling() self.C2_Image = self.C2:GetComponent("ImageExtend") self.C2_Image.color = Color(0,0,0,self.alpha_value) --左下 self.C4 = UiFactory.createChild(self.transform,UIType.ImageExtend,"C4") self.C4.transform.pivot = Vector2(0,0) self.C4.transform:SetAsFirstSibling() self.C4_Image = self.C4:GetComponent("ImageExtend") self.C4_Image.color = Color(0,0,0,self.alpha_value) --右上 self.C6 = UiFactory.createChild(self.transform,UIType.ImageExtend,"C6") self.C6.transform.pivot = Vector2(1,1) self.C6.transform:SetAsFirstSibling() self.C6_Image = self.C6:GetComponent("ImageExtend") self.C6_Image.color = Color(0,0,0,self.alpha_value) --右下 self.C8 = UiFactory.createChild(self.transform,UIType.ImageExtend,"C8") self.C8.transform.pivot = Vector2(1,0) self.C8.transform:SetAsFirstSibling() self.C8_Image = self.C8:GetComponent("ImageExtend") self.C8_Image.color = Color(0,0,0,self.alpha_value) self.mask_btn = self:GetChild("MaskBtn").gameObject self.mask_image = self:GetChild("MaskBtn") self.mask_image.sizeDelta = Vector3(ScreenWidth,ScreenHeight,0) self.focus_point = self:GetChild("FocusPoint") self.skip_btn = self:GetChild("SkipBtn").gameObject self.skip_btn_txt = self:GetChild("SkipBtn/Text"):GetComponent("Text") self.skip_btn.transform.localPosition = Vector3(ScreenWidth/2 - 90 ,ScreenHeight/2 - 50,0) self.image_btn = self:GetChild("Image").gameObject self.image_btn_dot = self:GetChild("Image/Dot").gameObject end function GuideMasktView:InitEvent() local function onTriggerSkillForceHelp() if self.prompt_type == GuideMasktView.FORCE_MASK_HELP_STEP then ItemUseModel:getInstance():ShowItemUseView() GuideModel:getInstance():ShowUILayUI() self:Close() end end self.trigger_skill_id = GlobalEventSystem:Bind(EventName.FINISH_FORCE_MASK_HELPER,onTriggerSkillForceHelp) end -- 是否显示黑屏 function GuideMasktView:ScreenVisible(b) self.C2:SetActive(b) self.C4:SetActive(b) self.C6:SetActive(b) self.C8:SetActive(b) end -- 黑屏透明度 function GuideMasktView:ScreenAlpha(b) local alpha_value = b or self.alpha_value self.C2_Image.alpha = alpha_value self.C4_Image.alpha = alpha_value self.C6_Image.alpha = alpha_value self.C8_Image.alpha = alpha_value end --设置矩形遮罩的位置 function GuideMasktView:UpdateRectMask(x,y,w,h) local width,height = nil self.C2.transform.localPosition = Vector3(-ScreenWidth/2,ScreenHeight/2,0) width = ScreenWidth/2 + x - w / 2 height = ScreenHeight / 2 - y + h / 2 self.C2.transform.sizeDelta = Vector2(width,height) self.C4.transform.localPosition = Vector3(-ScreenWidth/2,-ScreenHeight/2,0) width = ScreenWidth/2 + x + w / 2 height = ScreenHeight / 2 + y - h/2 self.C4.transform.sizeDelta = Vector2(width,height) self.C6.transform.localPosition = Vector3(ScreenWidth/2,ScreenHeight/2,0) width = ScreenWidth/2 - x + w / 2 height = ScreenHeight / 2 - y - h/2 self.C6.transform.sizeDelta = Vector2(width,height) self.C8.transform.localPosition = Vector3(ScreenWidth/2,-ScreenHeight/2,0) width = ScreenWidth/2 - x - w / 2 height = ScreenHeight / 2 + y + h/2 self.C8.transform.sizeDelta = Vector2(width,height) end --获取聚焦点的信息 function GuideMasktView:SetFocusPointMsg(mount_point,w,h,x_offset,y_offset) self.focus_point:SetParent(mount_point) self.focus_point.localPosition = Vector3(0,0,0) self.focus_point:SetParent(self.transform) self.x = self.focus_point.localPosition.x + (x_offset or 0) self.y = self.focus_point.localPosition.y + (y_offset or 0) local sizeDelta = mount_point.sizeDelta self.w = w or sizeDelta.x self.h = h or sizeDelta.y end function GuideMasktView:SetDefaultFocusPoint() self.x = 0 self.y = 0 self.w = 0 self.h = 0 end function GuideMasktView:ForceMaskHelpPrompt_1() self:ScreenAlpha(0) self:ScreenVisible(true) self.skip_btn:SetActive(false) self.mask_btn:SetActive(true) local function callback( ) self:ScreenAlpha() self.mask_btn:SetActive(false) self.skip_btn:SetActive(true) local helpVo = GuideModel:getInstance():GetCurHelpVo() if helpVo then local param = tonumber(helpVo.param) self.model.force_mask_index = param local btn if param == 1 then if self.ref_tar and self.ref_tar.icon_list and self.ref_tar.icon_list[157] then btn = self.ref_tar.icon_list[157] end elseif param == 2 then if self.ref_tar and self.ref_tar.icon_list and self.ref_tar.icon_list[416] then btn = self.ref_tar.icon_list[416] self:SetImagefor_416() end end if btn then if self.model:IsBottomForceMask() then self:SetFocusPointMsg(btn.transform) elseif self.model:IsTopForceMask() then self:SetFocusPointMsg(btn.transform,80,80,0,9) end --mask 是为了 changehide的时候不让玩家点击 self.mask_btn:SetActive(false) else self:SetDefaultFocusPoint() self.mask_btn:SetActive(true) end end if not self.arrow_component then self.arrow_component = ArrowComponent.New(self.transform) end self.arrow_component:ShowArrow(1,co.TableXY(self.x - 90 ,self.y),310) self:UpdateRectMask(self.x,self.y,self.w,self.h) local function click_func() self:Close() end AddClickEvent(self.mask_btn,click_func) if helpVo then GlobalEventSystem:Fire(EventName.FINISH_CURRENT_HELP_STEP,helpVo) end self:CancelTimer() self:StartTimer() end --如果是隐藏则执行动画 在执行引导,如果不是则马上执行引导 if self.model:IsBottomForceMask() then if self.ref_tar and self.ref_tar.ShowShortCutList then if self.ref_tar.show_skill_icon and not self.model:IsBagForceMask() then self.ref_tar:ShowShortCutList(false) else callback() return end end elseif self.model:IsTopForceMask() then if self.ref_tar and self.ref_tar.ChangeHide then if self.ref_tar.is_hide then self.ref_tar:ChangeHide(false) else callback() return end end end if self.delay_timer == nil then local function delay_callback( ) callback() end self.delay_timer = GlobalTimerQuest:AddDelayQuest(delay_callback,0.6) end end function GuideMasktView:StartTimer() local function onTimer() if self.time_diff > 0 then self.skip_btn_txt.text = "跳过(" ..self.time_diff .."秒)" self.time_diff = self.time_diff - 1 else self:CancelTimer() self:Close() end end self.timer_id = GlobalTimerQuest:AddPeriodQuest(onTimer, 1, -1) onTimer() end function GuideMasktView:CancelTimer() if self.timer_id then GlobalTimerQuest:CancelQuest(self.timer_id) self.timer_id = nil end end function GuideMasktView:SetImagefor_416() self.image_btn_dot:SetActive(true) lua_resM:setImageSprite(self,self.image_btn:GetComponent("Image"),"mainUI_asset",416,true) if self.ref_tar then local pos = self.ref_tar:GetFuncIconPos(416) self.image_btn.transform.localPosition = pos end local function onBtnClickHandler(target) if target == self.image_btn then GlobalEventSystem:Fire(EventName.FINISH_FORCE_MASK_HELPER) GlobalEventSystem:Fire(EventName.OPEN_SEVEN_DAYS_VIEW) end end AddClickEvent(self.image_btn, onBtnClickHandler,LuaSoundManager.SOUND_UI.SWITCH) end