Files
test/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgTeamMain.cs
T
2026-03-12 16:11:09 +07:00

228 lines
5.9 KiB
C#

// 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<DlgTeamMate> m_pMates = new List<DlgTeamMate>();
private bool m_bPendingShow = false;
public override void Awake()
{
base.Awake();
SetName("Win_TeamMain");
}
public void ShowTeamDialog()
{
m_bPendingShow = true;
UpdateTeamInfo();
}
/// <summary>No-op until real implementation.</summary>
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<CECTeamMember> displayMembers = new List<CECTeamMember>();
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<DlgTeamMate>();
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();
}
}
}
/// <summary>Returns null until real implementation (Win_TeamMate1…10).</summary>
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();
}
}
}