using System.Collections; using System.Collections.Generic; using System.Linq; using Framework; using Gameplay.Level; using Gameplay.Net; using NLDPB; using UnityEngine; public partial class PVPManager { private PVPEnemyInfo _currEnemy; private uint _fightKey; public bool IsFighting { get; set; } public bool IsReconnect; public bool IsWin { get; private set; } public ItemList RewardItemList; private void InitFight() { IsReconnect = false; EventManager.Instance.Register(EventManager.EventName.OnPVPFightStart, OnStartPVPFight); EventManager.Instance.Register(EventManager.EventName.OnPVPFightFinish, OnFinishPVPFight); EventManager.Instance.Register(EventManager.EventName.Relogin_BackToGame, ReconnectFinishPVPFight); } private void ReleaseFight() { EventManager.Instance.Unregister(EventManager.EventName.OnPVPFightStart, OnStartPVPFight); EventManager.Instance.Unregister(EventManager.EventName.OnPVPFightFinish, OnFinishPVPFight); EventManager.Instance.Unregister(EventManager.EventName.Relogin_BackToGame, ReconnectFinishPVPFight); } #region API public void StartPVPFight(uint actorID) { if (IsReconnect) { IsReconnect = false; } if (IsFighting) { DebugUtil.LogError("cant enter PVP!current pvp fighting is not finish!"); return; } _currEnemy = _enemies.FirstOrDefault(enemy => enemy.actorID == actorID); if (_currEnemy == null) { DebugUtil.LogError($"cant find enemy! actor ID:{actorID}"); return; } DebugUtil.Log($"enter PVP fight! enemy actor ID:{actorID}"); NetHelper.StartPVPFight(actorID); } public void FinishPVPFight(bool isWin) { if (!IsFighting) { DebugUtil.LogError("cant finish PVP!there is no pvp fighting now"); return; } IsWin = isWin; DebugUtil.Log($"finish PVP fight!"); NetHelper.FinishPVPFight(isWin, _fightKey); } #endregion private void OnStartPVPFight(uint key) { if (_currEnemy == null) return; IsFighting = true; _fightKey = key; LevelManager.Instance.PvpSettleData = new PVPSettleData(); LevelManager.Instance.EnterLevelDirectly(_pvpLevelInfo.Cfg.Id, null, _currEnemy.pvpDefenderData); } private void OnFinishPVPFight() { IsFighting = false; _currEnemy = null; //LevelManager.Instance.ExitLevelDirectly(); } private async void ReconnectFinishPVPFight() { if (!IsFighting) { return; } IsReconnect = true; OnFinishPVPFight(); await GameSceneHelper.Instance.UnLoadSceneForRt(); AudioManager.Instance.StopAll(); AudioManager.Instance.ReleaseAllAudios(); LevelManager.Instance.ExitLevelDirectly(); } }