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

617 lines
17 KiB
C#
Raw Normal View History

2024-05-27 15:39:03 +08:00
using cfg.GuideCfg;
2024-05-31 16:51:38 +08:00
using cfg.LevelCfg;
2024-05-30 13:48:26 +08:00
using Cysharp.Threading.Tasks;
2024-05-27 15:39:03 +08:00
using Framework;
2024-05-30 19:00:56 +08:00
using Gameplay.Level;
2024-05-27 15:39:03 +08:00
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
2024-05-30 13:48:26 +08:00
using UnityEngine.Rendering;
2024-05-27 15:39:03 +08:00
2024-05-29 16:36:30 +08:00
namespace Gameplay.Guide
2024-05-27 15:39:03 +08:00
{
/// <summary>
2024-05-29 16:36:30 +08:00
/// 新手引导步骤完成基类
2024-05-27 15:39:03 +08:00
/// </summary>
2024-05-29 16:36:30 +08:00
public abstract class GuideCompleteBase
{
/// <summary>
/// 引导完成回调
/// </summary>
2024-05-30 16:49:27 +08:00
private readonly Action completeAction;
2024-05-29 16:36:30 +08:00
/// <summary>
/// 引导完成类型
/// </summary>
public E_GuideCompleteType CompleteType
{
get; private set;
}
public GuideCompleteBase(DataGuideCfg cfg, Action complete)
{
CompleteType = cfg.GuideCompleteType;
completeAction = complete;
}
/// <summary>
/// 添加监听
/// </summary>
public abstract void AddListener();
/// <summary>
/// 移除监听
/// </summary>
public abstract void RemoveListener();
2024-05-30 16:49:27 +08:00
public virtual void Complete()
{
completeAction?.Invoke();
}
2024-05-27 15:39:03 +08:00
}
/// <summary>
2024-05-29 16:36:30 +08:00
/// 播放视频完成
2024-05-27 15:39:03 +08:00
/// </summary>
2024-05-29 16:36:30 +08:00
internal sealed class PlayVideoComplete : GuideCompleteBase
{
/// <summary>
/// 视频路径
/// </summary>
private readonly string videoPath;
2024-05-27 15:39:03 +08:00
2024-05-29 16:36:30 +08:00
public PlayVideoComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
if (cfg.CompleteTypeParams.Length <= 0)
throw new Exception($"引导类型:{cfg.GuideCompleteType}参数错误");
2024-05-27 15:39:03 +08:00
2024-05-29 16:36:30 +08:00
videoPath = cfg.CompleteTypeParams[0];
}
2024-05-27 15:39:03 +08:00
2024-05-29 16:36:30 +08:00
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.PlayVideoComplete, (Action<string>)OnPlayVideoComplete);
}
2024-05-27 15:39:03 +08:00
2024-05-29 16:36:30 +08:00
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.PlayVideoComplete, (Action<string>)OnPlayVideoComplete);
}
2024-05-27 15:39:03 +08:00
2024-05-29 16:36:30 +08:00
/// <summary>
/// 播放视频完成回调
/// </summary>
/// <param name="path"></param>
private void OnPlayVideoComplete(string path)
{
if (path != videoPath)
return;
2024-05-27 15:39:03 +08:00
2024-05-30 16:49:27 +08:00
Complete();
2024-05-29 16:36:30 +08:00
}
2024-05-27 15:39:03 +08:00
}
/// <summary>
2024-05-29 16:36:30 +08:00
/// 打开UI完成
2024-05-27 15:39:03 +08:00
/// </summary>
2024-05-29 16:36:30 +08:00
internal sealed class OpenUIComplete : GuideCompleteBase
2024-05-27 15:39:03 +08:00
{
2024-05-29 16:36:30 +08:00
private readonly string uiName;
2024-05-27 15:39:03 +08:00
2024-05-29 16:36:30 +08:00
public OpenUIComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
if (cfg.CompleteTypeParams.Length <= 0)
throw new Exception($"引导类型:{cfg.GuideCompleteType}参数错误");
2024-05-27 15:39:03 +08:00
2024-05-29 16:36:30 +08:00
uiName = cfg.CompleteTypeParams[0];
}
2024-05-27 15:39:03 +08:00
2024-05-29 16:36:30 +08:00
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.UIOpen, (Action<string>)OnComplete);
}
2024-05-27 15:39:03 +08:00
2024-05-29 16:36:30 +08:00
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.UIOpen, (Action<string>)OnComplete);
}
2024-05-27 15:39:03 +08:00
2024-05-29 16:36:30 +08:00
private void OnComplete(string uiName)
{
if (this.uiName != uiName)
return;
2024-05-27 15:39:03 +08:00
2024-05-30 16:49:27 +08:00
Complete();
2024-05-29 16:36:30 +08:00
}
2024-05-27 15:39:03 +08:00
}
2024-05-29 16:36:30 +08:00
/// <summary>
/// 关闭UI完成
/// </summary>
internal sealed class CloseUIComplete : GuideCompleteBase
2024-05-28 13:40:44 +08:00
{
2024-05-29 16:36:30 +08:00
private readonly string uiName;
2024-05-28 13:40:44 +08:00
2024-05-29 16:36:30 +08:00
public CloseUIComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
if (cfg.CompleteTypeParams.Length <= 0)
throw new Exception($"引导类型:{cfg.GuideCompleteType}参数错误");
2024-05-28 13:40:44 +08:00
2024-05-29 16:36:30 +08:00
uiName = cfg.CompleteTypeParams[0];
}
2024-05-28 13:40:44 +08:00
2024-05-29 16:36:30 +08:00
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.UIClose, (Action<string>)OnComplete);
}
2024-05-28 13:40:44 +08:00
2024-05-29 16:36:30 +08:00
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.UIClose, (Action<string>)OnComplete);
}
2024-05-28 13:40:44 +08:00
2024-05-29 16:36:30 +08:00
private void OnComplete(string uiName)
{
if (this.uiName != uiName)
return;
2024-05-28 13:40:44 +08:00
2024-05-30 16:49:27 +08:00
Complete();
2024-05-29 16:36:30 +08:00
}
2024-05-28 13:40:44 +08:00
}
2024-05-29 16:36:30 +08:00
/// <summary>
/// 打开UI并且UI动画播放完成
/// </summary>
internal sealed class OpenUIAndAnimComplete : GuideCompleteBase
2024-05-27 16:57:51 +08:00
{
2024-05-29 16:36:30 +08:00
private readonly string uiName;
2024-05-27 16:57:51 +08:00
2024-05-29 16:36:30 +08:00
public OpenUIAndAnimComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
if (cfg.CompleteTypeParams.Length <= 0)
throw new Exception($"引导类型:{cfg.GuideCompleteType}参数错误");
2024-05-27 16:57:51 +08:00
2024-05-29 16:36:30 +08:00
uiName = cfg.CompleteTypeParams[0];
}
2024-05-30 15:01:43 +08:00
2024-05-29 16:36:30 +08:00
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.UIOpenAndAnim, (Action<string>)OnComplete);
}
2024-05-27 16:57:51 +08:00
2024-05-29 16:36:30 +08:00
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.UIOpenAndAnim, (Action<string>)OnComplete);
}
2024-05-27 16:57:51 +08:00
2024-05-29 16:36:30 +08:00
private void OnComplete(string uiName)
{
if (this.uiName != uiName)
return;
2024-05-30 16:49:27 +08:00
Complete();
2024-05-29 16:36:30 +08:00
}
2024-05-27 16:57:51 +08:00
}
2024-05-29 16:36:30 +08:00
/// <summary>
/// 进入关卡完成
/// </summary>
internal sealed class EnterLevelComplete : GuideCompleteBase
2024-05-27 16:57:51 +08:00
{
2024-05-30 13:48:26 +08:00
/// <summary>
/// 需要打开的战斗UI数量
/// </summary>
private const int OPEN_FIGHT_UI_COUNT = 4;
2024-05-29 16:36:30 +08:00
/// <summary>
/// 关卡id
/// </summary>
private readonly int levelId;
2024-05-30 13:48:26 +08:00
/// <summary>
/// 需要打开的UICount数量
/// </summary>
private int uiOpenCount;
2024-05-29 16:36:30 +08:00
public EnterLevelComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
2024-05-30 13:48:26 +08:00
uiOpenCount = 0;
2024-05-30 15:01:43 +08:00
if (cfg.CompleteTypeParams.Length <= 0)
throw new Exception($"引导类型:{cfg.GuideCompleteType},参数错误");
2024-05-29 16:36:30 +08:00
2024-05-30 15:01:43 +08:00
if (int.TryParse(cfg.CompleteTypeParams[0], out int id))
2024-05-29 16:36:30 +08:00
levelId = id;
}
public override void AddListener()
{
2024-05-30 13:48:26 +08:00
EventManager.Instance.Register<string>(EventManager.EventName.UIOpen, OnOpenUI);
2024-05-29 16:36:30 +08:00
}
public override void RemoveListener()
{
2024-05-30 13:48:26 +08:00
EventManager.Instance.Unregister<string>(EventManager.EventName.UIOpen, OnOpenUI);
}
private void OnOpenUI(string uiName)
{
if (UINameConst.UI_StartBtn_CMSBtn != uiName &&
UINameConst.UITeamFight != uiName &&
UINameConst.UIFightClock != uiName &&
UINameConst.UIFightScene != uiName)
return;
++uiOpenCount;
2024-05-29 16:36:30 +08:00
2024-05-30 13:48:26 +08:00
if (OPEN_FIGHT_UI_COUNT >= uiOpenCount)
OnComplete(levelId);
2024-05-29 16:36:30 +08:00
}
2024-05-30 13:48:26 +08:00
private async void OnComplete(int levelId)
2024-05-29 16:36:30 +08:00
{
if (this.levelId != levelId)
return;
2024-05-30 15:01:43 +08:00
await UniTask.Delay(3000); // 延迟3秒
UIManager.Instance.CloseWindow(UINameConst.UI_Guide);
2024-05-30 16:49:27 +08:00
Complete();
2024-05-29 16:36:30 +08:00
}
2024-05-27 16:57:51 +08:00
}
2024-05-29 16:36:30 +08:00
/// <summary>
/// 关卡上阵完成
/// </summary>
internal sealed class LevelEmbattleComplete : GuideCompleteBase
2024-05-27 15:39:03 +08:00
{
2024-05-30 15:01:43 +08:00
/// <summary>
/// 上阵数量
/// </summary>
private readonly int embattleCount;
2024-05-29 16:36:30 +08:00
public LevelEmbattleComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
2024-05-30 15:01:43 +08:00
if (cfg.CompleteTypeParams.Length <= 0)
throw new Exception($"引导类型:{cfg.GuideCompleteType},参数错误");
if (int.TryParse(cfg.CompleteTypeParams[0], out int count))
embattleCount = count;
2024-05-29 16:36:30 +08:00
}
public override void AddListener()
{
2024-05-30 15:01:43 +08:00
EventManager.Instance.Register(EventManager.EventName.LevelFightStartChange, OnStartChange);
2024-05-29 16:36:30 +08:00
}
2024-05-27 15:39:03 +08:00
2024-05-29 16:36:30 +08:00
public override void RemoveListener()
{
2024-05-30 15:01:43 +08:00
EventManager.Instance.Unregister(EventManager.EventName.LevelFightStartChange, OnStartChange);
}
private void OnStartChange()
{
if (TeamManager.Instance.GetFightList().Count >= embattleCount)
2024-05-30 16:49:27 +08:00
Complete();
2024-05-30 15:01:43 +08:00
}
}
/// <summary>
/// 战斗开始完成
/// </summary>
internal sealed class FightBeginComplete : GuideCompleteBase
{
public FightBeginComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
2024-05-30 16:49:27 +08:00
EventManager.Instance.Register(EventManager.EventName.UIPreLevelBattleBegin, Complete);
2024-05-30 15:01:43 +08:00
}
public override void RemoveListener()
{
2024-05-30 16:49:27 +08:00
EventManager.Instance.Unregister(EventManager.EventName.UIPreLevelBattleBegin, Complete);
}
2024-05-30 19:00:56 +08:00
public override void Complete()
{
LevelManager.Instance.CurrentLevel.SetPause(true);
base.Complete();
}
2024-05-30 16:49:27 +08:00
}
/// <summary>
/// 教学战斗角色移动完成
/// </summary>
internal sealed class FightMoveComplete : GuideCompleteBase
{
public FightMoveComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
2024-05-30 15:01:43 +08:00
}
2024-05-30 16:49:27 +08:00
public override void AddListener()
2024-05-30 15:01:43 +08:00
{
2024-05-30 19:00:56 +08:00
EventManager.Instance.Register(EventManager.EventName.INFIGHT_OP_SET_MOVEPOS, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_OP_SET_MOVEPOS, Complete);
}
public override void Complete()
{
LevelManager.Instance.CurrentLevel.SetPause(false);
base.Complete();
}
}
/// <summary>
/// 教学战斗角色攻击完成
/// </summary>
internal sealed class FightAttackComplete : GuideCompleteBase
{
public FightAttackComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.INFIGHT_OP_SET_TARGET, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_OP_SET_TARGET, Complete);
}
public override void Complete()
{
LevelManager.Instance.CurrentLevel.SetPause(false);
base.Complete();
}
}
/// <summary>
/// 教学战斗角色释放技能完成
/// </summary>
internal sealed class FightUseSkillComplete : GuideCompleteBase
{
public FightUseSkillComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
2024-05-31 15:01:21 +08:00
//EventManager.Instance.Register(EventManager.EventName.INFIGHT_PLAYER_SKILL_RELEASE, Complete);
EventManager.Instance.Register(EventManager.EventName.UI_START_USE_SKILL, Complete);
2024-05-30 16:49:27 +08:00
}
public override void RemoveListener()
{
2024-05-31 15:01:21 +08:00
//EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_PLAYER_SKILL_RELEASE, Complete);
EventManager.Instance.Unregister(EventManager.EventName.UI_START_USE_SKILL, Complete);
}
public override void Complete()
{
LevelManager.Instance.CurrentLevel.SetPause(false);
base.Complete();
2024-05-30 16:49:27 +08:00
}
}
2024-05-30 19:55:53 +08:00
/// <summary>
/// 教学战斗上阵完成
/// </summary>
internal sealed class FightEmbattleComplete : GuideCompleteBase
{
public FightEmbattleComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.INFIGHT_UNIT_READY, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_UNIT_READY, Complete);
}
public override void Complete()
{
LevelManager.Instance.CurrentLevel.SetPause(false);
base.Complete();
}
}
/// <summary>
/// 教学士气与压制完成
/// </summary>
internal sealed class FightMoraleAndRepressionComplete : GuideCompleteBase
{
public FightMoraleAndRepressionComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.UIClose, (Action<string>)OnComplete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.UIClose, (Action<string>)OnComplete);
}
public void OnComplete(string uiName)
{
if (UINameConst.UI_GuideTip != uiName)
return;
LevelManager.Instance.CurrentLevel.SetPause(false);
Complete();
}
}
/// <summary>
/// 关卡完成
/// </summary>
internal sealed class LevelComplete : GuideCompleteBase
{
public LevelComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
2024-05-31 14:06:02 +08:00
EventManager.Instance.Register(EventManager.EventName.GuideExitLevel, Complete);
2024-05-30 19:55:53 +08:00
}
public override void RemoveListener()
{
2024-05-31 14:06:02 +08:00
EventManager.Instance.Unregister(EventManager.EventName.GuideExitLevel, Complete);
2024-05-30 19:55:53 +08:00
}
}
2024-05-30 16:49:27 +08:00
/// <summary>
/// 等待时间完成
/// </summary>
2024-05-31 15:01:21 +08:00
internal sealed class WaitTimeComplete : GuideCompleteBase
2024-05-30 16:49:27 +08:00
{
/// <summary>
/// 等待时间
/// </summary>
private readonly int time;
2024-05-31 15:01:21 +08:00
public WaitTimeComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
2024-05-30 16:49:27 +08:00
{
if (cfg.CompleteTypeParams.Length <= 0)
throw new Exception($"引导类型:{cfg.GuideCompleteType},参数错误");
if (float.TryParse(cfg.CompleteTypeParams[0], out float t))
time = (int)(t * 1000f);
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.GuideStepBegin, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.GuideStepBegin, Complete);
}
public override async void Complete()
{
await UniTask.Delay(time);
base.Complete();
2024-05-29 16:36:30 +08:00
}
2024-05-27 15:39:03 +08:00
}
2024-05-31 16:51:38 +08:00
/// <summary>
/// 选择模式完成
/// </summary>
internal sealed class SelectModeComplete : GuideCompleteBase
{
public SelectModeComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
2024-05-31 19:02:13 +08:00
EventManager.Instance.Register(EventManager.EventName.GuideSelectMode, Complete);
2024-05-31 16:51:38 +08:00
}
public override void RemoveListener()
{
2024-05-31 19:02:13 +08:00
EventManager.Instance.Unregister(EventManager.EventName.GuideSelectMode, Complete);
2024-05-31 16:51:38 +08:00
}
2024-05-31 19:02:13 +08:00
}
2024-05-31 16:51:38 +08:00
2024-05-31 19:02:13 +08:00
/// <summary>
/// 选择章节完成
/// </summary>
internal sealed class SelectChapterComplete : GuideCompleteBase
{
public SelectChapterComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
2024-05-31 16:51:38 +08:00
{
2024-05-31 19:02:13 +08:00
}
2024-05-31 16:51:38 +08:00
2024-05-31 19:02:13 +08:00
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.GuideSelectChapter, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.GuideSelectChapter, Complete);
2024-05-31 16:51:38 +08:00
}
}
2024-05-31 17:19:28 +08:00
/// <summary>
2024-05-31 19:02:13 +08:00
/// 打开指挥官技能选择
2024-05-31 17:19:28 +08:00
/// </summary>
2024-05-31 19:21:41 +08:00
internal sealed class OpenCommandSkillComplete : GuideCompleteBase
2024-05-31 17:19:28 +08:00
{
2024-05-31 19:21:41 +08:00
public OpenCommandSkillComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
2024-05-31 17:19:28 +08:00
{
}
public override void AddListener()
{
2024-06-03 14:10:55 +08:00
EventManager.Instance.Register(EventManager.EventName.GuideOpenCommandSkill, (Action<bool>)OnComplete);
2024-05-31 17:19:28 +08:00
}
public override void RemoveListener()
{
2024-06-03 14:10:55 +08:00
EventManager.Instance.Unregister(EventManager.EventName.GuideOpenCommandSkill, (Action<bool>)OnComplete);
}
private void OnComplete(bool isOpen)
{
if (!isOpen)
return;
Complete();
}
}
/// <summary>
/// 关闭指挥官技能选择
/// </summary>
internal sealed class CloseCommandSkillComplete : GuideCompleteBase
{
public CloseCommandSkillComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.GuideOpenCommandSkill, (Action<bool>)OnComplete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.GuideOpenCommandSkill, (Action<bool>)OnComplete);
}
private void OnComplete(bool isOpen)
{
if (isOpen)
return;
Complete();
2024-05-31 17:19:28 +08:00
}
}
2024-05-27 15:39:03 +08:00
}