NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/LegionBattle/LegionBattleManager.Action.cs

125 lines
4.1 KiB
C#

using Framework;
using Gameplay.Net;
using PhxhSDK;
using System.Collections.Generic;
namespace Gameplay.LegionBattle
{
public sealed partial class LegionBattleManager : Singlenton<LegionBattleManager>, IUpdatable
{
/// <summary>
/// 是否军团战中
/// </summary>
public bool IsLegionBattle { get; private set; }
/// <summary>
/// 是否进入军团战完成
/// </summary>
public bool IsLegionBattleOK { get; private set; }
private void InitAction()
{
IsLegionBattle = false;
IsLegionBattleOK = false;
EventManager.Instance.Register(EventManager.EventName.EnterLegionBattle, OnServerEnterLegionBattle);
EventManager.Instance.Register(EventManager.EventName.EnterLegionBattleSuccess, OnServerEnterLegionBattleOK);
EventManager.Instance.Register(EventManager.EventName.ExitLegionBattle, OnServerExitLegionBattle);
}
private void ReleaseAction()
{
EventManager.Instance.Unregister(EventManager.EventName.ExitLegionBattle, OnServerExitLegionBattle);
EventManager.Instance.Unregister(EventManager.EventName.EnterLegionBattleSuccess, OnServerEnterLegionBattleOK);
EventManager.Instance.Unregister(EventManager.EventName.EnterLegionBattle, OnServerEnterLegionBattle);
}
/// <summary>
/// 向服务器发送消息进入军团战
/// </summary>
/// <param name="id"></param>
/// <param name="finishCallback"></param>
/// <param name="param"></param>
/// <param name="isPlay">剧情加载完成后是否立即播放</param>
public void TryEnterLegionBattleByServer()
{
WaitingForServer.Instance.EventWaiting(WaitingForServer.EventName.FightEnter, false);
if (IsLegionBattle)
{
DebugUtil.LogError($"进入军团战失败!当前正处于军团战中!");
WaitingForServer.Instance.EventDone(WaitingForServer.EventName.FightEnter);
return;
}
NetHelper.EnterLegionBattle(); // 进入军团战消息
}
/// <summary>
/// 向服务器发送消息退出军团战
/// </summary>
public void TryExitLegionBattleByServer()
{
WaitingForServer.Instance.EventWaiting(WaitingForServer.EventName.FightEnter, false);
if (!IsLegionBattleOK)
{
DebugUtil.LogError($"退出军团战失败!当前不处于军团战中!");
WaitingForServer.Instance.EventDone(WaitingForServer.EventName.FightEnter);
return;
}
NetHelper.ExitLegionBattle(); // 退出军团战消息
}
/// <summary>
/// 进入军团战(不经过服务器)
/// </summary>
public void EnterLegionBattle()
{
IsLegionBattle = true;
GameStateManager.Instance.ChangeState(new GameStateLegionBattle());
}
/// <summary>
/// 退出军团战(经过服务器)
/// </summary>
public void ExitLegionBattle()
{
IsLegionBattleOK = false;
IsLegionBattle = false;
GameStateManager.Instance.ChangeState(new GameStateMainScene(false, true));
}
/// <summary>
/// 服务器回调进入军团战
/// </summary>
private void OnServerEnterLegionBattle()
{
WaitingForServer.Instance.EventDone(WaitingForServer.EventName.FightEnter);
MapId = 1;
EnterLegionBattle();
}
/// <summary>
/// 服务器回调进入军团战完成
/// </summary>
private void OnServerEnterLegionBattleOK()
{
IsLegionBattleOK = true;
}
/// <summary>
/// 服务器退出军团战
/// </summary>
private void OnServerExitLegionBattle()
{
WaitingForServer.Instance.EventDone(WaitingForServer.EventName.FightEnter);
ExitLegionBattle();
}
}
}