public void Reset() { m_ListeningStepDict.Clear(); m_ForceStartStepDict.Clear(); if (m_UpdateTimer != null) { m_UpdateTimer.Destroy(); m_UpdateTimer = null; } if (m_DBGuide != null) { m_DBGuide.Reset(); m_DBGuide = null; } if (m_DBGuideStep != null) { m_DBGuideStep.Reset(); m_DBGuideStep = null; } m_FinishedBranchTask.Clear(); m_TimelineStatus.Clear(); m_Dirty = false; m_IsPlayingGuideStep = false; m_PlayingGuideStep = null; mPlayingGuide = null; m_ListenerStarted = false; }
public override bool IsAchieve(Guide.Step step) { var target = GuideManager.Instance.GetWidgetByPath(WidgetPath); bool nowState = false; if (step.DisplayType == EDisplayType.Region) // 区域显示类型的,先判断节点已经Active,再做射线检测 { if (target == null || !target.activeInHierarchy) { nowState = false; } else { NoDrawingRayCast noDrawingRayCast = target.GetComponent <NoDrawingRayCast>(); if (noDrawingRayCast == null) { noDrawingRayCast = target.AddComponent <NoDrawingRayCast>(); } if (noDrawingRayCast != null) { noDrawingRayCast.raycastTarget = true; } nowState = GuideManager.Instance.IsWidgetVisible(target); if (noDrawingRayCast != null) { noDrawingRayCast.raycastTarget = false; } } } else { nowState = GuideManager.Instance.IsWidgetVisible(target); } nowState = nowState && GuideManager.Instance.MatchComponent(target, WidgetPath); if (nowState && m_LastVisiable) { if (target != null) { UIFinishGuideBtn finishGuideBtn = target.GetComponent <UIFinishGuideBtn>(); if (finishGuideBtn == null) { finishGuideBtn = target.AddComponent <UIFinishGuideBtn>(); finishGuideBtn.GuideId = step.GuideId; finishGuideBtn.StepId = step.StepId; } } return(true); } // 延迟一帧 m_LastVisiable = nowState; return(false); }
/// <summary> /// 引导对象,但点击任意地方继续(支持没有目标物体,比如显示图片) /// </summary> /// <param name="guide_step"></param> /// <param name="target"></param> public void GuideClickMask(Guide.Step guide_step, GameObject target) { CleanupLastGuide(); m_GuideStep = guide_step; GuideGameObject guide_obj = null; if (target != null) { guide_obj = new GuideGameObject(this, target); m_GuideObject = guide_obj; } else { m_GuideObject = null; } SetupGenericEventListener(null, (click_obj) => { if (m_GuideStep != null && m_GuideStep.TargetTrigger != null) { m_GuideStep.TargetTrigger.NotifyClick(); } else { Close(); } }); if (guide_obj != null) { guide_obj.CopyTargetObj(); } // 显示区域类型的控件不可点击` if (guide_step.DisplayType == Guide.EDisplayType.Region) { if (guide_obj != null) { guide_obj.TargetCanbeHit = false; } else { GameDebug.LogError(string.Format("GuideClickMask: guide_step {0} cannot find guide object", guide_step.StepId)); } } //Debug.Log("GuideClickMask" + guide_step.GuideId + " " + guide_step.StepId); // 一定要加mask SetupMask(true); UpdateArrowTips(); StartUpdateTimer(); TryPlayVoice(); }
private bool TryToStartGuideStep(Guide.Step guideStep) { if (guideStep == null || guideStep.TargetTrigger == null) { return(false); } m_IsPlayingGuideStep = guideStep.TryToStartup(); if (m_IsPlayingGuideStep) { m_PlayingGuideStep = guideStep; mPlayingGuide = m_DBGuide.GetGuideById(guideStep.GuideId); mPlayingGuide.StartPlayerLevel = LocalPlayerManager.Instance.LocalActorAttribute.Level; mPlayingGuide.StartTime = Game.Instance.ServerTime; // 强制指引才停止寻路 if (guideStep.IsForcible) { TargetPathManager.Instance.StopPlayerAndReset(); } // 暂停副本 if (guideStep.IsPause) { var local_player = Game.Instance.GetLocalPlayer(); if (local_player != null) { local_player.Stop(); } C2SDungeonStopAi stop_ai = new C2SDungeonStopAi(); NetClient.GetBaseClient().SendData <C2SDungeonStopAi>(NetMsg.MSG_DUNGEON_STOP_AI, stop_ai); InstanceHelper.PauseInstance(); } ClientEventMgr.GetInstance().FireEvent((int)ClientEvent.CE_GUIDESTART, new CEventBaseArgs(guideStep.GuideId)); // 为了防止新手配置问题导致引导一直卡住,在第一次播放引导时就标记为已完成 /*if (guideStep.StepId == 1 && !guideStep.IsForcible) * { * if (!TestGuide) * { * SendFinishGuide(guideStep.GuideId); * } * }*/ } return(m_IsPlayingGuideStep); }
/// <summary> /// 点击目标物体的回调 /// </summary> /// <param name="click_obj"></param> /// <param name="guide_obj"></param> /// <param name="guide_step"></param> void OnClickTarget(GameObject click_obj, GuideGameObject guide_obj, Guide.Step guide_step) { if (m_GuideStep == null || mUIObject == null) { return; } if ((guide_obj.CopyObj != null && click_obj == guide_obj.CopyObj) || (guide_obj.CopyObj == null && click_obj == guide_obj.TargetObject)) { if (guide_obj.TargetObject == null) { Close(); return; } // 执行guide_obj.TargetObject的点击事件 if (guide_step.EventType == 1) { ExecuteEvents.Execute <IPointerClickHandler>(guide_obj.TargetObject, new PointerEventData(EventSystem.current), ExecuteEvents.pointerClickHandler); } else { ExecuteEvents.Execute <IPointerDownHandler>(guide_obj.TargetObject, new PointerEventData(EventSystem.current), ExecuteEvents.pointerDownHandler); ExecuteEvents.Execute <IPointerUpHandler>(guide_obj.TargetObject, new PointerEventData(EventSystem.current), ExecuteEvents.pointerUpHandler); } if (click_obj != null) { var event_listen = EventTriggerListener.GetListener(click_obj); event_listen.onPointerClick -= OnClick; } if (m_GuideStep != null && m_GuideStep.TargetTrigger != null) { m_GuideStep.TargetTrigger.NotifyClick(); } else { Close(); } } }
/// <summary> /// 与服务端同步指引步骤 /// </summary> /// <param name="guide_id"></param> /// <param name="finish_type"> 完成引导的类型 (1: 正常 0: 跳过)</param> void SendFinishGuide(uint guide_id, Guide.Step guide_step, uint finish_type) { var pack = new C2SPlayerGuideMark(); pack.guide_id = guide_id; NetClient.GetBaseClient().SendData <C2SPlayerGuideMark>(NetMsg.MSG_PLAYER_GUIDE_MARK, pack); var guide = m_DBGuide.GetGuideById(guide_id); if (guide_step != null && guide != null) { var guide_log = new C2SPlayerGuideLog(); guide_log.guide_id = guide_id; guide_log.sub_id = guide_step.StepId; guide_log.start_time = guide.StartTime; guide_log.start_lv = guide.StartPlayerLevel; guide_log.finish_type = finish_type; guide_log.state = 1; // 默认都是成功的 NetClient.GetBaseClient().SendData <C2SPlayerGuideLog>(NetMsg.MSG_PLAYER_GUIDE_LOG, guide_log); } }
static int _m_TryToResetGuideStep(RealStatePtr L) { ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L); xc.GuideManager __cl_gen_to_be_invoked = (xc.GuideManager)translator.FastGetCSObj(L, 1); try { { Guide.Step guideStep = (Guide.Step)translator.GetObject(L, 2, typeof(Guide.Step)); __cl_gen_to_be_invoked.TryToResetGuideStep(guideStep); return(0); } } catch (System.Exception __gen_e) { return(LuaAPI.luaL_error(L, "c# exception:" + __gen_e)); } }
public override void Close() { ClearTargetObjEvent(); if (m_GuideObject != null) { m_GuideObject.Cleanup(); m_GuideObject = null; } m_GuideStep = null; ClearArrowTips(); m_Mask.SetActive(false); m_EventMask.SetActive(false); CleanupUpdateTimer(); DestroyPreviewModel(); if (mHideWidgetTransform != null) { HideWidget(mHideWidgetTransform.gameObject, false); } }
/// <summary> /// 触发的条件是否达到 /// </summary> /// <returns></returns> public abstract bool IsAchieve(Guide.Step step);
public override bool IsAchieve(Guide.Step step) { var mainmap_window = UIManager.Instance.GetWindow("UIMainmapWindow"); if (mainmap_window == null || !mainmap_window.IsShow) { return(false); } var mainmap_system = mainmap_window.GetBehaviour("UIMainMapSysOpenBehaviour") as UIMainMapSysOpenBehaviour; if (mainmap_system == null) { return(false); } var sys_config = DBManager.Instance.GetDB <DBSysConfig>().GetConfigById(SysId); if (sys_config == null) { return(false); } var target_btn = mainmap_system.GetConfingBtn(sys_config); if (target_btn == null) { return(false); } if (target_btn.Btn == null) { return(false); } UIFinishGuideBtn finishGuideBtn = target_btn.Btn.gameObject.GetComponent <UIFinishGuideBtn>(); if (finishGuideBtn == null) { finishGuideBtn = target_btn.Btn.gameObject.AddComponent <UIFinishGuideBtn>(); finishGuideBtn.GuideId = step.GuideId; finishGuideBtn.StepId = step.StepId; } // 强制指引需要展开系统所在的按钮栏 if (!GuideManager.Instance.IsWidgetVisible(target_btn.Btn.gameObject)) { if (step.IsForcible) { switch (sys_config.Pos) { case DBSysConfig.ESysBtnPos.SYS_LBBTN_POS: { if (SceneHelp.Instance.IsInWildInstance()) { ClientEventMgr.GetInstance().FireEvent((int)ClientEvent.CE_SYS_WAIT_OPEN_SWITCH_ANIMATION, new CEventBaseArgs("LBRect")); ClientEventMgr.GetInstance().FireEvent((int)ClientEvent.CE_GUIDE_UNFOLD_SYS_BTN, new CEventBaseArgs("LBRect")); } else { ClientEventMgr.GetInstance().PostEvent((int)ClientEvent.CE_SYS_WAIT_OPEN_SWITCH_ANIMATION, new CEventBaseArgs("LBRect")); ClientEventMgr.GetInstance().PostEvent((int)ClientEvent.CE_GUIDE_UNFOLD_SYS_BTN, new CEventBaseArgs("LBRect")); } } break; case DBSysConfig.ESysBtnPos.SYS_TRBTN_POS: { if (SceneHelp.Instance.IsInWildInstance()) { ClientEventMgr.GetInstance().FireEvent((int)ClientEvent.CE_SYS_WAIT_OPEN_SWITCH_ANIMATION, new CEventBaseArgs("TRRect")); } else { ClientEventMgr.GetInstance().PostEvent((int)ClientEvent.CE_SYS_WAIT_OPEN_SWITCH_ANIMATION, new CEventBaseArgs("TRRect")); } } break; } } return(false); } return(true); }
/// <summary> /// 点击引导对象 /// </summary> /// <param name="guide_step"></param> /// <param name="target">要引导的对象</param> public void GuideClick(Guide.Step guide_step, GameObject target) { CleanupLastGuide(); if (target == null) { return; } if (guide_step == null) { return; } m_GuideStep = guide_step; if (m_GuideObject != null) { m_GuideObject.Cleanup(); m_GuideObject = null; } var guide_obj = new GuideGameObject(this, target); m_GuideObject = guide_obj; if (!m_GuideStep.IsForcible) { // 非强制时监听其点击事件 SetupTargetClickEventListener(guide_obj.TargetObject, m_GuideStep.ClickAny, OnClickTarget); } else { guide_obj.CopyTargetObj(); if (target != null) { string hide_widget = m_GuideStep.HideWidget; if (string.IsNullOrEmpty(hide_widget) == false) { if (target.name == hide_widget) { mHideWidgetTransform = target.transform; } else { mHideWidgetTransform = UIHelper.FindChildInHierarchy(target.transform, hide_widget); } if (mHideWidgetTransform != null) { HideWidget(mHideWidgetTransform.gameObject, true); } } } GameObject listen_object = guide_obj.CopyObj != null ? guide_obj.CopyObj : guide_obj.TargetObject; SetupGenericEventListener(listen_object, (click_obj) => { if (m_GuideStep == null || mUIObject == null) { return; } if ((guide_obj.CopyObj != null && click_obj == guide_obj.CopyObj) || (guide_obj.CopyObj == null && click_obj == guide_obj.TargetObject)) { if (guide_obj.TargetObject == null) { Close(); return; } // 执行guide_obj.TargetObject的点击事件 if (guide_step.EventType == 1) { ExecuteEvents.Execute <IPointerClickHandler>(guide_obj.TargetObject, new PointerEventData(EventSystem.current), ExecuteEvents.pointerClickHandler); } else { ExecuteEvents.Execute <IPointerDownHandler>(guide_obj.TargetObject, new PointerEventData(EventSystem.current), ExecuteEvents.pointerDownHandler); ExecuteEvents.Execute <IPointerUpHandler>(guide_obj.TargetObject, new PointerEventData(EventSystem.current), ExecuteEvents.pointerUpHandler); } if (mHideWidgetTransform != null) { HideWidget(mHideWidgetTransform.gameObject, false); } if (click_obj != null) { var event_listen = EventTriggerListener.GetListener(click_obj); event_listen.onPointerClick -= OnClick; } if (m_GuideStep != null && m_GuideStep.TargetTrigger != null) { m_GuideStep.TargetTrigger.NotifyClick(); } else { Close(); } } }); } //Debug.Log("GuideClick" + guide_step.GuideId + " " + guide_step.StepId); SetupMask(); UpdateArrowTips(); StartUpdateTimer(); TryPlayVoice(); }