165 lines
5.6 KiB
C#
165 lines
5.6 KiB
C#
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}"),
|
||
}; ;
|
||
}
|
||
}
|
||
} |