NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Guide/GuideStepBase.cs

149 lines
2.9 KiB
C#
Raw Normal View History

2024-05-22 19:08:14 +08:00
using cfg.GuideCfg;
2024-05-24 15:07:50 +08:00
using Framework;
using System;
2024-05-22 19:08:14 +08:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
2024-05-24 15:07:50 +08:00
/// <summary>
/// 引导状态
/// </summary>
public enum E_GuideState
{
/// <summary>
/// 未开始
/// </summary>
NotStarted,
/// <summary>
/// 引导中
/// </summary>
Guiding,
/// <summary>
/// 引导完成
/// </summary>
Complete,
}
2024-05-22 19:08:14 +08:00
/// <summary>
/// 引导步骤基类
/// </summary>
public abstract class GuideStepBase
{
/// <summary>
/// 引导步骤类型
/// </summary>
public string StepType;
2024-05-24 15:07:50 +08:00
/// <summary>
/// 引导状态
/// </summary>
protected E_GuideState guideState;
2024-05-22 19:08:14 +08:00
public GuideStepBase(DataGuideCfg dataGuideCfg)
{
2024-05-24 15:07:50 +08:00
guideState = E_GuideState.NotStarted;
}
public void StartGuide()
{
DoBeforeGuide();
guideState = E_GuideState.Guiding;
DoGuide();
2024-05-22 19:08:14 +08:00
}
2024-05-24 15:07:50 +08:00
/// <summary>
/// 完成引导
/// </summary>
public void Complete()
{
if (E_GuideState.NotStarted == guideState)
return;
if (E_GuideState.Complete == guideState)
return;
guideState = E_GuideState.Complete;
DoBeforeComplete();
GuideManager.Instance.Complete(this);
}
/// <summary>
/// 引导显示之前
/// </summary>
protected virtual void DoBeforeGuide()
{ }
/// <summary>
/// 引导完成之前
/// </summary>
protected virtual void DoBeforeComplete()
{ }
/// <summary>
/// 引导
/// </summary>
protected abstract void DoGuide();
2024-05-22 19:08:14 +08:00
}
/// <summary>
/// 点击按钮
/// </summary>
public class ClickButtonStep : GuideStepBase
{
public ClickButtonStep(DataGuideCfg dataGuideCfg) : base(dataGuideCfg)
{
}
2024-05-24 15:07:50 +08:00
protected override void DoGuide()
{
}
2024-05-22 19:08:14 +08:00
}
2024-05-24 15:07:50 +08:00
/// <summary>
/// 播放视频
/// </summary>
2024-05-22 19:08:14 +08:00
public class PlayVideoStep : GuideStepBase
{
2024-05-24 15:07:50 +08:00
/// <summary>
/// 视频路径
/// </summary>
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<string>)OnPlayVideoComplete);
}
protected override async void DoGuide()
2024-05-22 19:08:14 +08:00
{
2024-05-24 15:07:50 +08:00
await UI_PlayVideoController.Open(videoPath);
}
protected override void DoBeforeComplete()
{
EventManager.Instance.Unregister(EventManager.EventName.PlayVideoComplete, (Action<string>)OnPlayVideoComplete);
}
/// <summary>
/// 播放视频完成回调
/// </summary>
/// <param name="path"></param>
private void OnPlayVideoComplete(string path)
{
if (path != videoPath)
return;
Complete();
2024-05-22 19:08:14 +08:00
}
}