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();
}
}
}