using Cysharp.Threading.Tasks; using Framework; using Gameplay.SubSystems; using NLDPB; using PhxhSDK; using System; using UnityEngine; namespace Gameplay.LegionBattle { public sealed partial class LegionBattleManager : Singlenton, IInitable, IUpdatable { /// /// 按钮CD(秒) /// private const float BUTTON_CD = 3f; /// /// 服务器操作消息冷却(秒) /// private const float Net_CD = 1f; /// /// 服务器消息冷却完成的时间 /// private DateTime netCDEndTime; /// /// 当前军团战阶段 /// public LegionBattleStatus CurBattleStatus { get; private set; } /// /// 当前军团战报名状态 /// private LegionBattleSignStatus _curBattleLegionBattleSignStatus; /// /// 军团长指挥按钮CD结束时间 /// public DateTime ButtonCDEndTime { get; private set; } /// /// 是否可以发送消息 /// public bool IsSendNet { get { return CommonUtils.GetCurTime(CommonUtils.E_TimeType.Server) >= netCDEndTime; } } /// /// 军团战 /// public LegionBattle CurBattle { get; private set; } /* private LegionBattleView v; public LegionBattleView View { get { if(v == null) { var go = new GameObject(); go.name = "LegionBattleView"; GameObject.DontDestroyOnLoad(go); v = go.AddComponent(); v.Init(); } return v; } }*/ public LegionBattleSignStatus CurBattleLegionBattleSignStatus { get { return _curBattleLegionBattleSignStatus; } set { _curBattleLegionBattleSignStatus = value; } } public void Init() { InitAction(); EventManager.Instance.Register(EventManager.EventName.LegionBattleStatus, OnBattleLegionStatus); } public void Update(float deltaTime) { if (IsLegionBattle) CurBattle?.Update(deltaTime); } public void Release() { EventManager.Instance.Unregister(EventManager.EventName.LegionBattleStatus, OnBattleLegionStatus); ReleaseAction(); } #region API /// /// 加载军团战 /// /// /// public async UniTask LoadLegionBattle() { await CurBattle.Load(); return E_LoadingResult.Success; } /// /// 加载军团战查看地图 /// /// public async UniTask LoadLegionBattleInspect() { CurBattle = new(MapID); await CurBattle.LoadInspect(); return E_LoadingResult.Success; } /// /// 卸载军团战 /// public async void UnloadLegionBattle() { if (null != CurBattle) { await CurBattle.Unload(); CurBattle.Release(); CurBattle = null; } } public static string GetStartTimeStr(int scheduleID) { var startTime = CommonUtils.GetScheduleStartDateTime(scheduleID); var timeStr = startTime.ToString("HH:mm"); return CommonUtils.GetLocalizeText("legionbattle_start_time", startTime.Year, startTime.Month, startTime.Day, timeStr); } public static string GetEndTimeStr(int scheduleID) { var endTime = CommonUtils.GetScheduleStartDateTime(scheduleID); var timeStr = endTime.ToString("HH:mm"); return CommonUtils.GetLocalizeText("legionbattle_start_time", endTime.Year, endTime.Month, endTime.Day, timeStr); } /// /// 是否以进行编队 /// /// public bool CheckIsEditTeam() { var teams = TeamEditManager.Instance.TeamLegionList; foreach (var team in teams) { if (!team.IsMemberEmpty()) { return true; } } return false; } /// /// 获取阵营对应名称 /// /// /// public static string GetTeamName(BattlefieldActorCamp camp) { switch (camp) { case BattlefieldActorCamp.CampA: return CommonUtils.GetLocalizeText("legionbattle_team_blue"); case BattlefieldActorCamp.CampB: return CommonUtils.GetLocalizeText("legionbattle_team_red"); default: return CommonUtils.GetLocalizeText("legionbattle_team_none"); } } /// /// 设置指挥冷却时间 /// public void SetCommandCD() { ButtonCDEndTime = CommonUtils.GetCurTime(CommonUtils.E_TimeType.Server).AddSeconds(BUTTON_CD); EventManager.Instance.Send(EventManager.EventName.UpdateLegionBattleButtonCD); } /// /// 设置军团战所有消息冷却时间 /// public void SetNetCD() { netCDEndTime = CommonUtils.GetCurTime(CommonUtils.E_TimeType.Server).AddSeconds(Net_CD); } #endregion /// /// 军团战状态变化 /// /// private void OnBattleLegionStatus(LegionBattleStatus legionBattleStatus) { CurBattleStatus = legionBattleStatus; if (IsLegionBattleOK && LegionBattleStatus.Combat != CurBattleStatus) { Debug("军团战结束"); // TODO 进入结算 } } } }