2026-01-30 11:08:44 +05:30
|
|
|
|
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;
|
|
|
|
|
|
|
2026-01-23 15:32:53 +05:30
|
|
|
|
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;
|
2026-01-30 11:08:44 +05:30
|
|
|
|
[SerializeField] private Button switchBtn;
|
2026-01-21 15:59:12 +05:30
|
|
|
|
[SerializeField] private Button playBtn;
|
2026-01-23 15:32:53 +05:30
|
|
|
|
[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;
|
|
|
|
|
|
|
2026-01-30 11:08:44 +05:30
|
|
|
|
[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;
|
2026-01-30 11:08:44 +05:30
|
|
|
|
|
2026-01-23 15:32:53 +05:30
|
|
|
|
private ScreenManager screenManager;
|
2026-01-28 16:53:28 +05:30
|
|
|
|
private SoundManager soundManager;
|
2026-01-30 11:30:40 +05:30
|
|
|
|
private GameModeHandler gameModeHandler;
|
|
|
|
|
|
|
2026-01-21 15:59:12 +05:30
|
|
|
|
private int selectedPlayerCount;
|
|
|
|
|
|
public int SelectedPlayerCount => selectedPlayerCount;
|
|
|
|
|
|
|
2026-01-30 11:08:44 +05:30
|
|
|
|
[Header("Horizontal Rows (P1–P4)")]
|
2026-01-30 19:14:08 +05:30
|
|
|
|
|
2026-01-30 11:08:44 +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-30 11:08:44 +05:30
|
|
|
|
|
2026-01-21 15:59:12 +05:30
|
|
|
|
private void OnEnable()
|
|
|
|
|
|
{
|
2026-01-30 11:08:44 +05:30
|
|
|
|
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()
|
|
|
|
|
|
{
|
2026-01-30 11:08:44 +05:30
|
|
|
|
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
|
|
|
|
}
|
2026-01-30 11:08:44 +05:30
|
|
|
|
|
|
|
|
|
|
private void OnClick_TwoPlayerBtn()
|
|
|
|
|
|
{
|
|
|
|
|
|
selectedPlayerCount = 2;
|
2026-01-30 19:14:08 +05:30
|
|
|
|
|
|
|
|
|
|
OnPlayerCountsSwitched();
|
|
|
|
|
|
|
|
|
|
|
|
switchBtn.gameObject.SetActive(true);
|
2026-01-30 11:08:44 +05:30
|
|
|
|
playerNameInputParent2.SetActive(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void OnClick_ThreePlayerBtn()
|
2026-01-21 15:59:12 +05:30
|
|
|
|
{
|
2026-01-30 11:08:44 +05:30
|
|
|
|
selectedPlayerCount = 3;
|
2026-01-30 19:14:08 +05:30
|
|
|
|
|
|
|
|
|
|
OnPlayerCountsSwitched();
|
|
|
|
|
|
|
|
|
|
|
|
switchBtn.gameObject.SetActive(true);
|
2026-01-30 11:08:44 +05:30
|
|
|
|
playerNameInputParent1.SetActive(true);
|
|
|
|
|
|
playerNameInputParent2.SetActive(true);
|
2026-01-30 19:14:08 +05:30
|
|
|
|
|
2026-01-30 11:08:44 +05:30
|
|
|
|
UpdateInputFieldsVisibility();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void OnClick_FourPlayerBtn()
|
|
|
|
|
|
{
|
|
|
|
|
|
selectedPlayerCount = 4;
|
2026-01-30 19:14:08 +05:30
|
|
|
|
|
|
|
|
|
|
switchBtn.gameObject.SetActive(false);
|
2026-01-30 11:08:44 +05:30
|
|
|
|
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()
|
|
|
|
|
|
{
|
2026-01-23 15:32:53 +05:30
|
|
|
|
playerOneNameInput.transform.parent.gameObject.SetActive(true);
|
2026-01-30 09:35:31 +05:30
|
|
|
|
playerTwoNameInput.transform.parent.gameObject.SetActive(selectedPlayerCount >= 3);
|
|
|
|
|
|
playerThreeNameInput.transform.parent.gameObject.SetActive(selectedPlayerCount >= 2);
|
2026-01-23 15:32:53 +05:30
|
|
|
|
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 11:08:44 +05:30
|
|
|
|
{
|
2026-01-30 19:14:08 +05:30
|
|
|
|
PlayerType playerType = (PlayerType)idx;
|
|
|
|
|
|
if (!inputFields[idx].transform.parent.gameObject.activeInHierarchy)
|
|
|
|
|
|
{
|
2026-01-30 11:08:44 +05:30
|
|
|
|
continue;
|
2026-01-30 19:14:08 +05:30
|
|
|
|
}
|
2026-01-30 11:08:44 +05:30
|
|
|
|
|
2026-01-30 19:14:08 +05:30
|
|
|
|
playerNameMap.Add(playerType, string.IsNullOrWhiteSpace(inputFields[idx].text) ? $"{playerType}" : inputFields[idx].text);
|
2026-01-30 11:08:44 +05:30
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
2026-01-28 16:53:28 +05:30
|
|
|
|
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 11:30:40 +05:30
|
|
|
|
|
2026-01-30 19:14:08 +05:30
|
|
|
|
popupManager.HidePopup(popupType);
|
2026-01-30 11:30:40 +05:30
|
|
|
|
|
2026-01-30 19:14:08 +05:30
|
|
|
|
gameModeHandler = gameModeHandler == null ? InterfaceManager.Instance.GetInterfaceInstance<GameModeHandler>() : gameModeHandler;
|
2026-01-30 21:51:33 +05:30
|
|
|
|
gameModeHandler.InitPVPModeData(playerNameMap.Keys.ToList(), playerNameMap.Values.ToList());
|
2026-01-30 11:30:40 +05:30
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-30 19:14:08 +05:30
|
|
|
|
private void OnClick_SwitchButton()
|
2026-01-30 11:30:40 +05:30
|
|
|
|
{
|
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 11:30:40 +05:30
|
|
|
|
|
2026-01-30 19:14:08 +05:30
|
|
|
|
playerOnePlaceholder.text = "Player 1";
|
|
|
|
|
|
playerThreePlaceholder.text = "Player 2";
|
2026-01-30 11:30:40 +05:30
|
|
|
|
|
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 11:30:40 +05:30
|
|
|
|
|
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 11:30:40 +05:30
|
|
|
|
|
2026-01-30 19:14:08 +05:30
|
|
|
|
UpdateRows();
|
2026-01-21 15:59:12 +05:30
|
|
|
|
}
|
2026-01-23 15:32:53 +05:30
|
|
|
|
|
2026-01-30 19:14:08 +05:30
|
|
|
|
private void OnPlayerCountsSwitched()
|
2026-01-30 11:08:44 +05:30
|
|
|
|
{
|
2026-01-30 19:14:08 +05:30
|
|
|
|
hiddenIndexes.Clear();
|
2026-01-30 11:08:44 +05:30
|
|
|
|
if (SelectedPlayerCount == 2)
|
|
|
|
|
|
{
|
2026-01-30 19:14:08 +05:30
|
|
|
|
if (playerNameInputParent1.activeInHierarchy)
|
2026-01-30 11:08:44 +05:30
|
|
|
|
{
|
|
|
|
|
|
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 11:08:44 +05:30
|
|
|
|
}
|
2026-01-30 19:14:08 +05:30
|
|
|
|
else if (playerNameInputParent2.activeInHierarchy)
|
2026-01-30 11:08:44 +05:30
|
|
|
|
{
|
|
|
|
|
|
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);
|
2026-01-30 11:08:44 +05:30
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (SelectedPlayerCount == 3)
|
|
|
|
|
|
{
|
2026-01-30 19:14:08 +05:30
|
|
|
|
hiddenIndex = (hiddenIndex + 1) % inputFields.Count;
|
|
|
|
|
|
hiddenIndexes.Add(hiddenIndex);
|
2026-01-30 11:08:44 +05:30
|
|
|
|
}
|
2026-01-30 19:14:08 +05:30
|
|
|
|
|
|
|
|
|
|
UpdateRows();
|
2026-01-30 11:08:44 +05:30
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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 11:08:44 +05:30
|
|
|
|
{
|
2026-01-30 19:14:08 +05:30
|
|
|
|
bool isHidden = hiddenIndexes.Contains(i);
|
|
|
|
|
|
inputFields[i].transform.parent.gameObject.SetActive(!isHidden);
|
2026-01-30 11:08:44 +05:30
|
|
|
|
|
|
|
|
|
|
if (!isHidden)
|
|
|
|
|
|
{
|
2026-01-30 19:14:08 +05:30
|
|
|
|
TMP_Text placeholder = inputFields[i].placeholder as TMP_Text;
|
2026-01-30 11:08:44 +05:30
|
|
|
|
if (placeholder != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
placeholder.text = $"Player {visiblePlayerIndex}";
|
|
|
|
|
|
visiblePlayerIndex++;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-30 19:14:08 +05:30
|
|
|
|
private void OnClick_CloseButton()
|
2026-01-23 15:32:53 +05:30
|
|
|
|
{
|
|
|
|
|
|
screenManager = screenManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<ScreenManager>() : screenManager;
|
2026-01-30 09:35:31 +05:30
|
|
|
|
screenManager.ShowScreen(ScreenType.MenuScreen);
|
2026-01-23 15:32:53 +05:30
|
|
|
|
|
2026-01-28 16:53:28 +05:30
|
|
|
|
soundManager = soundManager == null ? InterfaceManager.Instance?.GetInterfaceInstance<SoundManager>() : soundManager;
|
|
|
|
|
|
soundManager?.PlayGameSoundClip(SoundType.ButtonClick);
|
|
|
|
|
|
|
2026-01-23 15:32:53 +05:30
|
|
|
|
Hide();
|
|
|
|
|
|
}
|
2026-01-21 15:59:12 +05:30
|
|
|
|
}
|