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 ItemList _cacheFightStoryReward; public bool IsFightStorySettle; 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) { DebugUtil.Log("Fight Level Win Settle"); _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(); AudioManager.Instance.PlayAudio("bgm_missonclear", AudioCriManager.EPlayType.Music, null, true); 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); 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(); if (isWin) { AudioManager.Instance.PlayAudio("bgm_missonclear", AudioCriManager.EPlayType.Music, null, true); } else { AudioManager.Instance.PlayAudio("bgm_missonfailed", AudioCriManager.EPlayType.Music, null, true); } 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; } } public async UniTask SettleFightStory() { if (_cacheFightStoryReward != null && _cacheFightStoryReward.Lists.Length > 0) { await ShowTransitionMgr.Instance.EnterBlackTransition(true); DebugUtil.LogError("SettleFightStory EnterBlack"); await ShowTransitionMgr.Instance.EnterBlack(); await UniTask.Delay(250); CommonUtils.CaptureScreenshot(); var window = await UI_GetItemWindowController.OpenWithoutClassify(_cacheFightStoryReward, UI_GetItemWindowController.EShowType.StorySettle, _SettleFightStoryCallBack); await UniTask.Delay(250); await ShowTransitionMgr.Instance.ExitBlack(); ShowTransitionMgr.Instance.ExitTransition(); } else { _cacheFightStoryReward = null; _SettleFightStoryCallBack(); } } #endregion private void _SettleFightStoryCallBack() { AudioManager.Instance.StopAll(); AudioManager.Instance.ReleaseAllAudios(); _cacheFightStoryReward = null; IsFightStorySettle = false; ExitLevelDirectly(); } //加载数据 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; } } }