using Gameplay.HeroSelect; using Gameplay.Naming; using Gameplay.Net; using PhxhSDK; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Gameplay.FirstTimeFlow { /// /// 新号强制流程管理器 /// public sealed class FirstTimeFlowManager : Singlenton, IInitable { /// /// 强制流程步骤链表 /// private LinkedList linkStep; /// /// 当前步骤 /// public FirstTimeFlowStep CurStep { get; private set; } /// /// 是否强制流程中 /// public bool IsFlowing { get { return null != CurStep; } } /// /// 是否有下一步 /// public bool IsHasNextStep { get { return linkStep.Count > 0; } } /// /// 是否在剧情中需要设置角色 /// /// public bool IsNeedSetHeroByStory { get { #if FIRST_TIME_FLOW return CurStep is EnterStoryLevel1Step && !HeroSelectManager.Instance.IsSetHero; #else return false; #endif } } /// /// 是否需要在剧情中设置名字 /// public bool IsNeedSetNameByStory { get { #if FIRST_TIME_FLOW return CurStep is EnterStoryLevel2Step && !NamingManager.Instance.IsSetName; #else return false; #endif } } public void Init() { linkStep = new LinkedList(); } public void Release() { linkStep.Clear(); } /// /// 开始强制流程 /// /// 是否强制流程 public bool StartFirstTimeFlow() { #if FIRST_TIME_FLOW int severFlowId = (int)Actor.Instance.Logic.GetCount((uint)NLDPB.LogicID.NoviceProcessId); // 服务器所在强制流程步骤id if (severFlowId <= (int)E_FirstTimeFlow.StarVideo) linkStep.AddLast(PlayStartVideoStep.Create()); // 开始PV if (severFlowId <= (int)E_FirstTimeFlow.StoryLevel_1) linkStep.AddLast(EnterStoryLevel1Step.Create()); // 剧情1 if (severFlowId <= (int)E_FirstTimeFlow.FightLevel_1) linkStep.AddLast(EnterFightLevel1Step.Create()); // 特殊战斗1 if (severFlowId <= (int)E_FirstTimeFlow.StoryLevel_2) linkStep.AddLast(EnterStoryLevel2Step.Create()); // 剧情2 if (severFlowId <= (int)E_FirstTimeFlow.StoryLevel_3) linkStep.AddLast(EnterStoryLevel3Step.Create()); // 剧情3 if (severFlowId <= (int)E_FirstTimeFlow.FightLevel_2_EditTeam) linkStep.AddLast(FightLevel2EditTeamStep.Create()); // 特殊战斗2编队 if (severFlowId <= (int)E_FirstTimeFlow.StoryLevel_4) linkStep.AddLast(EnterStoryLevel4Step.Create()); // 剧情4 if (severFlowId <= (int)E_FirstTimeFlow.EndVideo) { linkStep.AddLast(PlayEndVideoStep.Create()); // 结束PV linkStep.AddLast(EndFirstTimeFlowStep.Create()); // 结束强制流程 } if (IsHasNextStep) { StartNextStep(); return true; } #endif return false; } /// /// 开始下一个步骤 /// public void StartNextStep() { CurStep = linkStep.First.Value; linkStep.RemoveFirst(); NetHelper.SaveGuideProgress(NLDPB.LogicID.NoviceProcessId, (int)CurStep.FirstTimeFlow); DebugUtil.Log($"保存强制流程{CurStep.FirstTimeFlow}"); CurStep.Run(); } /// /// 结束强制流程 /// public void EndFirstTimeFlow() { CurStep = null; linkStep.Clear(); } } }