From b0fee28670a9b3baf241c8fffaeece66ab3e1282 Mon Sep 17 00:00:00 2001 From: chenyuqi <1357020360@qq.com> Date: Mon, 30 Oct 2023 12:47:21 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E7=BC=96=E9=98=9F=E3=80=91=E7=BC=96?= =?UTF-8?q?=E9=98=9F=E5=9C=BA=E6=99=AF=E7=94=9F=E5=91=BD=E5=91=A8=E6=9C=9F?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scripts/Gameplay/Team/TeamEditManager.cs | 36 ++++++++++++++++--- .../Scripts/Gameplay/Team/TeamPreviewNode.cs | 16 ++++++++- .../UI/Team/UI_TeamChooseController.cs | 2 +- .../Gameplay/UI/Team/UI_TeamInfoController.cs | 2 +- .../Gameplay/UI/UI_BeforeFightController.cs | 2 +- 5 files changed, 49 insertions(+), 9 deletions(-) diff --git a/ProjectNLD/Assets/Code/Scripts/Gameplay/Team/TeamEditManager.cs b/ProjectNLD/Assets/Code/Scripts/Gameplay/Team/TeamEditManager.cs index d2f99500a16..1ec3bb44a95 100644 --- a/ProjectNLD/Assets/Code/Scripts/Gameplay/Team/TeamEditManager.cs +++ b/ProjectNLD/Assets/Code/Scripts/Gameplay/Team/TeamEditManager.cs @@ -19,6 +19,7 @@ public class TeamEditManager : Singlenton, IInitable private List _teamList; private Team _selectTeam; private TeamPreviewNode _teamPreviewNode; + public static readonly List PreviewNodeOpenList = new List(); public List TeamList => _teamList; public TeamPreviewNode TeamPreviewNode => _teamPreviewNode; @@ -133,20 +134,30 @@ public class TeamEditManager : Singlenton, IInitable NetHelper.CreateTeam((uint)team.TeamIndex, team.Name, (uint)team.IconNumber, charIds, team.GetVehicleID()); } - public async UniTask LoadTeamPreviewNode(int teamIdx) + public async UniTask LoadTeamPreviewNode(int teamIdx, string openPanel = "") { + if (string.IsNullOrEmpty(openPanel)) + { + DebugUtil.LogError("----- 请传入打开TeamPreviewNode的界面名!!!-----"); + } SetRawImageRect(Screen.width, Screen.height); - if (_teamPreviewNode) + + if (_teamPreviewNode && PreviewNodeOpenList.Count > 0) { RefreshPreviewNode(teamIdx); - return; + } + + if (!PreviewNodeOpenList.Contains(openPanel)) + { + PreviewNodeOpenList.Add(openPanel); } await LoadNewTeamPreviewNode(teamIdx); + } public async UniTask LoadNewTeamPreviewNode(int teamIdx) { - ReleaseTeamPreviewNode(); + DoReleaseTeamPreviewNode(); var team = _teamList[teamIdx]; var charIDs = team.GetCharacterIDs(); @@ -173,7 +184,22 @@ public class TeamEditManager : Singlenton, IInitable } } - public void ReleaseTeamPreviewNode() + public void ReleaseTeamPreviewNode(string releasePanel = "") + { + if (string.IsNullOrEmpty(releasePanel)) + { + DebugUtil.LogError("----- 请传入释放TeamPreviewNode的界面名!!!-----"); + } + + PreviewNodeOpenList.Remove(releasePanel); + + if (_teamPreviewNode && PreviewNodeOpenList.Count <= 0) + { + DoReleaseTeamPreviewNode(); + } + } + + private void DoReleaseTeamPreviewNode() { if (_teamPreviewNode) { diff --git a/ProjectNLD/Assets/Code/Scripts/Gameplay/Team/TeamPreviewNode.cs b/ProjectNLD/Assets/Code/Scripts/Gameplay/Team/TeamPreviewNode.cs index 94d4bd2ec74..c8a83b50438 100644 --- a/ProjectNLD/Assets/Code/Scripts/Gameplay/Team/TeamPreviewNode.cs +++ b/ProjectNLD/Assets/Code/Scripts/Gameplay/Team/TeamPreviewNode.cs @@ -31,6 +31,8 @@ public class TeamPreviewNode: MonoBehaviour private bool _isLoading; private int _teamIdx; + private bool _isReleasing; + private RenderTexture _rTexture; private void Awake() @@ -59,8 +61,11 @@ public class TeamPreviewNode: MonoBehaviour Destroy(node.gameObject); } - public void RefreshNode(int teamIdx, uint[] charIDs, uint vehicleID) + public void RefreshNode(int teamIdx) { + var team = TeamEditManager.Instance.GetTeamByIndex((uint)teamIdx); + var charIDs = team.GetCharacterIDs(); + var vehicleID = team.GetVehicleID(); ClearObjs(); SetData(teamIdx, charIDs, vehicleID); CreateObjs(); @@ -201,6 +206,11 @@ public class TeamPreviewNode: MonoBehaviour if (data != null) { var prefab = await AssetManager.Instance.LoadAssetAsync(data.DisplayPrefabPath); + if (!trans) + { + return; + } + var go = Instantiate(prefab, trans.position, trans.rotation, cRoot.transform); if (go) { @@ -257,6 +267,10 @@ public class TeamPreviewNode: MonoBehaviour { var trans = vehiclePos; var prefab = await AssetManager.Instance.LoadAssetAsync(vehicleData.Cfg.PrefabPath); + if (!trans) + { + return; + } var go = Instantiate(prefab, trans.position, trans.rotation, vRoot.transform); if (go) { diff --git a/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/Team/UI_TeamChooseController.cs b/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/Team/UI_TeamChooseController.cs index 437ea0fc02a..a2f2fe44473 100644 --- a/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/Team/UI_TeamChooseController.cs +++ b/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/Team/UI_TeamChooseController.cs @@ -161,7 +161,7 @@ public class UI_TeamChooseController : UIWindow async void OnClickItem(int idx) { Team team = TeamEditManager.Instance.TeamList[idx]; - await TeamEditManager.Instance.LoadTeamPreviewNode(idx); + await TeamEditManager.Instance.LoadTeamPreviewNode(idx, UINameConst.UITeamInfo); await UIManager.Instance.OpenWindow(UINameConst.UITeamInfo, team); } diff --git a/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/Team/UI_TeamInfoController.cs b/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/Team/UI_TeamInfoController.cs index ce7e0a6e374..8d191778a9a 100644 --- a/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/Team/UI_TeamInfoController.cs +++ b/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/Team/UI_TeamInfoController.cs @@ -122,7 +122,7 @@ public class UI_TeamInfoController : UIWindow private void OnBackClick() { UIManager.Instance.CloseWindow(WindowName); - TeamEditManager.Instance.ReleaseTeamPreviewNode(); + TeamEditManager.Instance.ReleaseTeamPreviewNode(UINameConst.UITeamInfo); } private async void OnClickCharHead(int idx) diff --git a/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/UI_BeforeFightController.cs b/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/UI_BeforeFightController.cs index d93cd949749..835b3389436 100644 --- a/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/UI_BeforeFightController.cs +++ b/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/UI_BeforeFightController.cs @@ -117,7 +117,7 @@ public class UI_BeforeFightController : UIWindow private async void RefreshScene() { - await TeamEditManager.Instance.LoadTeamPreviewNode(_currTeamIndex); + await TeamEditManager.Instance.LoadTeamPreviewNode(_currTeamIndex, UINameConst.UI_BeforeFight); var previewNode = TeamEditManager.Instance.TeamPreviewNode; GetComponent().texture = previewNode.RTexture; }