209 lines
7.6 KiB
C#
209 lines
7.6 KiB
C#
using System.Collections.Generic;
|
||
using TMPro;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
|
||
public class PvPModePopup : PopupBase
|
||
{
|
||
[Header("Buttons")]
|
||
[SerializeField] private Button twoPlayerBtn;
|
||
[SerializeField] private Button threePlayerBtn;
|
||
[SerializeField] private Button fourPlayerBtn;
|
||
[SerializeField] private Button switchBtn;
|
||
[SerializeField] private Button playBtn;
|
||
[SerializeField] private Button closeBtn;
|
||
|
||
[Header("Input Field")]
|
||
[SerializeField] private TMP_InputField playerOneNameInput;
|
||
[SerializeField] private TMP_InputField playerTwoNameInput;
|
||
[SerializeField] private TMP_InputField playerThreeNameInput;
|
||
[SerializeField] private TMP_InputField playerFourNameInput;
|
||
|
||
[Header("Player Names")]
|
||
private string playerOneName;
|
||
private string playerTwoName;
|
||
private string playerThreeName;
|
||
private string playerFourName;
|
||
|
||
[Header("References")]
|
||
[SerializeField] private GameObject playerNameInputParent1;
|
||
[SerializeField] private GameObject playerNameInputParent2;
|
||
|
||
[Header("Placeholders")]
|
||
[SerializeField] private TMP_Text playerOnePlaceholder;
|
||
[SerializeField] private TMP_Text playerTwoPlaceholder;
|
||
[SerializeField] private TMP_Text playerThreePlaceholder;
|
||
[SerializeField] private TMP_Text playerFourPlaceholder;
|
||
|
||
private ScreenManager screenManager;
|
||
private GameManager gameManager;
|
||
private SoundManager soundManager;
|
||
private int selectedPlayerCount;
|
||
public int SelectedPlayerCount => selectedPlayerCount;
|
||
|
||
[Header("Horizontal Rows (P1–P4)")]
|
||
public List<GameObject> rows;
|
||
private int hiddenIndex = 0;
|
||
|
||
Dictionary<PlayerType, string> playerNameMap = new();
|
||
|
||
private void OnEnable()
|
||
{
|
||
twoPlayerBtn.onClick.AddListener(OnClick_TwoPlayerBtn);
|
||
threePlayerBtn.onClick.AddListener(OnClick_ThreePlayerBtn);
|
||
fourPlayerBtn.onClick.AddListener(OnClick_FourPlayerBtn);
|
||
playBtn.onClick.AddListener(OnClick_PlayBtn);
|
||
closeBtn.onClick.AddListener(OnClick_CloseBtn);
|
||
switchBtn.onClick.AddListener(OnClick_SwitchBtn);
|
||
}
|
||
|
||
private void OnDisable()
|
||
{
|
||
twoPlayerBtn.onClick.RemoveListener(OnClick_TwoPlayerBtn);
|
||
threePlayerBtn.onClick.RemoveListener(OnClick_ThreePlayerBtn);
|
||
fourPlayerBtn.onClick.RemoveAllListeners();
|
||
playBtn.onClick.RemoveListener(OnClick_PlayBtn);
|
||
closeBtn.onClick.RemoveListener(OnClick_CloseBtn);
|
||
switchBtn.onClick.RemoveListener(OnClick_SwitchBtn);
|
||
}
|
||
|
||
private void OnClick_TwoPlayerBtn()
|
||
{
|
||
switchBtn.gameObject.SetActive(true);
|
||
selectedPlayerCount = 2;
|
||
playerNameInputParent2.SetActive(false);
|
||
}
|
||
|
||
private void OnClick_ThreePlayerBtn()
|
||
{
|
||
switchBtn.gameObject.SetActive(true);
|
||
selectedPlayerCount = 3;
|
||
playerNameInputParent1.SetActive(true);
|
||
playerNameInputParent2.SetActive(true);
|
||
UpdateInputFieldsVisibility();
|
||
}
|
||
|
||
private void OnClick_FourPlayerBtn()
|
||
{
|
||
switchBtn.gameObject.SetActive(false);
|
||
selectedPlayerCount = 4;
|
||
playerNameInputParent1.SetActive(true);
|
||
playerNameInputParent2.SetActive(true);
|
||
UpdateInputFieldsVisibility();
|
||
}
|
||
|
||
private void UpdateInputFieldsVisibility()
|
||
{
|
||
playerOneNameInput.transform.parent.gameObject.SetActive(true);
|
||
playerTwoNameInput.transform.parent.gameObject.SetActive(selectedPlayerCount >= 3);
|
||
playerThreeNameInput.transform.parent.gameObject.SetActive(selectedPlayerCount >= 2);
|
||
playerFourNameInput.transform.parent.gameObject.SetActive(selectedPlayerCount >= 4);
|
||
}
|
||
|
||
private void OnClick_PlayBtn()
|
||
{
|
||
int logicalIndex = 0;
|
||
|
||
foreach (GameObject row in rows)
|
||
{
|
||
if (!row.activeSelf)
|
||
continue;
|
||
|
||
TMP_InputField input = row.GetComponentInChildren<TMP_InputField>();
|
||
|
||
PlayerType playerType = (PlayerType)logicalIndex;
|
||
|
||
string playerName = string.IsNullOrWhiteSpace(input.text)
|
||
? playerType.ToString()
|
||
: input.text;
|
||
|
||
playerNameMap[playerType] = playerName;
|
||
logicalIndex++;
|
||
}
|
||
|
||
// playerOneName = string.IsNullOrWhiteSpace(playerOneNameInput.text) ? Ludo_3D_Constants.Player1_Name : playerOneNameInput.text;
|
||
// playerTwoName = string.IsNullOrWhiteSpace(playerTwoNameInput.text) ? Ludo_3D_Constants.Player1_Name : playerTwoNameInput.text;
|
||
// playerThreeName = string.IsNullOrWhiteSpace(playerThreeNameInput.text) ? Ludo_3D_Constants.Player1_Name : playerThreeNameInput.text;
|
||
// playerFourName = string.IsNullOrWhiteSpace(playerFourNameInput.text) ? Ludo_3D_Constants.Player1_Name : playerFourNameInput.text;
|
||
|
||
playerOneName = playerNameMap.GetValueOrDefault(PlayerType.Player1, Ludo_3D_Constants.Player1_Name);
|
||
playerTwoName = playerNameMap.GetValueOrDefault(PlayerType.Player2, Ludo_3D_Constants.Player2_Name);
|
||
playerThreeName = playerNameMap.GetValueOrDefault(PlayerType.Player3, Ludo_3D_Constants.Player3_Name);
|
||
playerFourName = playerNameMap.GetValueOrDefault(PlayerType.Player4, Ludo_3D_Constants.Player4_Name);
|
||
|
||
|
||
soundManager = soundManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<SoundManager>() : soundManager;
|
||
soundManager?.PlayGameSoundClip(SoundType.ButtonClick);
|
||
|
||
//TODO: Start PVP Game with the selected player count and names
|
||
Debug.Log($"Starting PVP Mode with {selectedPlayerCount} players:");
|
||
Debug.Log($"Player 1: {playerOneName}");
|
||
Debug.Log($"Player 2: {playerTwoName}");
|
||
if (selectedPlayerCount >= 3)
|
||
Debug.Log($"Player 3: {playerThreeName}");
|
||
if (selectedPlayerCount == 4)
|
||
Debug.Log($"Player 4: {playerFourName}");
|
||
}
|
||
|
||
private void OnClick_SwitchBtn()
|
||
{
|
||
if (SelectedPlayerCount == 2)
|
||
{
|
||
if (playerNameInputParent1.activeSelf)
|
||
{
|
||
playerNameInputParent1.SetActive(false);
|
||
playerNameInputParent2.SetActive(true);
|
||
playerOnePlaceholder.text = "Player 1";
|
||
playerThreePlaceholder.text = "Player 2";
|
||
}
|
||
else
|
||
{
|
||
playerNameInputParent1.SetActive(true);
|
||
playerNameInputParent2.SetActive(false);
|
||
playerTwoPlaceholder.text = "Player 1";
|
||
playerFourPlaceholder.text = "Player 2";
|
||
}
|
||
}
|
||
else if (SelectedPlayerCount == 3)
|
||
{
|
||
hiddenIndex = (hiddenIndex + 1) % rows.Count;
|
||
UpdateRows();
|
||
}
|
||
}
|
||
|
||
private void UpdateRows()
|
||
{
|
||
int visiblePlayerIndex = 1;
|
||
|
||
for (int i = 0; i < rows.Count; i++)
|
||
{
|
||
bool isHidden = (i == hiddenIndex);
|
||
rows[i].SetActive(!isHidden);
|
||
|
||
if (!isHidden)
|
||
{
|
||
TMP_InputField input =
|
||
rows[i].GetComponentInChildren<TMP_InputField>();
|
||
|
||
TMP_Text placeholder = input.placeholder as TMP_Text;
|
||
if (placeholder != null)
|
||
{
|
||
placeholder.text = $"Player {visiblePlayerIndex}";
|
||
visiblePlayerIndex++;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
private void OnClick_CloseBtn()
|
||
{
|
||
screenManager = screenManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<ScreenManager>() : screenManager;
|
||
screenManager.ShowScreen(ScreenType.MenuScreen);
|
||
|
||
soundManager = soundManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<SoundManager>() : soundManager;
|
||
soundManager?.PlayGameSoundClip(SoundType.ButtonClick);
|
||
|
||
Hide();
|
||
}
|
||
}
|