Example #1
0
        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);
        }
Example #3
0
        /// <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();
        }
Example #4
0
        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);
        }
Example #5
0
        /// <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();
                }
            }
        }
Example #6
0
        /// <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);
            }
        }
Example #7
0
        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));
            }
        }
Example #8
0
        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);
            }
        }
Example #9
0
 /// <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);
        }
Example #11
0
        /// <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();
        }