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 (P1–P4)")] public List rows; private int hiddenIndex = 0; Dictionary 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(); 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?.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 playerTypes = new List(); 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.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_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.ShowScreen(ScreenType.MenuScreen); soundManager = soundManager == null ? InterfaceManager.Instance?.GetInterfaceInstance() : soundManager; soundManager?.PlayGameSoundClip(SoundType.ButtonClick); Hide(); } }