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

165 lines
5.6 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.Generic;
namespace Gameplay.Guide
{
/// <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.IsGuiding; }
}
/// <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
/// <summary>
/// 引导组构造
/// </summary>
/// <param name="groupId"></param>
/// <param name="listCfg"></param>
/// <param name="isSkipBeginSkip">是否跳过起始步骤</param>
public GuideGroup(int groupId, List<DataGuideCfg> listCfg, bool isSkipBeginSkip = false)
{
GroupId = groupId;
linkGuideStep = new();
foreach (DataGuideCfg cfg in listCfg)
{
if (!isSkipBeginSkip)
{
linkGuideStep.AddLast(CreateGuideStep(cfg));
continue;
}
if (!cfg.IsBeginStep)
linkGuideStep.AddLast(CreateGuideStep(cfg));
}
curStep = linkGuideStep.First;
}
/// <summary>
/// 开始引导
/// </summary>
public async void BeginGuide()
{
if (null == curStep)
return;
DebugUtil.Log($"<color=#00FA9A>正常开始id为{curStep.Value.Cfg.Id}的引导</color>"); // #00FA9A绿色
await curStep.Value.StartGuide();
}
/// <summary>
/// 开始下一步引导
/// </summary>
public async void BeginNextStep()
{
curStep = curStep.Next;
DebugUtil.Log($"<color=#00FA9A>开始下一步引导开始id为{curStep.Value.Cfg.Id}的引导</color>"); // #00FA9A绿色
await curStep.Value.StartGuide();
}
/// <summary>
/// 结束引导
/// </summary>
public void EndGuide()
{
if (IsGuiding)
curStep.Value.EndGuide();
}
/// <summary>
/// 创建引导步骤
/// </summary>
/// <param name="dataGuideCfg"></param>
/// <returns></returns>
private GuideStepBase CreateGuideStep(DataGuideCfg dataGuideCfg)
{
if (null == dataGuideCfg)
return null;
return dataGuideCfg.GuideStepType switch
{
E_GuideStepType.PlayVideo => new PlayVideoStep(dataGuideCfg),
E_GuideStepType.ClickButton => new ClickButtonStep(dataGuideCfg),
E_GuideStepType.DragButton => new SliderButtonStep(dataGuideCfg),
E_GuideStepType.ClickFloor => new ClickFloorStep(dataGuideCfg),
E_GuideStepType.EnterHome => new EnterMainStateStep(dataGuideCfg),
E_GuideStepType.ShowGuideTip => new ShowGuideTipStep(dataGuideCfg),
E_GuideStepType.EnterLevel => new EnterLevelStep(dataGuideCfg),
E_GuideStepType.Embattle => new LevelEmbattleStep(dataGuideCfg),
E_GuideStepType.EmbattleVehicle => new LevelEmbattleStep(dataGuideCfg),
E_GuideStepType.WaitLevelComplete => new WaitLevelOver(dataGuideCfg),
E_GuideStepType.OpenChoosePerson => new OpenChoosePersonStep(dataGuideCfg),
E_GuideStepType.Wait => new WaitStep(dataGuideCfg),
E_GuideStepType.WaitOpenChangeName => new WaitOpenChangeName(dataGuideCfg),
E_GuideStepType.WaitEditTeam => new WaitEditTeamStep(dataGuideCfg),
E_GuideStepType.NoteStep => new NoteStep(dataGuideCfg),
E_GuideStepType.SaveDefaultTeam => new SaveDefaultTeamStep(dataGuideCfg),
E_GuideStepType.EnterEditTeam => new EnterEnterEditTeam(dataGuideCfg),
E_GuideStepType.EnterTeamInfo => new EnterEnterTeamInfo(dataGuideCfg),
E_GuideStepType.ClearTeam => new ClearTeamStep(dataGuideCfg),
E_GuideStepType.DragButtonBattle => new SliderButtonBattleStep(dataGuideCfg),
E_GuideStepType.DragButtonUseSkill => new SliderButtonUseSkillStep(dataGuideCfg),
E_GuideStepType.DragButtonUsePlayerSkill => new SliderButtonUsePlayerSkillStep(dataGuideCfg),
E_GuideStepType.SelectTeam => new SelectTeamStep(dataGuideCfg),
_ => throw new Exception($"未处理类型:{dataGuideCfg.GuideStepType}"),
}; ;
}
}
}