NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/PVP/PVPManager.Fight.cs

110 lines
3.0 KiB
C#
Raw Normal View History

2024-01-03 14:56:46 +08:00
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;
2024-01-04 13:51:08 +08:00
private uint _fightKey;
2024-06-17 14:33:34 +08:00
public bool IsFighting { get; set; }
2024-01-03 14:56:46 +08:00
2024-10-18 12:52:11 +08:00
public bool IsReconnect;
2024-01-03 14:56:46 +08:00
public bool IsWin { get; private set; }
2024-09-26 19:25:46 +08:00
public ItemList RewardItemList;
2024-01-03 14:56:46 +08:00
private void InitFight()
{
2024-10-18 12:52:11 +08:00
IsReconnect = false;
2024-01-04 13:51:08 +08:00
EventManager.Instance.Register<uint>(EventManager.EventName.OnPVPFightStart, OnStartPVPFight);
2024-01-03 14:56:46 +08:00
EventManager.Instance.Register(EventManager.EventName.OnPVPFightFinish, OnFinishPVPFight);
2024-10-18 12:52:11 +08:00
EventManager.Instance.Register(EventManager.EventName.Relogin_BackToGame, ReconnectFinishPVPFight);
2024-01-03 14:56:46 +08:00
}
private void ReleaseFight()
{
2024-01-04 13:51:08 +08:00
EventManager.Instance.Unregister<uint>(EventManager.EventName.OnPVPFightStart, OnStartPVPFight);
2024-01-03 14:56:46 +08:00
EventManager.Instance.Unregister(EventManager.EventName.OnPVPFightFinish, OnFinishPVPFight);
2024-10-18 12:52:11 +08:00
EventManager.Instance.Unregister(EventManager.EventName.Relogin_BackToGame, ReconnectFinishPVPFight);
2024-01-03 14:56:46 +08:00
}
#region API
public void StartPVPFight(uint actorID)
{
LevelManager.Instance.IsSweep = false;
2024-10-18 12:52:11 +08:00
if (IsReconnect)
{
IsReconnect = false;
}
2024-01-03 14:56:46 +08:00
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;
2024-01-03 16:40:57 +08:00
DebugUtil.Log($"finish PVP fight!");
2024-01-04 13:51:08 +08:00
NetHelper.FinishPVPFight(isWin, _fightKey);
2024-01-03 14:56:46 +08:00
}
#endregion
2024-01-04 13:51:08 +08:00
private void OnStartPVPFight(uint key)
2024-01-03 14:56:46 +08:00
{
if (_currEnemy == null)
return;
IsFighting = true;
2024-01-04 13:51:08 +08:00
_fightKey = key;
2024-08-05 16:06:48 +08:00
LevelManager.Instance.PvpSettleData = new PVPSettleData();
2024-09-02 14:55:43 +08:00
LevelManager.Instance.EnterLevelDirectly(_pvpLevelInfo.Cfg.Id, null, _currEnemy.pvpDefenderData);
2024-01-03 14:56:46 +08:00
}
private void OnFinishPVPFight()
{
IsFighting = false;
_currEnemy = null;
2024-08-05 16:06:48 +08:00
//LevelManager.Instance.ExitLevelDirectly();
2024-01-03 14:56:46 +08:00
}
2024-10-18 12:52:11 +08:00
private async void ReconnectFinishPVPFight()
2024-10-17 18:44:26 +08:00
{
2024-10-18 12:52:11 +08:00
if (!IsFighting)
{
return;
}
IsReconnect = true;
2024-10-17 18:44:26 +08:00
OnFinishPVPFight();
2024-10-18 12:52:11 +08:00
await GameSceneHelper.Instance.UnLoadSceneForRt();
AudioManager.Instance.StopAll();
AudioManager.Instance.ReleaseAllAudios();
LevelManager.Instance.ExitLevelDirectly();
2024-10-17 18:44:26 +08:00
}
2024-01-03 14:56:46 +08:00
}