using System.Collections.Generic; using Cysharp.Threading.Tasks; using Gameplay.Common; using Gameplay.Net; using Gameplay.SubSystems; using NLDPB; using PhxhSDK; using UnityEngine.SceneManagement; using Framework; using Gameplay.Effect; using Constants = Framework.Constants; namespace Gameplay.Level { public partial class LevelManager { private LevelSettleData _cacheSettleData; public LevelSettleData SettleData { get { return _cacheSettleData; } set { _cacheSettleData = value; } } public PVPSettleData PvpSettleData; private List _showCharIDs; //结算动画展示角色 private List _showVehicleIDs; //结算动画展示载具 private readonly string _testScenePath = "Assets/Scenes/FightWinSceneLocal.unity"; public List ShowCharIDs => _showCharIDs; public List ShowVehicleID => _showVehicleIDs; #region API public async UniTask SettleSceneProcess(ItemList itemList, bool isSweep) { _UpdateSettleTeam(); //CommonUtils.CaptureScreenshot(); //播结算动画 await ShowTransitionMgr.Instance.EnterBlackTransition(true); await ShowTransitionMgr.Instance.EnterBlack(); await UniTask.Delay(250); EffectManager.instance.rootObj.SetActive(false); UITipsManager.CloseClickShield(); //播放过程 //TeamManager.Instance.TeamUIClose(); AudioManager.Instance.StopAll(); await UIManager.Instance.CreateAndOpenWindow(UINameConst.UIMissionWin); var sceneHandle = await GameSceneHelper.Instance.LoadSceneForRt(_testScenePath); var rTexture = GameSceneHelper.Instance.GetRenderTexture(); EventManager.Instance.Send(EventManager.EventName.UIMissionWinRtSet, rTexture); //退出黑屏,渐变 await UniTask.Delay(1000); await ShowTransitionMgr.Instance.ExitBlack(); ShowTransitionMgr.Instance.ExitTransition(); await UniTask.Delay(7500); //CommonUtils.CaptureScreenshot(); await UniTask.Delay(100); //卸载结算场景,进入结算界面 await ShowTransitionMgr.Instance.EnterBlackTransition(true); await ShowTransitionMgr.Instance.EnterBlack(); await UniTask.Delay(250); await UIPassGameController.Open(itemList, isSweep); await UniTask.Delay(250); await ShowTransitionMgr.Instance.ExitBlack(); ShowTransitionMgr.Instance.ExitTransition(); } public async UniTask SettlePvPSceneProcess(ItemList itemList, bool isWin) { _UpdateSettleTeam(); await ShowTransitionMgr.Instance.EnterBlackTransition(true); await ShowTransitionMgr.Instance.EnterBlack(); await UniTask.Delay(250); EffectManager.instance.rootObj.SetActive(false); UITipsManager.CloseClickShield(); //播放过程 //TeamManager.Instance.TeamUIClose(); await UIManager.Instance.CreateAndOpenWindow(UINameConst.UIMissionWin); var sceneHandle = await GameSceneHelper.Instance.LoadSceneForRt(_testScenePath); var rTexture = GameSceneHelper.Instance.GetRenderTexture(); EventManager.Instance.Send(EventManager.EventName.UIMissionWinRtSet, rTexture); //退出黑屏,渐变 await UniTask.Delay(1000); await ShowTransitionMgr.Instance.ExitBlack(); ShowTransitionMgr.Instance.ExitTransition(); await UniTask.Delay(7500); CommonUtils.CaptureScreenshot(); await UniTask.Delay(100); //卸载结算场景,进入结算界面 await ShowTransitionMgr.Instance.EnterBlackTransition(true); await ShowTransitionMgr.Instance.EnterBlack(); await UniTask.Delay(250); await UIPassGameController.PvPOpen(itemList, isWin); await UniTask.Delay(250); await ShowTransitionMgr.Instance.ExitBlack(); ShowTransitionMgr.Instance.ExitTransition(); } public async UniTask OpenSettleScene() { var sceneHandle = await GameSceneManager.Instance.LoadSceneAsync(_testScenePath, LoadSceneMode.Additive); if (sceneHandle == null) { return; } } #endregion //加载数据 private void _UpdateSettleTeam() { if (_showCharIDs == null) { _showCharIDs = new List(); } else { _showCharIDs.Clear(); } if (_showVehicleIDs == null) { _showVehicleIDs = new List(); } else { _showVehicleIDs.Clear(); } var team = TeamEditManager.Instance.GetSelectTeam(); var charIDs = team.GetAllCharacters(); for (int i = 0; i < charIDs.Count; i++) { // if (_showCharIDs.Count >= 5) // { // break; // } if (charIDs[i] > 0) { _showCharIDs.Add(charIDs[i]); } } var vehicleIDs = team.GetVehicleIDs(); _showVehicleIDs = new List(vehicleIDs); } } /// /// 结算界面所需数据 /// public struct LvExp { public uint Lv; public uint Exp; public LvExp(uint exp, uint lv) { Lv = lv; Exp = exp; } } public class LevelSettleData { private readonly int _levelID; private readonly Team _team; private readonly Dictionary _favorDic; //角色好感度缓存 private readonly Dictionary _expDic; //角色经验值缓存 private LvExp _playerLvEXp; //玩家经验值缓存 public int _commonExpCount; //通用经验道具拥有数量 public int LevelID => _levelID; public Team Team => _team; public Dictionary FavorDic => _favorDic; public Dictionary ExpDic => _expDic; public LvExp PlayerLvExp => _playerLvEXp; public int CommonExp => _commonExpCount; public LevelSettleData(int levelId, Team team) { _levelID = levelId; _team = team; _favorDic = new Dictionary(); _expDic = new Dictionary(); SetCharacterExp(); SetPlayerExp(); _commonExpCount = GetCommonExp(); } private void SetCharacterExp() { var charIDs = _team.GetAllCharacters(); for (int i = 0; i < charIDs.Count; i++) { var id = charIDs[i]; if (id != Team.NoneID) { if (!CharacterDataInfoManager.Instance.DataDic.TryGetValue(id, out var charDataInfo)) { continue; } var favorData = new LvExp(charDataInfo.LikelyExp, charDataInfo.LikelyLevel); var expData = new LvExp(charDataInfo.Exp, charDataInfo.Level); _favorDic.Add(id, favorData); _expDic.Add(id, expData); } } } private void SetPlayerExp() { var exp = Actor.Instance.Base.GetProp(ActorProp.Exp); var lv = Actor.Instance.Base.GetProp(ActorProp.Level); _playerLvEXp = new LvExp(exp, lv); } private int GetCommonExp() { int count = (int)CommonUtils.GetItemCount(GLConfig.Inst.data.HeroExpItem); return count; } } /// /// pvp的结算数据缓存 /// public class PVPSettleData { public int Score; public int Rank; public PVPSettleData() { Score = PVPManager.Instance.score; Rank = PVPManager.Instance.order; } } }