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

106 lines
3.3 KiB
C#
Raw Normal View History

2023-12-29 15:07:04 +08:00
using System.Collections;
using System.Collections.Generic;
2024-01-08 13:59:23 +08:00
using System.Linq;
2023-12-29 15:07:04 +08:00
using Cysharp.Threading.Tasks;
using Framework;
2024-01-08 19:14:33 +08:00
using Framework.Wrapper;
2023-12-29 15:07:04 +08:00
using Gameplay;
using Gameplay.Level;
2024-01-03 14:56:46 +08:00
using Gameplay.Net;
2023-12-29 15:07:04 +08:00
using Gameplay.SubSystems;
2023-12-29 19:58:17 +08:00
using PhxhSDK;
2023-12-29 15:07:04 +08:00
using TGS;
using UnityEngine;
2023-12-29 19:58:17 +08:00
using UnityEngine.SceneManagement;
2023-12-29 15:07:04 +08:00
2024-01-03 14:56:46 +08:00
//防守方布阵
2023-12-29 15:07:04 +08:00
public partial class PVPManager
{
private enum ECurrState
{
None,
LoadingScene,
LoadingUI,
}
private ECurrState _currState;
2023-12-29 19:58:17 +08:00
private string _scenePath;
2023-12-29 15:07:04 +08:00
public async void EnterDefendPrepare()
{
var loadingExecutor = new LoadingExecutorWithUILoadingController
{
getProgress = GetEnterProgress,
};
2023-12-29 19:58:17 +08:00
UIManager.Instance.HideAllUI();
2023-12-29 15:07:04 +08:00
LoadingExecutorManager.Instance.ExecuteLoading(loadingExecutor);
_currState = ECurrState.None;
await LoadScene();
await LoadUI();
}
2024-01-03 14:56:46 +08:00
public async void ExitDefendPrepare(List<PVPUnitInfo> unitInfosAfterEdit)
2023-12-29 15:07:04 +08:00
{
2024-01-08 19:14:33 +08:00
SetPVPDefenderPrepareData(unitInfosAfterEdit);
2023-12-29 15:07:04 +08:00
PrepareTeamManager.Instance.Dispose();
UIManager.Instance.CloseWindow(UINameConst.UI_PVPDefendPrepare, UIWindowCloseType.HideAndDestroy);
2023-12-29 15:15:11 +08:00
UIManager.Instance.ShowAllUI();
2024-01-15 15:38:20 +08:00
await GameSceneHelper.Instance.UnLoadSceneForUIView(_scenePath);
2024-01-15 14:20:22 +08:00
//CameraManager.Instance.SetMainCameraActive(true);
2024-01-15 15:38:20 +08:00
//CameraManager.Instance.RevertMainCamera();
2023-12-29 15:07:04 +08:00
}
private async UniTask LoadScene()
{
_currState = ECurrState.LoadingScene;
2023-12-29 19:58:17 +08:00
_scenePath = _pvpLevelInfo.LevelScene;
2024-01-15 15:38:20 +08:00
await GameSceneHelper.Instance.LoadSceneForUIView(_scenePath, LoadSceneMode.Additive);
2023-12-29 15:07:04 +08:00
}
private async UniTask LoadUI()
{
if (_pvpLevelInfo == null)
return;
_currState = ECurrState.LoadingUI;
var tgs = UnityEngine.Object.FindObjectOfType<TerrainGridSystem>();
2024-01-10 13:40:07 +08:00
var mapData = await _pvpLevelInfo.GetMapData();
var levelData = await _pvpLevelInfo.GetLevelData();
PrepareTeamManager.Instance.Init(tgs, mapData, levelData.pvpDefendRegionId,
levelData.pvpDefendToward, NLDSceneManager.Instance.SceneCamera);
2023-12-29 15:07:04 +08:00
await UIManager.Instance.OpenWindow(UINameConst.UI_PVPDefendPrepare);
}
private float GetEnterProgress()
{
switch (_currState)
{
case ECurrState.None:
return 0;
break;
case ECurrState.LoadingScene:
return GameSceneManager.Instance.GetSceneLoadingProgress(_pvpLevelInfo.LevelScene) * 100;
break;
case ECurrState.LoadingUI:
return 100;
default:
return 0;
}
}
2024-01-08 19:14:33 +08:00
2024-01-03 14:56:46 +08:00
private void SetPVPDefenderPrepareData(List<PVPUnitInfo> unitInfos)
{
2024-01-09 16:12:29 +08:00
if (unitInfos.Count == 0)
2024-01-08 19:14:33 +08:00
return;
2024-01-09 19:30:53 +08:00
unitInfos.Sort((a, b) => a.type.CompareTo(b.type));
2024-01-09 16:12:29 +08:00
uint vehicleID = unitInfos[^1].type == Unit.UnitType.Vehicle ? unitInfos[^1].unitID : 0;
uint[] characterIDs = new uint[vehicleID == 0 ? unitInfos.Count : unitInfos.Count - 1];
for (int i = 0; i < characterIDs.Length; i++)
2024-01-03 14:56:46 +08:00
{
characterIDs[i] = unitInfos[i].unitID;
}
byte[] teamData = PVPUnitInfo.Serialize(unitInfos);
NetHelper.SetDefenceTeamForPvp(characterIDs, vehicleID, teamData);
}
2023-12-29 15:07:04 +08:00
}