// Placeholder for CDlgTeamMain. Real UI later. using System.Collections.Generic; using BrewMonster; using BrewMonster.Managers; using BrewMonster.Network; using BrewMonster.Scripts; using UnityEngine; using UnityEngine.UI; using TMPro; using System; namespace BrewMonster.UI { public class DlgTeamMain : AUIDialog { private const int CDLGTEAMMAIN_MAXTEAMMATES = 10; [SerializeField] private Transform teamMateContainer; [SerializeField] private GameObject teamMatePrefabs; [SerializeField] private Button btnClose; private readonly List m_pMates = new List(); private bool m_bPendingShow = false; public override void Awake() { base.Awake(); SetName("Win_TeamMain"); } public void ShowTeamDialog() { m_bPendingShow = true; UpdateTeamInfo(); } /// No-op until real implementation. public bool UpdateTeamInfo() { CECHostPlayer host = GetHostPlayer(); if (host == null) { HideTeamList(); return true; } CECTeam team = host.GetTeam(); int nNumMembers = team != null ? team.GetMemberNum() : 0; if (nNumMembers == 0) { HideTeamList(); ClearAllTeamMates(); return true; } int nStatus = (int)GetData(); int idHost = host.GetCharacterID(); List displayMembers = new List(); for (int i = 0; i < nNumMembers; i++) { CECTeamMember member = team.GetMemberByIndex(i); if (member == null) { continue; } int idPlayer = member.GetCharacterID(); if (idHost == idPlayer) continue; displayMembers.Add(member); } if (!IsShow() && m_bPendingShow) { CECUIManager.Instance?.ShowUI("Win_TeamMain"); m_bPendingShow = false; } //if (!IsShow() && !m_bHasShowOnce) //{ // return true; //} //if(!IsShow() && m_bHasShowOnce && displayMembers.Count > 0) //{ // Show(true); //} int neededCount = displayMembers.Count; AdjustTeamMateCount(neededCount); for (int i = 0; i < displayMembers.Count; i++) { if (i >= m_pMates.Count) break; CECTeamMember member = displayMembers[i]; DlgTeamMate pDlgMate = m_pMates[i]; if (pDlgMate == null) { continue; } pDlgMate.UpdateMemberDisplay(member); pDlgMate.SetMemberID(member.GetCharacterID()); if(!pDlgMate.IsShow()) { pDlgMate.Show(true); } } return true; } private void AdjustTeamMateCount(int neededCount) { neededCount = Mathf.Min(neededCount, CDLGTEAMMAIN_MAXTEAMMATES); while (m_pMates.Count > neededCount) { int lastIndex = m_pMates.Count - 1; DlgTeamMate dlg = m_pMates[lastIndex]; if (dlg != null && dlg.gameObject != null) { Destroy(dlg.gameObject); } m_pMates.RemoveAt(lastIndex); } while (m_pMates.Count < neededCount) { CreateTeamMateDialog(); } } private void CreateTeamMateDialog() { if (teamMatePrefabs == null || teamMateContainer == null) { return; } GameObject go = Instantiate(teamMatePrefabs, teamMateContainer); if (go == null) { return; } DlgTeamMate teamMate = go.GetComponent(); if (teamMate == null) { Destroy(go); return; } teamMate.SetName("Win_TeamMate" + (m_pMates.Count + 1)); teamMate.gameObject.SetActive(true); m_pMates.Add(teamMate); } private void ClearAllTeamMates() { foreach (var mate in m_pMates) { if (mate != null && mate.gameObject != null) { Destroy(mate.gameObject); } } m_pMates.Clear(); } private void HideTeamList() { if (IsShow()) { CloseDialogue(); } HideAllTeamMates(); } private void HideAllTeamMates() { foreach (var mate in m_pMates) { if(mate != null && mate.IsShow()) { mate.CloseDialogue(); } } } /// Returns null until real implementation (Win_TeamMate1…10). public DlgTeamMate GetTeamMateDlg(int index) { if(index >= 0 && index < m_pMates.Count) { return m_pMates[index]; } return null; } private void OnDestroy() { ClearAllTeamMates(); btnClose.onClick.RemoveListener(OnClickClose); } public override void OnEnable() { btnClose.onClick.AddListener(OnClickClose); } private void OnClickClose() { m_bPendingShow = false; CloseDialogue(); } } }