NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/FirstTimeFlow/FirstTimeFlowStep.cs

314 lines
8.4 KiB
C#

using Framework;
using Gameplay.Level;
using System.Linq;
namespace Gameplay.FirstTimeFlow
{
/// <summary>
/// 强制流程步骤基类
/// </summary>
public abstract class FirstTimeFlowStep
{
public E_FirstTimeFlow FirstTimeFlow { get; private set; }
public FirstTimeFlowStep(E_FirstTimeFlow firstTimeFlow)
{
FirstTimeFlow = firstTimeFlow;
}
public abstract void Run();
}
/// <summary>
/// 播放开始PV
/// </summary>
public sealed class PlayStartVideoStep : FirstTimeFlowStep
{
/// <summary>
/// 创建播放PV步骤
/// </summary>
/// <param name="videoPath">视频路径</param>
/// <returns></returns>
public static PlayStartVideoStep Create()
{
return new PlayStartVideoStep();
}
/// <summary>
/// 开始PV路径
/// </summary>
private const string START_PV_PATH = "Assets/Video/LevelIntro/LevelIntro_PV.mp4";
private PlayStartVideoStep():base(E_FirstTimeFlow.StarVideo)
{
}
public override async void Run()
{
await UI_PVAnimaPlayController.Open(START_PV_PATH, () => { FirstTimeFlowManager.Instance.StartNextStep(); });
}
}
/// <summary>
/// 进入剧情1关卡
/// </summary>
public sealed class EnterStoryLevel1Step : FirstTimeFlowStep
{
/// <summary>
/// 创建进入剧情关卡步骤
/// </summary>
/// <param name="videoPath">视频路径</param>
/// <returns></returns>
public static EnterStoryLevel1Step Create()
{
return new EnterStoryLevel1Step();
}
/// <summary>
/// 剧情关卡1id
/// </summary>
private const int LEVEL_ID = 300001;
private EnterStoryLevel1Step() : base(E_FirstTimeFlow.StoryLevel_1)
{
}
public override void Run()
{
LevelManager.Instance.TryEnterLevel(LEVEL_ID, null, null, true);
}
}
/// <summary>
/// 进入战斗关卡1
/// </summary>
public sealed class EnterFightLevel1Step : FirstTimeFlowStep
{
/// <summary>
/// 创建进入战斗关卡步骤
/// </summary>
/// <param name="videoPath">视频路径</param>
/// <returns></returns>
public static EnterFightLevel1Step Create()
{
return new EnterFightLevel1Step();
}
/// <summary>
/// 上阵的卡露拉角色id
/// </summary>
private const int CHARACTER_ID = 100011;
private EnterFightLevel1Step() : base(E_FirstTimeFlow.FightLevel_1)
{
}
public override void Run()
{
#region 保存一个默认编队
Team team = TeamEditManager.Instance.GetTeamByIndex(0); // 获取第一个队伍
if (null == team)
{
DebugUtil.LogError("队伍信息空");
return;
}
team.ClearTeam();
uint[] characters = new uint[] { 0, 0, 0, 0, 0 };
Team newTeam = new(team.TeamIndex,
team.Name,
team.IconNumber,
CHARACTER_ID,
characters.ToList(),
team.GetPlayerSkillIDs());
TeamEditManager.Instance.SaveTeam(newTeam);
#endregion
LevelManager.Instance.EnterLevelDirectly(TableManager.Instance.Tables.GlobalConfig.FirstTimeFlowFight1Id, null, null, false);
}
}
/// <summary>
/// 进入剧情2关卡
/// </summary>
public sealed class EnterStoryLevel2Step : FirstTimeFlowStep
{
/// <summary>
/// 创建进入剧情关卡步骤
/// </summary>
/// <param name="videoPath">视频路径</param>
/// <returns></returns>
public static EnterStoryLevel2Step Create()
{
return new EnterStoryLevel2Step();
}
/// <summary>
/// 剧情关卡1id
/// </summary>
private const int LEVEL_ID = 300002;
private EnterStoryLevel2Step() : base(E_FirstTimeFlow.StoryLevel_2)
{
}
public override void Run()
{
LevelManager.Instance.TryEnterLevel(LEVEL_ID, null, null, true);
}
}
/// <summary>
/// 进入剧情3关卡
/// </summary>
public sealed class EnterStoryLevel3Step : FirstTimeFlowStep
{
/// <summary>
/// 创建进入剧情关卡步骤
/// </summary>
/// <param name="videoPath">视频路径</param>
/// <returns></returns>
public static EnterStoryLevel3Step Create()
{
return new EnterStoryLevel3Step();
}
/// <summary>
/// 剧情关卡1id
/// </summary>
private const int LEVEL_ID = 300003;
private EnterStoryLevel3Step() : base(E_FirstTimeFlow.StoryLevel_3)
{
}
public override void Run()
{
LevelManager.Instance.TryEnterLevel(LEVEL_ID, null, null, true);
}
}
/// <summary>
/// 战斗关卡2编队
/// </summary>
public sealed class FightLevel2EditTeamStep : FirstTimeFlowStep
{
/// <summary>
/// 创建进入战斗关卡步骤
/// </summary>
/// <param name="videoPath">视频路径</param>
/// <returns></returns>
public static FightLevel2EditTeamStep Create()
{
return new FightLevel2EditTeamStep();
}
private FightLevel2EditTeamStep():base( E_FirstTimeFlow.FightLevel_2_EditTeam)
{
}
public override void Run()
{
#region 保存一个默认编队
Team team = TeamEditManager.Instance.GetTeamByIndex(0); // 获取第一个队伍
if (null == team)
{
DebugUtil.LogError("队伍信息空");
return;
}
team.ClearTeam();
uint[] characters = new uint[] { 0, 0, 0, 0, 0 };
Team newTeam = new(team.TeamIndex,
team.Name,
team.IconNumber,
0,
characters.ToList(),
team.GetPlayerSkillIDs());
TeamEditManager.Instance.SaveTeam(newTeam);
#endregion
GameStateManager.Instance.ChangeState(new GameStateMainScene(false, false, async () =>
{
await JumpToManager.JumpFuncAsync(cfg.JumpFuncType.TeamInfoByGuide, TableManager.Instance.Tables.GlobalConfig.FirstTimeFlowFight2Id);
}));
}
}
/// <summary>
/// 进入剧情4关卡
/// </summary>
public sealed class EnterStoryLevel4Step : FirstTimeFlowStep
{
/// <summary>
/// 创建进入剧情关卡4步骤
/// </summary>
/// <returns></returns>
public static EnterStoryLevel4Step Create()
{
return new EnterStoryLevel4Step();
}
/// <summary>
/// 剧情关卡1id
/// </summary>
private const int LEVEL_ID = 300004;
private EnterStoryLevel4Step() : base(E_FirstTimeFlow.StoryLevel_4)
{
}
public override void Run()
{
LevelManager.Instance.TryEnterLevel(LEVEL_ID, null, null, true);
}
}
/// <summary>
/// 播放结束PV
/// </summary>
public sealed class PlayEndVideoStep : FirstTimeFlowStep
{
/// <summary>
/// 创建播放PV步骤
/// </summary>
/// <param name="videoPath">视频路径</param>
/// <returns></returns>
public static PlayEndVideoStep Create()
{
return new PlayEndVideoStep();
}
/// <summary>
/// 结束PV路径
/// </summary>
private const string END_PV_PATH = "Assets/Video/LevelIntro/LevelIntro_PV.mp4";
private PlayEndVideoStep() : base(E_FirstTimeFlow.EndVideo)
{
}
public override async void Run()
{
await UI_PVAnimaPlayController.Open(END_PV_PATH, ()=>
{
if (FirstTimeFlowManager.Instance.IsHasNextStep)
FirstTimeFlowManager.Instance.StartNextStep();
else
GameStateManager.Instance.ChangeState(new GameStateMainScene());
});
}
}
}