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

131 lines
2.9 KiB
C#
Raw Normal View History

2024-05-22 19:08:14 +08:00
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>
2024-05-24 19:11:19 +08:00
private LinkedListNode<GuideStepBase> curStep;
#region 属性
2024-05-28 18:47:23 +08:00
/// <summary>
/// 引导组id
/// </summary>
public int GroupId
{
get; private set;
}
2024-05-24 19:11:19 +08:00
/// <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
2024-05-22 19:08:14 +08:00
2024-05-28 18:47:23 +08:00
public GuideGroup(int groupId, LinkedList<DataGuideCfg> linkCfg)
2024-05-22 19:08:14 +08:00
{
2024-05-28 18:47:23 +08:00
GroupId = groupId;
2024-05-22 19:08:14 +08:00
linkGuideStep = new();
foreach (DataGuideCfg cfg in linkCfg)
{
linkGuideStep.AddLast(CreateGuideStep(cfg));
}
curStep = linkGuideStep.First;
}
/// <summary>
/// 开始引导
/// </summary>
public void BeginGuide()
{
2024-05-24 19:11:19 +08:00
if (null == curStep)
return;
2024-05-22 19:08:14 +08:00
2024-05-24 19:11:19 +08:00
curStep.Value.StartGuide();
}
/// <summary>
/// 开始下一步引导
/// </summary>
public void BeginNextStep()
{
curStep = curStep.Next;
curStep.Value.StartGuide();
2024-05-22 19:08:14 +08:00
}
/// <summary>
/// 结束引导
/// </summary>
public void EndGuide()
{
}
/// <summary>
/// 创建引导步骤
/// </summary>
/// <param name="dataGuideCfg"></param>
/// <returns></returns>
private GuideStepBase CreateGuideStep(DataGuideCfg dataGuideCfg)
{
if (null == dataGuideCfg)
return null;
2024-05-24 19:11:19 +08:00
2024-05-27 13:32:18 +08:00
return dataGuideCfg.GuideType switch // TODO字符串测试用后续配置改枚举
2024-05-22 19:08:14 +08:00
{
"播放视频" => new PlayVideoStep(dataGuideCfg),
2024-05-24 19:11:19 +08:00
"点击按钮" => new ClickButtonStep(dataGuideCfg),
2024-05-28 13:40:44 +08:00
"进入主界面" => new FirstEnterMainStep(dataGuideCfg),
"显示引导提示" => new ShowGuideTipStep(dataGuideCfg),
2024-05-24 19:11:19 +08:00
"" => default,
_ => throw new Exception($"未处理类型:{dataGuideCfg.GuideType}"),
2024-05-22 19:08:14 +08:00
};
}
}