【编队】编队场景生命周期管理

main
chenyuqi 2023-10-30 12:47:21 +08:00
parent bb79797796
commit b0fee28670
5 changed files with 49 additions and 9 deletions

View File

@ -19,6 +19,7 @@ public class TeamEditManager : Singlenton<TeamEditManager>, IInitable
private List<Team> _teamList;
private Team _selectTeam;
private TeamPreviewNode _teamPreviewNode;
public static readonly List<string> PreviewNodeOpenList = new List<string>();
public List<Team> TeamList => _teamList;
public TeamPreviewNode TeamPreviewNode => _teamPreviewNode;
@ -133,20 +134,30 @@ public class TeamEditManager : Singlenton<TeamEditManager>, 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<TeamEditManager>, 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)
{

View File

@ -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<GameObject>(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<GameObject>(vehicleData.Cfg.PrefabPath);
if (!trans)
{
return;
}
var go = Instantiate(prefab, trans.position, trans.rotation, vRoot.transform);
if (go)
{

View File

@ -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);
}

View File

@ -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)

View File

@ -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<RawImage>().texture = previewNode.RTexture;
}