using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; public class PvAIModePopup : PopupBase { [SerializeField] private Color playerBtnNormalColor; [SerializeField] private Color playerBtnSelectedColor; [Header("Bot Selection Buttons")] [SerializeField] private Button twoPlayerBtn; [SerializeField] private Button threePlayerBtn; [SerializeField] private Button fourPlayerBtn; [Header("Color Selection Buttons")] [SerializeField] private Button redBtn; [SerializeField] private Button blueBtn; [SerializeField] private Button greyBtn; [SerializeField] private Button greenBtn; [Header("Action Buttons")] [SerializeField] private Button playBtn; [SerializeField] private Button closeBtn; [Header("Input Field")] [SerializeField] private TMP_InputField playerNameInput; [Header("Player Names")] private string playerName; private ScreenManager screenManager; private SoundManager soundManager; private GameModeHandler gameModeHandler; private GameManager gameManager; private int selectedPlayerCount; private PlayerType playerType; private Button currPlayerCountBtn, prevPlayerCountBtn; private Button currPlayerTypeBtn, prePlayerTypeBtn; private void OnEnable() { twoPlayerBtn.onClick.AddListener(() => OnPlayerCountSelected(2, twoPlayerBtn)); threePlayerBtn.onClick.AddListener(() => OnPlayerCountSelected(3, threePlayerBtn)); fourPlayerBtn.onClick.AddListener(() => OnPlayerCountSelected(4, fourPlayerBtn)); playBtn.onClick.AddListener(OnClick_PlayButton); closeBtn.onClick.AddListener(OnClick_CloseButton); redBtn.onClick.AddListener(() => OnColorSelected(PlayerType.Player1, redBtn)); blueBtn.onClick.AddListener(() => OnColorSelected(PlayerType.Player2, blueBtn)); greyBtn.onClick.AddListener(() => OnColorSelected(PlayerType.Player3, greyBtn)); greenBtn.onClick.AddListener(() => OnColorSelected(PlayerType.Player4, greenBtn)); } private void Start() { OnPlayerCountSelected(2, twoPlayerBtn); OnColorSelected(PlayerType.Player1, redBtn); } private void OnDisable() { twoPlayerBtn.onClick.RemoveAllListeners(); threePlayerBtn.onClick.RemoveAllListeners(); fourPlayerBtn.onClick.RemoveAllListeners(); playBtn.onClick.RemoveAllListeners(); closeBtn.onClick.RemoveAllListeners(); } private void OnPlayerCountSelected(int count, Button button) { selectedPlayerCount = count; prevPlayerCountBtn = currPlayerCountBtn; currPlayerCountBtn = button; ColorBlock colorBlock; if (prevPlayerCountBtn) { colorBlock = prevPlayerCountBtn.colors; colorBlock.normalColor = playerBtnNormalColor; prevPlayerCountBtn.colors = colorBlock; } colorBlock = currPlayerCountBtn.colors; colorBlock.normalColor = playerBtnSelectedColor; currPlayerCountBtn.colors = colorBlock; } private void OnClick_PlayButton() { playerName = string.IsNullOrWhiteSpace(playerNameInput.text) ? Ludo_3D_Constants.Player1_Name : playerNameInput.text; soundManager = soundManager == null ? InterfaceManager.Instance?.GetInterfaceInstance() : soundManager; soundManager?.PlayGameSoundClip(SoundType.ButtonClick); //TODO: Start PvAI Game with the selected player count and name Debug.Log($"Starting PVP Mode with {selectedPlayerCount} players:"); Debug.Log($"Player 1: {playerName}"); popupManager.HidePopup(popupType); screenManager = screenManager == null ? InterfaceManager.Instance?.GetInterfaceInstance() : screenManager; screenManager.HideScreen(ScreenType.MainMenuScreen); gameModeHandler = gameModeHandler == null ? InterfaceManager.Instance.GetInterfaceInstance() : gameModeHandler; gameModeHandler.InitBotModeData(new PlayerData { playerType = playerType, playerName = playerName }, selectedPlayerCount - 1); gameManager = gameManager == null ? InterfaceManager.Instance.GetInterfaceInstance() : gameManager; gameManager.OnGameStateChanged(GameState.InGame); } private void OnClick_CloseButton() { popupManager.HidePopup(popupType); screenManager = screenManager == null ? InterfaceManager.Instance?.GetInterfaceInstance() : screenManager; screenManager.ShowScreen(ScreenType.MainMenuScreen); soundManager = soundManager == null ? InterfaceManager.Instance?.GetInterfaceInstance() : soundManager; soundManager?.PlayGameSoundClip(SoundType.ButtonClick); } private void OnColorSelected(PlayerType type, Button button) { playerType = type; prePlayerTypeBtn = currPlayerTypeBtn; currPlayerTypeBtn = button; ColorBlock colorBlock; if (prePlayerTypeBtn) { colorBlock = prePlayerTypeBtn.colors; colorBlock.normalColor = playerBtnNormalColor; prePlayerTypeBtn.colors = colorBlock; } colorBlock = currPlayerTypeBtn.colors; colorBlock.normalColor = playerBtnSelectedColor; currPlayerTypeBtn.colors = colorBlock; } }