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

1051 lines
31 KiB
C#
Raw Normal View History

2024-05-27 15:39:03 +08:00
using cfg.GuideCfg;
2024-07-03 18:30:08 +08:00
using Code.Scripts.Gameplay.Game;
2024-05-27 15:39:03 +08:00
using Framework;
2024-07-02 19:29:18 +08:00
using Gameplay.Area;
2024-07-02 13:45:19 +08:00
using Gameplay.Character;
2024-05-30 19:00:56 +08:00
using Gameplay.Level;
2024-07-05 16:14:23 +08:00
using Gameplay.PlayerSkill;
using Gameplay.Skill;
2024-07-02 20:17:07 +08:00
using Gameplay.Unit;
2024-05-27 15:39:03 +08:00
using System;
2024-07-02 14:23:13 +08:00
using System.Collections.Generic;
2024-05-27 15:39:03 +08:00
using UnityEngine;
2024-06-04 18:27:32 +08:00
using UnityEngine.UI;
2024-07-04 14:40:00 +08:00
using static UIButtonEx;
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
}
2024-06-04 15:13:16 +08:00
#region UI
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-06-04 15:13:16 +08:00
#endregion
2024-05-27 16:57:51 +08:00
2024-06-04 15:13:16 +08:00
#region 关卡战斗
2024-05-29 16:36:30 +08:00
/// <summary>
2024-06-04 13:26:59 +08:00
/// 进入战斗关卡完成
2024-05-29 16:36:30 +08:00
/// </summary>
2024-06-04 13:26:59 +08:00
internal sealed class EnterFightLevelComplete : GuideCompleteBase
2024-05-27 16:57:51 +08:00
{
2024-06-04 15:13:16 +08:00
private bool isChangeLevelState;
private bool isLoadingExecutor;
private bool isLoadingClose;
2024-05-29 16:36:30 +08:00
2024-06-04 13:26:59 +08:00
public EnterFightLevelComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
2024-05-29 16:36:30 +08:00
{
2024-06-04 15:13:16 +08:00
isChangeLevelState = false;
isLoadingExecutor = false;
isLoadingClose = false;
2024-05-29 16:36:30 +08:00
}
public override void AddListener()
{
2024-06-04 15:13:16 +08:00
EventManager.Instance.Register(EventManager.EventName.Guide_ChangeLevelState, OnChangeLevelState);
EventManager.Instance.Register(EventManager.EventName.GuideLoadingExecutor, OnLoadingExecutor);
EventManager.Instance.Register(EventManager.EventName.UIClose, (Action<string>)OnLoadingClose);
2024-05-29 16:36:30 +08:00
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.UIClose, (Action<string>)OnLoadingClose);
2024-06-04 15:13:16 +08:00
EventManager.Instance.Unregister(EventManager.EventName.GuideLoadingExecutor, OnLoadingExecutor);
EventManager.Instance.Unregister(EventManager.EventName.Guide_ChangeLevelState, OnChangeLevelState);
2024-05-30 13:48:26 +08:00
}
2024-06-04 15:13:16 +08:00
private void OnChangeLevelState()
2024-05-30 13:48:26 +08:00
{
2024-06-04 15:13:16 +08:00
isChangeLevelState = true;
CheckComplete();
}
private void OnLoadingExecutor()
{
isLoadingExecutor = true;
CheckComplete();
}
private void OnLoadingClose(string uiName)
{
if (UINameConst.UI_Loading != uiName)
return;
isLoadingClose = true;
CheckComplete();
}
2024-06-04 15:13:16 +08:00
private void CheckComplete()
{
if (!isChangeLevelState)
2024-05-30 13:48:26 +08:00
return;
2024-06-04 15:13:16 +08:00
if (!isLoadingExecutor)
return;
if (!isLoadingClose)
return;
2024-06-04 15:13:16 +08:00
Complete();
}
}
/// <summary>
/// 进入故事关卡完成
/// </summary>
internal sealed class EnterStorylineLevelComplete : GuideCompleteBase
{
private bool isChangeStoryState;
private bool isLoadingExecutor;
private bool isLoadingClose;
2024-05-29 16:36:30 +08:00
2024-06-04 15:13:16 +08:00
public EnterStorylineLevelComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
isChangeStoryState = false;
isLoadingExecutor = false;
isLoadingClose = false;
2024-05-29 16:36:30 +08:00
}
2024-06-04 15:13:16 +08:00
public override void AddListener()
2024-05-29 16:36:30 +08:00
{
2024-06-04 15:13:16 +08:00
EventManager.Instance.Register(EventManager.EventName.Guide_ChangeStoryState, OnChangeStoryState);
EventManager.Instance.Register(EventManager.EventName.GuideLoadingExecutor, OnLoadingExecutor);
EventManager.Instance.Register(EventManager.EventName.UIClose, (Action<string>)OnLoadingClose);
2024-06-04 15:13:16 +08:00
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.UIClose, (Action<string>)OnLoadingClose);
2024-06-04 15:13:16 +08:00
EventManager.Instance.Unregister(EventManager.EventName.GuideLoadingExecutor, 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_Loading != uiName)
return;
isLoadingClose = true;
CheckComplete();
}
2024-06-04 15:13:16 +08:00
private void CheckComplete()
{
if (!isChangeStoryState)
return;
if (!isLoadingExecutor)
2024-05-29 16:36:30 +08:00
return;
if (!isLoadingClose)
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-06-04 15:13:16 +08:00
#endregion
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-07-01 16:19:07 +08:00
/// <summary>
/// 是否等待开始按钮显示完
/// </summary>
private readonly bool isWaitStartButton;
2024-05-30 15:01:43 +08:00
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},参数错误");
2024-06-03 16:48:18 +08:00
if (int.TryParse(cfg.CompleteTypeParams[0], out int count))
embattleCount = count;
}
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();
}
}
/// <summary>
/// 关卡载具上阵完成
/// </summary>
internal sealed class LevelVehicleEmbattleComplete : GuideCompleteBase
{
/// <summary>
/// 上阵数量
/// </summary>
private readonly int embattleCount;
public LevelVehicleEmbattleComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
if (cfg.CompleteTypeParams.Length <= 0)
throw new Exception($"引导类型:{cfg.GuideCompleteType},参数错误");
2024-05-30 15:01:43 +08:00
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>
2024-07-02 13:45:19 +08:00
/// 战斗角色开始移动完成
2024-05-30 16:49:27 +08:00
/// </summary>
2024-07-02 13:45:19 +08:00
internal sealed class FightBeginMoveComplete : GuideCompleteBase
2024-05-30 16:49:27 +08:00
{
2024-07-02 13:45:19 +08:00
public FightBeginMoveComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
2024-05-30 16:49:27 +08:00
{
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();
}
}
2024-07-02 13:45:19 +08:00
/// <summary>
/// 战斗角色移动完成
/// </summary>
internal sealed class FightMoveComplete : GuideCompleteBase
{
/// <summary>
/// 角色配置id
/// </summary>
2024-07-02 14:23:13 +08:00
private readonly List<int> listCharacterCfgId;
2024-07-02 13:45:19 +08:00
/// <summary>
/// 地板索引
/// </summary>
2024-07-02 14:23:13 +08:00
private readonly List<int> listFloorIndex;
/// <summary>
/// 完成计数
/// </summary>
private int total;
2024-07-02 13:45:19 +08:00
public FightMoveComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
2024-07-02 14:23:13 +08:00
if (cfg.CompleteTypeParams.Length <= 1 && (cfg.CompleteTypeParams.Length & 1) != 0)
2024-07-02 13:45:19 +08:00
throw new Exception($"引导id:{cfg.Id},引导类型:{cfg.GuideCompleteType},参数错误");
2024-07-02 14:23:13 +08:00
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);
2024-07-02 13:45:19 +08:00
2024-07-02 14:23:13 +08:00
if (int.TryParse(cfg.CompleteTypeParams[2 * i + 1], out int fId))
listFloorIndex.Add(fId);
}
2024-07-02 13:45:19 +08:00
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.LevelCharacterArriveBlock, (Action<EDArriveBlock>)OnComplete);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.LevelCharacterArriveBlock, (Action<EDArriveBlock>)OnComplete);
}
public void OnComplete(EDArriveBlock arriveBlock)
{
2024-07-02 14:23:13 +08:00
for (int i = 0; i < listCharacterCfgId.Count; ++i)
{
if (listCharacterCfgId[i] != arriveBlock.characterCfgId)
continue;
if (listFloorIndex[i] != arriveBlock.cellIndex)
continue;
++total;
break;
}
2024-07-02 13:45:19 +08:00
2024-07-02 14:23:13 +08:00
if (total < listCharacterCfgId.Count)
2024-07-02 13:45:19 +08:00
return;
2024-07-03 14:07:54 +08:00
UIRoot.Instance.IsEnableGraphicRaycaster(true);
2024-07-02 13:45:19 +08:00
Complete();
}
}
2024-05-30 19:00:56 +08:00
/// <summary>
2024-07-02 14:23:13 +08:00
/// 战斗角色攻击完成
2024-05-30 19:00:56 +08:00
/// </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();
}
}
2024-07-05 16:14:23 +08:00
#region 释放技能
2024-05-30 19:00:56 +08:00
/// <summary>
2024-07-02 16:44:14 +08:00
/// 角色准备释放技能完成
/// </summary>
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);
}
}
2024-07-05 16:14:23 +08:00
/// <summary>
/// 准备释放指挥官技能完成
/// </summary>
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);
}
}
2024-07-02 16:44:14 +08:00
/// <summary>
/// 角色释放技能完成
2024-05-30 19:00:56 +08:00
/// </summary>
internal sealed class FightUseSkillComplete : GuideCompleteBase
{
2024-07-03 13:08:26 +08:00
/// <summary>
/// 返回引导id
/// </summary>
private readonly int returnId;
2024-05-30 19:00:56 +08:00
public FightUseSkillComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
2024-07-03 16:59:26 +08:00
returnId = cfg.Id - 1;
2024-05-30 19:00:56 +08:00
}
public override void AddListener()
{
2024-07-03 13:08:26 +08:00
EventManager.Instance.Register(EventManager.EventName.UI_USE_SKILL, Complete);
EventManager.Instance.Register(EventManager.EventName.Guide_UseSkill, OnUseSkill);
EventManager.Instance.Register(EventManager.EventName.UI_SKILL_CANCEL, OnCancelUseSkill);
2024-05-30 16:49:27 +08:00
}
public override void RemoveListener()
{
2024-07-03 13:08:26 +08:00
EventManager.Instance.Unregister(EventManager.EventName.UI_SKILL_CANCEL, OnCancelUseSkill);
EventManager.Instance.Unregister(EventManager.EventName.Guide_UseSkill, OnUseSkill);
EventManager.Instance.Unregister(EventManager.EventName.UI_USE_SKILL, Complete);
2024-05-31 15:01:21 +08:00
}
2024-07-03 13:08:26 +08:00
private void OnCancelUseSkill()
2024-05-31 15:01:21 +08:00
{
2024-07-03 13:08:26 +08:00
LevelManager.Instance.CurrentLevel.SetPause(true);
2024-05-31 15:01:21 +08:00
2024-07-02 19:29:18 +08:00
AreaManager.instance.LogicUpdate(0);
2024-07-03 13:08:26 +08:00
GuideManager.Instance.ReturnStep(returnId);
}
public void OnUseSkill()
{
LevelManager.Instance.CurrentLevel.SetPause(false);
AreaManager.instance.LogicUpdate(0);
2024-05-30 16:49:27 +08:00
}
2024-07-03 14:07:54 +08:00
public override void Complete()
{
UIRoot.Instance.IsEnableGraphicRaycaster(true);
2024-07-03 16:26:06 +08:00
GuideManager.Instance.IsControlFloor = false;
2024-07-03 14:07:54 +08:00
base.Complete();
}
2024-05-30 16:49:27 +08:00
}
2024-07-05 16:14:23 +08:00
/// <summary>
/// 指挥官释放技能完成
/// </summary>
internal sealed class FightUsePlayerSkillComplete : GuideCompleteBase
{
/// <summary>
/// 返回引导id
/// </summary>
private readonly int returnId;
public FightUsePlayerSkillComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
returnId = cfg.Id - 1;
}
public override void AddListener()
{
EventManager.Instance.Register(EventManager.EventName.Guide_UsePlayerSkill, Complete);
EventManager.Instance.Register(EventManager.EventName.Guide_UseSkill, OnUseSkill);
EventManager.Instance.Register(EventManager.EventName.Guide_CancelPlayerSkill, OnCancelUseSkill);
}
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.Guide_CancelPlayerSkill, OnCancelUseSkill);
EventManager.Instance.Unregister(EventManager.EventName.Guide_UseSkill, OnUseSkill);
EventManager.Instance.Unregister(EventManager.EventName.Guide_UsePlayerSkill, Complete);
}
private void OnCancelUseSkill()
{
LevelManager.Instance.CurrentLevel.SetPause(true);
SkillManager.instance.playerSkillManager.LogicUpdate(0);
AreaManager.instance.LogicUpdate(0);
GuideManager.Instance.ReturnStep(returnId);
}
public void OnUseSkill()
{
LevelManager.Instance.CurrentLevel.SetPause(false);
SkillManager.instance.playerSkillManager.LogicUpdate(0);
AreaManager.instance.LogicUpdate(0);
}
public override void Complete()
{
UIRoot.Instance.IsEnableGraphicRaycaster(true);
GuideManager.Instance.IsControlFloor = false;
base.Complete();
}
}
#endregion
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-06-04 18:27:32 +08:00
EventManager.Instance.Register(EventManager.EventName.UIOpen, (Action<string>)OnOpenUIPause);
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-06-04 18:27:32 +08:00
EventManager.Instance.Unregister(EventManager.EventName.UIOpen, (Action<string>)OnOpenUIPause);
}
private void OnOpenUIPause(string uiName)
{
if (UINameConst.UIPause != uiName)
return;
UIWindow uiWindow = UIManager.Instance.GetOpenedWindowByPath<UIWindow>(UINameConst.UIPause);
if (null == uiWindow)
return;
Transform ts = uiWindow.gameObject.transform.Find("UI_MainPause/UIRetreatAndReturn/Button_Retreat");
if (null == ts)
return;
Button btn = ts.GetComponent<Button>();
if (null == btn)
return;
btn.interactable = false;
2024-05-30 19:55:53 +08:00
}
}
2024-06-03 15:57:43 +08:00
/// <summary>
/// 点击引导按钮完成
/// </summary>
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);
}
}
2024-07-01 13:08:37 +08:00
/// <summary>
/// 点击地板完成
/// </summary>
internal sealed class ClickGuideFloorComplete : GuideCompleteBase
{
public ClickGuideFloorComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
2024-07-01 19:49:11 +08:00
EventManager.Instance.Register(EventManager.EventName.Guide_ClickFloor, OnComplete);
2024-07-01 13:08:37 +08:00
}
public override void RemoveListener()
{
2024-07-01 19:49:11 +08:00
EventManager.Instance.Unregister(EventManager.EventName.Guide_ClickFloor, OnComplete);
}
private void OnComplete()
{
2024-07-03 14:07:54 +08:00
GuideManager.Instance.IsControlFloor = false;
2024-07-01 19:49:11 +08:00
GuideManager.Instance.FloorIndex = -1;
2024-07-03 14:07:54 +08:00
UIRoot.Instance.IsEnableGraphicRaycaster(true);
2024-07-01 19:49:11 +08:00
Complete();
2024-07-01 16:19:07 +08:00
}
}
/// <summary>
/// 等待战斗开始按钮显示完成
/// </summary>
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);
}
2024-07-01 13:08:37 +08:00
2024-07-01 16:19:07 +08:00
public override void RemoveListener()
{
EventManager.Instance.Unregister(EventManager.EventName.Guide_FightStartShow, Complete);
2024-07-01 13:08:37 +08:00
}
}
2024-07-02 14:23:13 +08:00
/// <summary>
/// 等待备战区显示完成
/// </summary>
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);
}
}
2024-07-02 19:45:05 +08:00
/// <summary>
/// 等待敌人撤退
/// </summary>
internal sealed class WaitEnemyRetreatComplete : GuideCompleteBase
{
public WaitEnemyRetreatComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
}
public override void AddListener()
{
2024-07-02 20:17:07 +08:00
EventManager.Instance.Register(EventManager.EventName.INFIGHT_STATUS_CHANGED, (Action<GameUnit>)OnComplete);
2024-07-02 19:45:05 +08:00
}
public override void RemoveListener()
{
2024-07-02 20:17:07 +08:00
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_STATUS_CHANGED, (Action<GameUnit>)OnComplete);
}
private void OnComplete(GameUnit gameUnit)
{
if (!gameUnit.statusData.isRetreat)
return;
Complete();
2024-07-02 19:45:05 +08:00
}
}
2024-07-03 18:30:08 +08:00
/// <summary>
/// 等待起名
/// </summary>
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()
{
2024-07-03 19:15:36 +08:00
GuideManager.Instance.IsChangeName = true;
2024-07-03 18:30:08 +08:00
if (GameStateManager.Instance.GetCurState() is GameStateStory gameStateStory)
gameStateStory.IsReady = false;
await UI_WriteNameController.Open();
base.Complete();
}
}
2024-07-04 13:21:28 +08:00
/// <summary>
/// 等待编队完成
/// </summary>
internal sealed class WaitEditTeamComplete : GuideCompleteBase
{
2024-07-04 13:48:56 +08:00
/// <summary>
/// 队伍人数
/// </summary>
private readonly int cCount;
2024-07-04 13:21:28 +08:00
public WaitEditTeamComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
2024-07-04 13:48:56 +08:00
if (cfg.CompleteTypeParams.Length <= 0)
throw new Exception($"引导id:{cfg.Id}, 引导类型:{cfg.GuideCompleteType},参数错误");
if (int.TryParse(cfg.CompleteTypeParams[0], out int count))
cCount = count;
2024-07-04 13:21:28 +08:00
}
public override void AddListener()
{
2024-07-04 13:48:56 +08:00
EventManager.Instance.Register(EventManager.EventName.TeamModified, (Action<int>)OnTeamModfied);
2024-07-04 13:21:28 +08:00
}
public override void RemoveListener()
{
2024-07-04 13:48:56 +08:00
EventManager.Instance.Unregister(EventManager.EventName.TeamModified, (Action<int>)OnTeamModfied);
}
2024-07-04 13:21:28 +08:00
2024-07-04 13:48:56 +08:00
private void OnTeamModfied(int teamIndex)
{
Team team = TeamEditManager.Instance.GetTeamByIndex((uint)teamIndex);
if (null == team)
return;
if (team.GetCharacterCount() < cCount)
return;
GuideManager.Instance.IsEditTeamGuide = false;
Complete();
2024-07-04 13:21:28 +08:00
}
}
2024-07-04 14:40:00 +08:00
/// <summary>
/// 任意点击完成
/// </summary>
internal sealed class AnyClickComplete : GuideCompleteBase
{
2024-07-04 19:56:55 +08:00
private int count;
2024-07-04 14:40:00 +08:00
public AnyClickComplete(DataGuideCfg cfg, Action complete) : base(cfg, complete)
{
2024-07-05 18:52:49 +08:00
if (cfg.CompleteTypeParams.Length > 0)
{
if (int.TryParse(cfg.CompleteTypeParams[0], out int num))
count = num;
}
else
count = 1;
2024-07-04 14:40:00 +08:00
}
public override void AddListener()
{
InputManager.Instance.OnClick += OnClick;
InputManager.Instance.OnFingerUp += OnClick;
InputManager.Instance.OnFingerUpUI += OnClick;
}
public override void RemoveListener()
{
InputManager.Instance.OnFingerUpUI -= OnClick;
InputManager.Instance.OnFingerUp -= OnClick;
InputManager.Instance.OnClick -= OnClick;
}
private void OnClick(Vector2 screenPos)
{
2024-07-05 18:52:49 +08:00
--count;
if (count > 1)
2024-07-04 19:56:55 +08:00
return;
2024-07-04 14:40:00 +08:00
Complete();
}
}
2024-05-27 15:39:03 +08:00
}