using cfg.GuideCfg; using Framework; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Gameplay.Guide { /// /// 新手引导步骤完成基类 /// public abstract class GuideCompleteBase { /// /// 引导完成回调 /// protected readonly Action completeAction; /// /// 引导完成类型 /// public E_GuideCompleteType CompleteType { get; private set; } public GuideCompleteBase(DataGuideCfg cfg, Action complete) { CompleteType = cfg.GuideCompleteType; completeAction = complete; } /// /// 添加监听 /// public abstract void AddListener(); /// /// 移除监听 /// public abstract void RemoveListener(); } /// /// 播放视频完成 /// internal sealed class PlayVideoComplete : GuideCompleteBase { /// /// 视频路径 /// private readonly string videoPath; public PlayVideoComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete) { if (cfg.CompleteTypeParams.Length <= 0) throw new Exception($"引导类型:{cfg.GuideCompleteType}参数错误"); videoPath = cfg.CompleteTypeParams[0]; } public override void AddListener() { EventManager.Instance.Register(EventManager.EventName.PlayVideoComplete, (Action)OnPlayVideoComplete); } public override void RemoveListener() { EventManager.Instance.Unregister(EventManager.EventName.PlayVideoComplete, (Action)OnPlayVideoComplete); } /// /// 播放视频完成回调 /// /// private void OnPlayVideoComplete(string path) { if (path != videoPath) return; completeAction?.Invoke(); } } /// /// 打开UI完成 /// internal sealed class OpenUIComplete : GuideCompleteBase { private readonly string uiName; public OpenUIComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete) { if (cfg.CompleteTypeParams.Length <= 0) throw new Exception($"引导类型:{cfg.GuideCompleteType}参数错误"); uiName = cfg.CompleteTypeParams[0]; } public override void AddListener() { EventManager.Instance.Register(EventManager.EventName.UIOpen, (Action)OnComplete); } public override void RemoveListener() { EventManager.Instance.Unregister(EventManager.EventName.UIOpen, (Action)OnComplete); } private void OnComplete(string uiName) { if (this.uiName != uiName) return; completeAction?.Invoke(); } } /// /// 关闭UI完成 /// internal sealed class CloseUIComplete : GuideCompleteBase { private readonly string uiName; public CloseUIComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete) { if (cfg.CompleteTypeParams.Length <= 0) throw new Exception($"引导类型:{cfg.GuideCompleteType}参数错误"); uiName = cfg.CompleteTypeParams[0]; } public override void AddListener() { EventManager.Instance.Register(EventManager.EventName.UIClose, (Action)OnComplete); } public override void RemoveListener() { EventManager.Instance.Unregister(EventManager.EventName.UIClose, (Action)OnComplete); } private void OnComplete(string uiName) { if (this.uiName != uiName) return; completeAction?.Invoke(); } } /// /// 打开UI并且UI动画播放完成 /// internal sealed class OpenUIAndAnimComplete : GuideCompleteBase { private readonly string uiName; public OpenUIAndAnimComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete) { if (cfg.CompleteTypeParams.Length <= 0) throw new Exception($"引导类型:{cfg.GuideCompleteType}参数错误"); uiName = cfg.CompleteTypeParams[0]; } public override void AddListener() { EventManager.Instance.Register(EventManager.EventName.UIOpenAndAnim, (Action)OnComplete); } public override void RemoveListener() { EventManager.Instance.Unregister(EventManager.EventName.UIOpenAndAnim, (Action)OnComplete); } private void OnComplete(string uiName) { if (this.uiName != uiName) return; completeAction?.Invoke(); } } /// /// 进入关卡完成 /// internal sealed class EnterLevelComplete : GuideCompleteBase { /// /// 关卡id /// private readonly int levelId; public EnterLevelComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete) { if (cfg.GuideTypeParams.Length <= 0) throw new Exception($"引导类型:{cfg.GuideStepType},参数错误"); if (int.TryParse(cfg.GuideTypeParams[0], out int id)) levelId = id; } public override void AddListener() { } public override void RemoveListener() { } public void OnComplete(int levelId) { if (this.levelId != levelId) return; completeAction?.Invoke(); } } /// /// 关卡上阵完成 /// internal sealed class LevelEmbattleComplete : GuideCompleteBase { public LevelEmbattleComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete) { } public override void AddListener() { //EventManager.Instance.Register(EventManager.EventName.) } public override void RemoveListener() { //throw new NotImplementedException(); } } }