using cfg.GuideCfg; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Gameplay.Guide { /// /// 引导组 /// public class GuideGroup { /// /// 引导步骤 /// private readonly LinkedList linkGuideStep; /// /// 当前引导步骤 /// private LinkedListNode curStep; #region 属性 /// /// 引导组id /// public int GroupId { get; private set; } /// /// 是否引导中 /// public bool IsGuiding { get { return curStep != null && curStep.Value.IsGuiding; } } /// /// 是否引导完成 /// public bool IsComplete { get { return curStep != null && curStep == linkGuideStep.Last && E_GuideState.Complete == curStep.Value.GuideState; } } /// /// 当前引导步骤 /// public GuideStepBase CurStep { get { return curStep.Value; } } /// /// 获取下一步引导id /// public int NextGroupId { get { if (null == linkGuideStep.Last) return 0; return linkGuideStep.Last.Value.Cfg.NextId; } } #endregion /// /// 引导组构造 /// /// /// /// 是否跳过起始步骤 public GuideGroup(int groupId, LinkedList linkCfg, bool isSkipBeginSkip = false) { GroupId = groupId; linkGuideStep = new(); foreach (DataGuideCfg cfg in linkCfg) { if (!isSkipBeginSkip) { linkGuideStep.AddLast(CreateGuideStep(cfg)); continue; } if (!cfg.IsBeginStep) linkGuideStep.AddLast(CreateGuideStep(cfg)); } curStep = linkGuideStep.First; } /// /// 开始引导 /// public void BeginGuide() { if (null == curStep) return; curStep.Value.StartGuide(); } /// /// 开始下一步引导 /// public void BeginNextStep() { curStep = curStep.Next; curStep.Value.StartGuide(); } /// /// 开始指定步骤引导 /// /// public void BeginGuideById(int id) { curStep = linkGuideStep.First; while (null != curStep) { if (curStep.Value.Cfg.Id == id) break; curStep = curStep.Next; } curStep?.Value.StartGuide(); } /// /// 结束引导 /// public void EndGuide() { if (IsGuiding) { UIRoot.Instance.IsEnableGraphicRaycasterByGuide(true); curStep.Value.EndGuide(); } } /// /// 创建引导步骤 /// /// /// 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.TeachFightMove => new TeachFightMoveStep(dataGuideCfg), E_GuideStepType.TeachFightAttack => new TeachFightAttackStep(dataGuideCfg), E_GuideStepType.TeachFightEmbattle => new TeachFightEmbattle(dataGuideCfg), E_GuideStepType.TeachFightMoraleAndRepression => new TeachMoraleAndRepression(dataGuideCfg), E_GuideStepType.TeachFightUseSkill => new TeachUseSkill(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), _ => throw new Exception($"未处理类型:{dataGuideCfg.GuideStepType}"), }; } } }