Ludo-3D/Assets/Scripts/UI/Pages/PopUp/PvPModePopup.cs

238 lines
8.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 SoundManager soundManager;
private GameModeHandler gameModeHandler;
private int selectedPlayerCount;
public int SelectedPlayerCount => selectedPlayerCount;
[Header("Horizontal Rows (P1P4)")]
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 Start()
{
OnClick_FourPlayerBtn();
}
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}");
InitPlayers();
}
private void InitPlayers()
{
// update logic based on UpdateInputFieldsVisibility()
List<PlayerType> playerTypes = new List<PlayerType>();
if (playerOneNameInput.gameObject.activeInHierarchy)
playerTypes.Add(PlayerType.Player1);
if (playerTwoNameInput.gameObject.activeInHierarchy)
playerTypes.Add(PlayerType.Player2);
if (playerThreeNameInput.gameObject.activeInHierarchy)
playerTypes.Add(PlayerType.Player3);
if (playerFourNameInput.gameObject.activeInHierarchy)
playerTypes.Add(PlayerType.Player4);
gameModeHandler = gameModeHandler == null ? InterfaceManager.Instance.GetInterfaceInstance<GameModeHandler>() : gameModeHandler;
gameModeHandler.InitPVPModeData(playerTypes);
}
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();
}
}