NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Guide/GuideGroup.cs

131 lines
2.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using cfg.GuideCfg;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 引导组
/// </summary>
public class GuideGroup
{
/// <summary>
/// 引导步骤
/// </summary>
private readonly LinkedList<GuideStepBase> linkGuideStep;
/// <summary>
/// 当前引导步骤
/// </summary>
private LinkedListNode<GuideStepBase> curStep;
#region 属性
/// <summary>
/// 引导组id
/// </summary>
public int GroupId
{
get; private set;
}
/// <summary>
/// 是否引导中
/// </summary>
public bool IsGuiding
{
get{ return curStep != null && curStep.Value.GuideState == E_GuideState.Guiding; }
}
/// <summary>
/// 是否引导完成
/// </summary>
public bool IsComplete
{
get { return curStep != null && curStep == linkGuideStep.Last && E_GuideState.Complete == curStep.Value.GuideState; }
}
/// <summary>
/// 当前引导步骤
/// </summary>
public GuideStepBase CurStep
{
get { return curStep.Value; }
}
/// <summary>
/// 获取下一步引导id
/// </summary>
public int NextGroupId
{
get
{
if (null == linkGuideStep.Last)
return 0;
return linkGuideStep.Last.Value.Cfg.NextId;
}
}
#endregion
public GuideGroup(int groupId, LinkedList<DataGuideCfg> linkCfg)
{
GroupId = groupId;
linkGuideStep = new();
foreach (DataGuideCfg cfg in linkCfg)
{
linkGuideStep.AddLast(CreateGuideStep(cfg));
}
curStep = linkGuideStep.First;
}
/// <summary>
/// 开始引导
/// </summary>
public void BeginGuide()
{
if (null == curStep)
return;
curStep.Value.StartGuide();
}
/// <summary>
/// 开始下一步引导
/// </summary>
public void BeginNextStep()
{
curStep = curStep.Next;
curStep.Value.StartGuide();
}
/// <summary>
/// 结束引导
/// </summary>
public void EndGuide()
{
}
/// <summary>
/// 创建引导步骤
/// </summary>
/// <param name="dataGuideCfg"></param>
/// <returns></returns>
private GuideStepBase CreateGuideStep(DataGuideCfg dataGuideCfg)
{
if (null == dataGuideCfg)
return null;
return dataGuideCfg.GuideType switch // TODO字符串测试用后续配置改枚举
{
"播放视频" => new PlayVideoStep(dataGuideCfg),
"点击按钮" => new ClickButtonStep(dataGuideCfg),
"进入主界面" => new FirstEnterMainStep(dataGuideCfg),
"显示引导提示" => new ShowGuideTipStep(dataGuideCfg),
"" => default,
_ => throw new Exception($"未处理类型:{dataGuideCfg.GuideType}"),
};
}
}