using UnityEngine; using System.Collections; using System.Collections.Generic; using Module.Log; public enum TriggerType { AcceptMission, ComplateMission, LevelUp, FinishMission, UIOpen, } public class GuideItem : MonoBehaviour { public int _GuideID; public TriggerType _TriggerType; public int _TriggerMissionID; public string _TriggetParam; public List _GuideSteps = new List(); public int _RestartIdx = 0; public string _CloseUIFinish; public bool _ClearOtherUI = true; public bool _RepeatGuide = false; public int _LimitLv = 60; public bool _AutoNextMainMission = true; private int _GuideStep = 0; public void InitSteps() { var steps = GetComponentsInChildren(true); _GuideSteps = new List(steps); foreach (var step in _GuideSteps) { step.BelongGuideItem = this; step.gameObject.SetActive(false); } } public void CloseUI(string uiName) { //if (_CloseUIFinish == uiName && gameObject.activeInHierarchy) //{ // //FinishGuide(); // NextStep(); //} } public void StartGuide() { gameObject.SetActive(true); Guide.Instance.UpdateGuideID(_GuideID); for (int i = 0; i < GuideLogic.Instance().BtnFuncs.Count; ++i) { GuideLogic.Instance().BtnFuncs[i].UpdateFuncState(); } if (_GuideSteps.Count == 0) { FinishGuide(); return; } if (_ClearOtherUI) { UIManager.ClosePopUI(); LuaUIManager.Instance.ClearAllPop(true); } _GuideStep = 0; _GuideSteps[_GuideStep].StartGuideStep(); } public void FinishGuide() { gameObject.SetActive(false); GuideLogic.Instance().SetForceBackActive(false); GuideLogic.Instance().FinishGuide(this); //完成任务的时候如果有指引的话话设置为true,在接到任务的时候不会寻路 //所以要在指引结束的地方设置为false GuideLogic._isShowCompleteMissionGuide = false; LogModule.DebugLog("FinishGuide"); for (int i = 0; i < _GuideSteps.Count; ++i) { _GuideSteps[i].StopGuideStep(); } UIManager.CloseUI(UIInfo.GuideRoot); ShowNextMission(); } public void NextStep() { StartCoroutine(StartNext()); } public IEnumerator StartNext() { yield return new WaitForFixedUpdate(); ++_GuideStep; if (_GuideStep > _GuideSteps.Count - 1) { FinishGuide(); yield break; } _GuideSteps[_GuideStep].StartGuideStep(); } public void ReStart() { StartCoroutine(ReStartLater()); } public IEnumerator ReStartLater() { yield return new WaitForEndOfFrame(); _GuideStep = _RestartIdx; _GuideSteps[_GuideStep].StartGuideStep(); } #region nextMission private int _NextMissionID = -1; public void SetNextMission(int nextMissionID) { _NextMissionID = nextMissionID; } public void ShowNextMission() { if (GuideLogic.Instance().NextMissionID > 0 && _AutoNextMainMission) { GuideLogic.MissionFindNext(GuideLogic.Instance().NextMissionID); } GuideLogic.Instance().NextMissionID = -1; } #endregion }