Files
JJBB/Assets/Project/Script/GUI/Guide/GuideItem.cs

143 lines
3.5 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
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<GuideStepBase> _GuideSteps = new List<GuideStepBase>();
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<GuideStepBase>(true);
_GuideSteps = new List<GuideStepBase>(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
}