228 lines
5.9 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|