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

255 lines
8.4 KiB
C#
Raw Normal View History

using System.Collections.Generic;
2026-01-30 19:14:08 +05:30
using System.Linq;
2026-01-21 15:59:12 +05:30
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class PvPModePopup : PopupBase
2026-01-21 15:59:12 +05:30
{
[Header("Buttons")]
[SerializeField] private Button twoPlayerBtn;
[SerializeField] private Button threePlayerBtn;
[SerializeField] private Button fourPlayerBtn;
[SerializeField] private Button switchBtn;
2026-01-21 15:59:12 +05:30
[SerializeField] private Button playBtn;
[SerializeField] private Button closeBtn;
2026-01-21 15:59:12 +05:30
[Header("Input Field")]
[SerializeField] private TMP_InputField playerOneNameInput;
[SerializeField] private TMP_InputField playerTwoNameInput;
[SerializeField] private TMP_InputField playerThreeNameInput;
[SerializeField] private TMP_InputField playerFourNameInput;
[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;
2026-01-30 19:14:08 +05:30
[SerializeField] private List<TMP_InputField> inputFields = new List<TMP_InputField>();
[Header("Player Names")]
private string playerOneName;
private string playerTwoName;
private string playerThreeName;
private string playerFourName;
private ScreenManager screenManager;
private SoundManager soundManager;
private GameModeHandler gameModeHandler;
2026-01-21 15:59:12 +05:30
private int selectedPlayerCount;
public int SelectedPlayerCount => selectedPlayerCount;
[Header("Horizontal Rows (P1P4)")]
2026-01-30 19:14:08 +05:30
private int hiddenIndex = 0;
2026-01-30 19:14:08 +05:30
private List<int> hiddenIndexes = new List<int>();
private Dictionary<PlayerType, string> playerNameMap = new();
2026-01-21 15:59:12 +05:30
private void OnEnable()
{
twoPlayerBtn.onClick.AddListener(OnClick_TwoPlayerBtn);
threePlayerBtn.onClick.AddListener(OnClick_ThreePlayerBtn);
fourPlayerBtn.onClick.AddListener(OnClick_FourPlayerBtn);
2026-01-30 19:14:08 +05:30
playBtn.onClick.AddListener(OnClick_PlayButton);
closeBtn.onClick.AddListener(OnClick_CloseButton);
switchBtn.onClick.AddListener(OnClick_SwitchButton);
2026-01-21 15:59:12 +05:30
}
2026-01-30 14:13:52 +05:30
private void Start()
{
OnClick_FourPlayerBtn();
}
2026-01-21 15:59:12 +05:30
private void OnDisable()
{
twoPlayerBtn.onClick.RemoveListener(OnClick_TwoPlayerBtn);
threePlayerBtn.onClick.RemoveListener(OnClick_ThreePlayerBtn);
2026-01-21 15:59:12 +05:30
fourPlayerBtn.onClick.RemoveAllListeners();
2026-01-30 19:14:08 +05:30
playBtn.onClick.RemoveListener(OnClick_PlayButton);
closeBtn.onClick.RemoveListener(OnClick_CloseButton);
switchBtn.onClick.RemoveListener(OnClick_SwitchButton);
2026-01-21 15:59:12 +05:30
}
private void OnClick_TwoPlayerBtn()
{
selectedPlayerCount = 2;
2026-01-30 19:14:08 +05:30
OnPlayerCountsSwitched();
switchBtn.gameObject.SetActive(true);
playerNameInputParent2.SetActive(false);
}
private void OnClick_ThreePlayerBtn()
2026-01-21 15:59:12 +05:30
{
selectedPlayerCount = 3;
2026-01-30 19:14:08 +05:30
OnPlayerCountsSwitched();
switchBtn.gameObject.SetActive(true);
playerNameInputParent1.SetActive(true);
playerNameInputParent2.SetActive(true);
2026-01-30 19:14:08 +05:30
UpdateInputFieldsVisibility();
}
private void OnClick_FourPlayerBtn()
{
selectedPlayerCount = 4;
2026-01-30 19:14:08 +05:30
switchBtn.gameObject.SetActive(false);
playerNameInputParent1.SetActive(true);
playerNameInputParent2.SetActive(true);
2026-01-30 19:14:08 +05:30
2026-01-21 15:59:12 +05:30
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);
2026-01-21 15:59:12 +05:30
}
2026-01-30 19:14:08 +05:30
private void OnClick_PlayButton()
2026-01-21 15:59:12 +05:30
{
2026-01-30 19:14:08 +05:30
playerNameMap.Clear();
for (int idx = 0; idx < inputFields.Count; idx++)
{
2026-01-30 19:14:08 +05:30
PlayerType playerType = (PlayerType)idx;
if (!inputFields[idx].transform.parent.gameObject.activeInHierarchy)
{
continue;
2026-01-30 19:14:08 +05:30
}
2026-01-30 19:14:08 +05:30
playerNameMap.Add(playerType, string.IsNullOrWhiteSpace(inputFields[idx].text) ? $"{playerType}" : inputFields[idx].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);
2026-01-21 15:59:12 +05:30
Debug.Log($"Starting PVP Mode with {selectedPlayerCount} players:");
2026-01-30 19:14:08 +05:30
popupManager.HidePopup(popupType);
2026-01-30 19:14:08 +05:30
gameModeHandler = gameModeHandler == null ? InterfaceManager.Instance.GetInterfaceInstance<GameModeHandler>() : gameModeHandler;
gameModeHandler.InitPVPModeData(playerNameMap.Keys.ToList());
}
2026-01-30 19:14:08 +05:30
private void OnClick_SwitchButton()
{
2026-01-30 19:14:08 +05:30
hiddenIndexes.Clear();
if (SelectedPlayerCount == 2)
{
if (playerNameInputParent1.activeInHierarchy)
{
playerNameInputParent1.SetActive(false);
playerNameInputParent2.SetActive(true);
2026-01-30 19:14:08 +05:30
playerOnePlaceholder.text = "Player 1";
playerThreePlaceholder.text = "Player 2";
2026-01-30 19:14:08 +05:30
hiddenIndexes.Add((int)PlayerType.Player1);
hiddenIndexes.Add((int)PlayerType.Player3);
}
else
{
playerNameInputParent1.SetActive(true);
playerNameInputParent2.SetActive(false);
playerTwoPlaceholder.text = "Player 1";
playerFourPlaceholder.text = "Player 2";
2026-01-30 19:14:08 +05:30
hiddenIndexes.Add((int)PlayerType.Player2);
hiddenIndexes.Add((int)PlayerType.Player4);
}
}
else if (SelectedPlayerCount == 3)
{
hiddenIndex = (hiddenIndex + 1) % inputFields.Count;
hiddenIndexes.Add(hiddenIndex);
}
2026-01-30 19:14:08 +05:30
UpdateRows();
2026-01-21 15:59:12 +05:30
}
2026-01-30 19:14:08 +05:30
private void OnPlayerCountsSwitched()
{
2026-01-30 19:14:08 +05:30
hiddenIndexes.Clear();
if (SelectedPlayerCount == 2)
{
2026-01-30 19:14:08 +05:30
if (playerNameInputParent1.activeInHierarchy)
{
playerOnePlaceholder.text = "Player 1";
playerThreePlaceholder.text = "Player 2";
2026-01-30 19:14:08 +05:30
hiddenIndexes.Add((int)PlayerType.Player2);
hiddenIndexes.Add((int)PlayerType.Player4);
}
2026-01-30 19:14:08 +05:30
else if (playerNameInputParent2.activeInHierarchy)
{
playerTwoPlaceholder.text = "Player 1";
playerFourPlaceholder.text = "Player 2";
2026-01-30 19:14:08 +05:30
hiddenIndexes.Add((int)PlayerType.Player1);
hiddenIndexes.Add((int)PlayerType.Player3);
}
}
else if (SelectedPlayerCount == 3)
{
2026-01-30 19:14:08 +05:30
hiddenIndex = (hiddenIndex + 1) % inputFields.Count;
hiddenIndexes.Add(hiddenIndex);
}
2026-01-30 19:14:08 +05:30
UpdateRows();
}
private void UpdateRows()
{
int visiblePlayerIndex = 1;
2026-01-30 19:14:08 +05:30
for (int i = 0; i < inputFields.Count; i++)
{
2026-01-30 19:14:08 +05:30
bool isHidden = hiddenIndexes.Contains(i);
inputFields[i].transform.parent.gameObject.SetActive(!isHidden);
if (!isHidden)
{
2026-01-30 19:14:08 +05:30
TMP_Text placeholder = inputFields[i].placeholder as TMP_Text;
if (placeholder != null)
{
placeholder.text = $"Player {visiblePlayerIndex}";
visiblePlayerIndex++;
}
}
}
}
2026-01-30 19:14:08 +05:30
private void OnClick_CloseButton()
{
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();
}
2026-01-21 15:59:12 +05:30
}