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