using cfg.GuideCfg;
using Code.Scripts.Gameplay.Game;
using Framework;
using Gameplay.Area;
using Gameplay.Level;
using Gameplay.Skill;
using Gameplay.Unit;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Gameplay.Guide
{
///
/// 新手引导步骤完成基类
///
public abstract class GuideCompleteBase
{
///
/// 引导完成回调
///
private readonly Action completeAction;
///
/// 是否完成
///
private bool isComplete;
public DataGuideCfg Cfg { get; private set; }
///
/// 引导完成类型
///
public E_GuideCompleteType CompleteType
{
get; private set;
}
public GuideCompleteBase(DataGuideCfg cfg, Action complete)
{
Cfg = cfg;
CompleteType = Cfg.GuideCompleteType;
completeAction = complete;
isComplete = false;
}
///
/// 添加监听
///
public abstract void AddListener();
///
/// 移除监听
///
public abstract void RemoveListener();
public virtual void Complete()
{
if (isComplete)
return;
isComplete = true;
completeAction?.Invoke();
}
}
///
/// 播放视频完成
///
internal sealed class PlayVideoComplete : GuideCompleteBase
{
public PlayVideoComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.PlayVideoComplete, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.PlayVideoComplete, Complete);
}
}
#region UI
///
/// 打开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($"引导id:{Cfg.Id}, 引导类型:{Cfg.GuideStepType},参数数量错误:1.UI名");
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;
Complete();
}
}
///
/// 关闭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($"引导id:{Cfg.Id}, 引导类型:{Cfg.GuideStepType},参数数量错误:1.UI名");
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;
Complete();
}
}
///
/// 销毁UI完成
///
internal sealed class DestroyUIComplete : GuideCompleteBase
{
private readonly string uiName;
public DestroyUIComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
if (Cfg.CompleteTypeParams.Length <= 0)
throw new Exception($"引导id:{Cfg.Id}, 引导类型:{Cfg.GuideStepType},参数数量错误:1.UI名");
uiName = Cfg.CompleteTypeParams[0];
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.UIDestroy, (Action)OnComplete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.UIDestroy, (Action)OnComplete);
}
private void OnComplete(string uiName)
{
if (this.uiName != uiName)
return;
Complete();
}
}
///
/// 打开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($"引导id:{Cfg.Id}, 引导类型:{Cfg.GuideStepType},参数数量错误:1.UI名");
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;
Complete();
}
}
///
/// 关闭UI并且UI动画播放完成
///
internal sealed class CloseUIAndAnimComplete : GuideCompleteBase
{
private readonly string uiName;
public CloseUIAndAnimComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
if (Cfg.CompleteTypeParams.Length <= 0)
throw new Exception($"引导id:{Cfg.Id}, 引导类型:{Cfg.GuideStepType},参数数量错误:1.UI名");
uiName = Cfg.CompleteTypeParams[0];
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.UICloseAndAnim, (Action)OnComplete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.UICloseAndAnim, (Action)OnComplete);
}
private void OnComplete(string uiName)
{
if (this.uiName != uiName)
return;
Complete();
}
}
#endregion
#region 关卡战斗
///
/// 进入战斗关卡完成
///
internal sealed class EnterFightLevelComplete : GuideCompleteBase
{
///
/// 是否切换关卡状态
///
private bool isChangeLevelState;
///
/// 是否加载完成
///
private bool isLoadingExecutor;
///
/// 加载界面是否关闭
///
private bool isLoadingClose;
public EnterFightLevelComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
isChangeLevelState = false;
isLoadingExecutor = false;
isLoadingClose = false;
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.Guide_ChangeLevelState, OnChangeLevelState);
EventManager.Instance.Register(EventManager.EventName.LoadingExecutorComplete, OnLoadingExecutor);
EventManager.Instance.Register(EventManager.EventName.UIClose, (Action)OnLoadingClose);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.UIClose, (Action)OnLoadingClose);
EventManager.Instance.Unregister(EventManager.EventName.LoadingExecutorComplete, OnLoadingExecutor);
EventManager.Instance.Unregister(EventManager.EventName.Guide_ChangeLevelState, OnChangeLevelState);
}
private void OnChangeLevelState()
{
isChangeLevelState = true;
CheckComplete();
}
private void OnLoadingExecutor()
{
isLoadingExecutor = true;
CheckComplete();
}
private void OnLoadingClose(string uiName)
{
if (UINameConst.UI_LoadingInterface != uiName)
return;
isLoadingClose = true;
CheckComplete();
}
private void CheckComplete()
{
if (!isChangeLevelState)
return;
if (!isLoadingExecutor)
return;
if (!isLoadingClose)
return;
Complete();
}
}
///
/// 进入故事关卡完成
///
internal sealed class EnterStorylineLevelComplete : GuideCompleteBase
{
///
/// 是否切换关卡状态
///
private bool isChangeStoryState;
///
/// 是否加载完成
///
private bool isLoadingExecutor;
///
/// 加载界面是否关闭
///
private bool isLoadingClose;
public EnterStorylineLevelComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
isChangeStoryState = false;
isLoadingExecutor = false;
isLoadingClose = false;
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.Guide_ChangeStoryState, OnChangeStoryState);
EventManager.Instance.Register(EventManager.EventName.LoadingExecutorComplete, OnLoadingExecutor);
EventManager.Instance.Register(EventManager.EventName.UIClose, (Action)OnLoadingClose);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.UIClose, (Action)OnLoadingClose);
EventManager.Instance.Unregister(EventManager.EventName.LoadingExecutorComplete, OnLoadingExecutor);
EventManager.Instance.Unregister(EventManager.EventName.Guide_ChangeStoryState, OnChangeStoryState);
}
private void OnChangeStoryState()
{
isChangeStoryState = true;
CheckComplete();
}
private void OnLoadingExecutor()
{
isLoadingExecutor = true;
CheckComplete();
}
private void OnLoadingClose(string uiName)
{
if (UINameConst.UI_LoadingInterface != uiName)
return;
isLoadingClose = true;
CheckComplete();
}
private void CheckComplete()
{
if (!isChangeStoryState)
return;
if (!isLoadingExecutor)
return;
if (!isLoadingClose)
return;
Complete();
}
}
///
/// 关卡上阵完成
///
internal sealed class LevelEmbattleComplete : GuideCompleteBase
{
///
/// 上阵数量
///
private readonly int embattleCount;
public LevelEmbattleComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
if (Cfg.CompleteTypeParams.Length <= 0)
throw new Exception($"引导id:{Cfg.Id}, 引导类型:{Cfg.GuideStepType},参数数量错误:1.上阵角色数量");
if (int.TryParse(Cfg.CompleteTypeParams[0], out int count))
embattleCount = count;
else
throw new Exception($"引导id:{Cfg.Id}, 引导类型:{Cfg.GuideStepType},第1个参数类型错误:应该为int类型");
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.LevelFightStartChange, OnStartChange);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.LevelFightStartChange, OnStartChange);
}
private void OnStartChange()
{
if (TeamManager.Instance.GetFightList().Count >= embattleCount)
Complete();
}
}
///
/// 关卡载具上阵完成
///
internal sealed class LevelVehicleEmbattleComplete : GuideCompleteBase
{
///
/// 上阵数量
///
private readonly int embattleCount;
public LevelVehicleEmbattleComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
if (Cfg.CompleteTypeParams.Length <= 0)
throw new Exception($"引导id:{Cfg.Id}, 引导类型:{Cfg.GuideStepType},参数数量错误:1.上阵载具数量");
if (int.TryParse(Cfg.CompleteTypeParams[0], out int count))
embattleCount = count;
else
throw new Exception($"引导id:{Cfg.Id}, 引导类型:{Cfg.GuideStepType},第1个参数类型错误:应该为int类型");
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.LevelFightStartChange, OnStartChange);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.LevelFightStartChange, OnStartChange);
}
private void OnStartChange()
{
if (TeamManager.Instance.GetFightList().Count >= embattleCount)
Complete();
}
}
///
/// 战斗开始完成
///
internal sealed class FightBeginComplete : GuideCompleteBase
{
public FightBeginComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.UIPreLevelBattleBegin, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.UIPreLevelBattleBegin, Complete);
}
}
///
/// 战斗角色开始移动完成
///
internal sealed class FightBeginMoveComplete : GuideCompleteBase
{
public FightBeginMoveComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.INFIGHT_OP_SET_MOVEPOS, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_OP_SET_MOVEPOS, Complete);
}
}
///
/// 战斗角色移动完成
///
internal sealed class FightMoveComplete : GuideCompleteBase
{
///
/// 角色配置id
///
private readonly List listCharacterCfgId;
///
/// 地板索引
///
private readonly List listFloorIndex;
///
/// 完成计数
///
private int total;
public FightMoveComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
if (Cfg.CompleteTypeParams.Length <= 1 && (Cfg.CompleteTypeParams.Length & 1) != 0)
throw new Exception($"引导id:{Cfg.Id}, 引导类型:{Cfg.GuideStepType},参数数量错误:1.角色id,2.地板id;");
int count = Cfg.CompleteTypeParams.Length / 2;
listCharacterCfgId = new(count);
listFloorIndex = new(count);
total = 0;
for (int i = 0; i < count; ++i)
{
if (int.TryParse(Cfg.CompleteTypeParams[2 * i], out int cId))
listCharacterCfgId.Add(cId);
else
throw new Exception($"引导id:{Cfg.Id}, 引导类型:{Cfg.GuideStepType},第{2 * i}个参数类型错误:应该为int类型");
if (int.TryParse(Cfg.CompleteTypeParams[2 * i + 1], out int fId))
listFloorIndex.Add(fId);
else
throw new Exception($"引导id:{Cfg.Id}, 引导类型:{Cfg.GuideStepType},第{2 * i + 1}个参数类型错误:应该为int类型");
}
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.LevelCharacterArriveBlock, (Action)OnComplete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.LevelCharacterArriveBlock, (Action)OnComplete);
}
public void OnComplete(Character.Character character)
{
for (int i = 0; i < listCharacterCfgId.Count; ++i)
{
if (listCharacterCfgId[i] != character.runtimeData.configData.cfgId)
continue;
if (listFloorIndex[i] != character.transData.cellIndex)
continue;
++total;
break;
}
if (total < listCharacterCfgId.Count)
return;
Complete();
}
}
///
/// 战斗角色攻击完成
///
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);
}
}
#endregion
#region 释放技能
///
/// 角色准备释放技能完成
///
internal sealed class FightPreparaUseSkillComplete : GuideCompleteBase
{
public FightPreparaUseSkillComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.UI_START_USE_SKILL, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.UI_START_USE_SKILL, Complete);
}
}
///
/// 准备释放指挥官技能完成
///
internal sealed class FightPreparaUsePlayerSkillComplete : GuideCompleteBase
{
public FightPreparaUsePlayerSkillComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.Guide_PreparaPlayerSkill, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.Guide_PreparaPlayerSkill, Complete);
}
}
///
/// 角色释放技能完成
///
internal sealed class FightUseSkillComplete : GuideCompleteBase
{
public FightUseSkillComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.UI_USE_SKILL, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.UI_USE_SKILL, Complete);
}
}
///
/// 指挥官释放技能完成
///
internal sealed class FightUsePlayerSkillComplete : GuideCompleteBase
{
public FightUsePlayerSkillComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.Guide_UsePlayerSkill, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.Guide_UsePlayerSkill, Complete);
}
}
#endregion
///
/// 关卡完成
///
internal sealed class LevelComplete : GuideCompleteBase
{
public LevelComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.UIOpen, (Action)OnOpenUIPause);
EventManager.Instance.Register(EventManager.EventName.GuideExitLevel, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.GuideExitLevel, Complete);
EventManager.Instance.Unregister(EventManager.EventName.UIOpen, (Action)OnOpenUIPause);
}
private void OnOpenUIPause(string uiName)
{
if (UINameConst.UIPause != uiName)
return;
UIWindow uiWindow = UIManager.Instance.GetOpenedWindowByPath(UINameConst.UIPause);
if (null == uiWindow)
return;
Transform ts = uiWindow.gameObject.transform.Find("UI_MainPause/UIRetreatAndReturn/Button_Retreat");
if (null == ts)
return;
if (!ts.TryGetComponent(out Button btn))
return;
btn.interactable = false;
}
}
///
/// 点击引导按钮完成
///
internal sealed class ClickGuideButtonComplete : GuideCompleteBase
{
public ClickGuideButtonComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.GuideClickButton, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.GuideClickButton, Complete);
}
}
///
/// 点击地板完成
///
internal sealed class ClickGuideFloorComplete : GuideCompleteBase
{
public ClickGuideFloorComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.Guide_ClickFloor, OnComplete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.Guide_ClickFloor, OnComplete);
}
private void OnComplete(int cellIndex)
{
Complete();
}
}
///
/// 等待战斗开始按钮显示完成
///
internal sealed class WaitFightStartButtonShowComplete : GuideCompleteBase
{
public WaitFightStartButtonShowComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.Guide_FightStartShow, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.Guide_FightStartShow, Complete);
}
}
///
/// 等待备战区显示完成
///
internal sealed class WaitPreparatShowComplete : GuideCompleteBase
{
public WaitPreparatShowComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.Guide_PreparatShow, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.Guide_PreparatShow, Complete);
}
}
///
/// 等待敌人撤退
///
internal sealed class WaitEnemyRetreatComplete : GuideCompleteBase
{
public WaitEnemyRetreatComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.INFIGHT_STATUS_CHANGED, (Action)OnComplete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_STATUS_CHANGED, (Action)OnComplete);
}
private void OnComplete(GameUnit gameUnit)
{
if (!gameUnit.statusData.isRetreat)
return;
Complete();
}
}
///
/// 等待起名
///
internal sealed class WaitChangeNameComplete : GuideCompleteBase
{
public WaitChangeNameComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.STORY_OPEN_NAME_PANEL, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.STORY_OPEN_NAME_PANEL, Complete);
}
public override async void Complete()
{
if (GameStateManager.Instance.GetCurState() is GameStateStory gameStateStory)
gameStateStory.IsReady = false;
await UI_WriteNameController.Open();
base.Complete();
}
}
///
/// 等待编队完成
///
internal sealed class WaitEditTeamComplete : GuideCompleteBase
{
///
/// 队伍人数
///
private readonly int cCount;
public WaitEditTeamComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
if (cfg.CompleteTypeParams.Length <= 0)
throw new Exception($"引导id:{Cfg.Id}, 引导类型:{Cfg.GuideStepType},参数数量错误:1.队伍人数");
if (int.TryParse(cfg.CompleteTypeParams[0], out int count))
cCount = count;
else
throw new Exception($"引导id:{Cfg.Id}, 引导类型:{Cfg.GuideStepType},第1个参数类型错误:应该为int类型");
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.TeamModified, (Action)OnTeamModfied);
EventManager.Instance.Register(EventManager.EventName.UIOpen, (Action)OnUIOpen);
EventManager.Instance.Register(EventManager.EventName.UIClose, (Action)OnUIClose);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.UIClose, (Action)OnUIClose);
EventManager.Instance.Unregister(EventManager.EventName.UIOpen, (Action)OnUIOpen);
EventManager.Instance.Unregister(EventManager.EventName.TeamModified, (Action)OnTeamModfied);
}
private async void OnUIOpen(string uiName)
{
if (UINameConst.UISelectCharacter != uiName)
return;
await UI_GuideController.Open(false);
}
private async void OnUIClose(string uiName)
{
if (UINameConst.UISelectCharacter != uiName)
return;
await UI_GuideController.Open(Cfg, false);
}
private void OnTeamModfied(int teamIndex)
{
Team team = TeamEditManager.Instance.GetTeamByIndex(teamIndex);
if (null == team)
return;
if (team.GetAllCharacterCount() < cCount)
return;
Complete();
}
}
///
/// 等待清除队伍完成
///
internal sealed class ClearTeamComplete : GuideCompleteBase
{
public ClearTeamComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.TeamClear, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.TeamClear, Complete);
}
}
///
/// 等待加载完成
///
internal sealed class WaitLoadingComplete : GuideCompleteBase
{
public WaitLoadingComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.LoadingExecutorComplete, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.LoadingExecutorComplete, Complete);
}
}
///
/// 任意点击完成
///
internal sealed class AnyClickComplete : GuideCompleteBase
{
///
/// 点击次数
///
private int clickCount;
public AnyClickComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
clickCount = 1;
}
public override void AddListener()
{
InputManager.Instance.OnAnyClick += OnClick;
}
public override void RemoveListener()
{
InputManager.Instance.OnAnyClick -= OnClick;
}
private void OnClick()
{
--clickCount;
if (clickCount != 0)
return;
Complete();
}
}
///
/// 保存队伍完成
///
internal sealed class SaveTeamComplete : GuideCompleteBase
{
public SaveTeamComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.TeamUpdate, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.TeamUpdate, Complete);
}
}
///
/// 保存队伍并且关闭UI完成
///
internal sealed class SaveTeamAndCloseUIComplete : GuideCompleteBase
{
private readonly string uiName;
private bool isSave;
private bool isClose;
public SaveTeamAndCloseUIComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
isSave = false;
isClose = false;
if (Cfg.CompleteTypeParams.Length <= 0)
throw new Exception($"引导id:{Cfg.Id}, 引导类型:{Cfg.GuideStepType},参数数量错误:1.UI名");
uiName = Cfg.CompleteTypeParams[0];
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.TeamUpdate, SaveComplete);
EventManager.Instance.Register(EventManager.EventName.UIClose, (Action)CloseUIComplete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.UIClose, (Action)CloseUIComplete);
EventManager.Instance.Unregister(EventManager.EventName.TeamUpdate, SaveComplete);
}
private void SaveComplete()
{
isSave = true;
Complete();
}
private void CloseUIComplete(string name)
{
if (name != uiName)
return;
isClose = true;
Complete();
}
public override void Complete()
{
if (!isSave)
return;
if (!isClose)
return;
base.Complete();
}
}
///
/// 选择队伍完成
///
internal sealed class SelectTeamComplete : GuideCompleteBase
{
public SelectTeamComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.SetSelectTeam, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.SetSelectTeam, Complete);
}
}
///
/// 上载具
///
internal sealed class JoinVehicle : GuideCompleteBase
{
public JoinVehicle(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.Guide_JoinVehicle, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.Guide_JoinVehicle, Complete);
}
}
///
/// 上阵完成
///
internal sealed class GoBattleComplete : GuideCompleteBase
{
public GoBattleComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.Guide_JoinVehicle, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.Guide_JoinVehicle, Complete);
}
}
///
/// 技能冷却完成
///
internal sealed class SkillCDComplete : GuideCompleteBase
{
public SkillCDComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.Guide_JoinVehicle, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.Guide_JoinVehicle, Complete);
}
}
///
/// 等待完成
///
internal sealed class WaitComplete : GuideCompleteBase
{
public WaitComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.Guide_Wait, Complete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.Guide_Wait, Complete);
}
}
}