using cfg.GuideCfg;
using Framework;
using Gameplay.SubSystems;
using Gameplay;
using System;
using Cysharp.Threading.Tasks;
using System.IO;
using UnityEngine;
///
/// 引导状态
///
public enum E_GuideState
{
///
/// 等待引导
///
Idle,
///
/// 引导中
///
Guiding,
///
/// 引导完成
///
Complete,
}
///
/// 引导步骤基类
///
public abstract class GuideStepBase
{
///
/// 引导步骤类型
///
public string StepType;
///
/// 引导配置
///
public DataGuideCfg Cfg { get; private set; }
///
/// 引导状态
///
public E_GuideState GuideState { get; private set; }
public GuideStepBase(DataGuideCfg dataGuideCfg)
{
Cfg = dataGuideCfg;
GuideState = E_GuideState.Idle;
}
public void StartGuide()
{
DoBeforeGuide();
GuideState = E_GuideState.Guiding;
DoGuide();
}
///
/// 引导开始之前
///
protected virtual void DoBeforeGuide()
{ }
///
/// 引导
///
protected abstract void DoGuide();
///
/// 引导完成之前
///
protected virtual void DoBeforeComplete()
{ }
///
/// 完成引导
///
public void Complete()
{
if (E_GuideState.Idle == GuideState)
return;
if (E_GuideState.Complete == GuideState)
return;
GuideState = E_GuideState.Complete;
DoBeforeComplete();
GuideManager.Instance.CompleteStep(this);
}
}
///
/// 点击按钮
///
public class ClickButtonStep : GuideStepBase
{
public ClickButtonStep(DataGuideCfg dataGuideCfg) : base(dataGuideCfg)
{
}
protected override void DoGuide()
{
}
}
///
/// 播放视频
///
public class PlayVideoStep : GuideStepBase
{
///
/// 视频路径
///
private readonly string videoPath;
public PlayVideoStep(DataGuideCfg cfg) : base(cfg)
{
if (cfg.GuideTypeParams.Length <= 0)
throw new Exception($"引导类型:{StepType}参数错误");
videoPath = cfg.GuideTypeParams[0];
}
protected override void DoBeforeGuide()
{
EventManager.Instance.Register(EventManager.EventName.PlayVideoComplete, (Action)OnPlayVideoComplete);
}
protected override async void DoGuide()
{
await UI_PlayVideoController.Open(videoPath);
}
protected override void DoBeforeComplete()
{
EventManager.Instance.Unregister(EventManager.EventName.PlayVideoComplete, (Action)OnPlayVideoComplete);
}
///
/// 播放视频完成回调
///
///
private void OnPlayVideoComplete(string path)
{
if (path != videoPath)
return;
DebugUtil.Log($"完成播放视频{videoPath}引导步骤"); // 绿色
Complete();
}
}
///
/// 第一次进入主界面
///
public class FirstEnterMain : GuideStepBase
{
public FirstEnterMain(DataGuideCfg dataGuideCfg) : base(dataGuideCfg)
{
}
protected override void DoBeforeGuide()
{
EventManager.Instance.Register(EventManager.EventName.UIOpen, (Action)OnEnterMainComplete);
}
protected override void DoGuide()
{
LoadingExecutorManager.Instance.ExecuteLoading(new MainSceneLoadingExecutor()).Forget();
}
protected override void DoBeforeComplete()
{
EventManager.Instance.Unregister(EventManager.EventName.UIOpen, (Action)OnEnterMainComplete);
}
private void OnEnterMainComplete(string uiName)
{
if (UINameConst.UI_MainPanel != uiName)
return;
DebugUtil.Log($"完成第一次进入主界面引导步骤"); // 绿色
Complete();
}
}