using System; using TMPro; using UnityEngine; using UnityEngine.UI; namespace Levels { /// /// UI overlay for confirming a level switch. Displays level info and handles confirm/cancel actions. /// public class LevelSwitchMenu : MonoBehaviour { [Header("UI References")] public Image iconImage; public TMP_Text levelNameText; public Button confirmButton; public Button cancelButton; public Button minigameButton; public GameObject padlockIcon; public Button restartButton; public GameObject popupConfirmMenu; public Button popupConfirmButton; public Button popupCancelButton; public Image tintTargetImage; public Color popupTintColor = new Color(0.5f, 0.5f, 0.5f, 1f); // grey by default private Color _originalTintColor; private Action _onRestart; private Action _onLevelConfirm; private Action _onMinigameConfirm; private Action _onCancel; private LevelSwitchData _switchData; /// /// Initialize the menu with data and callbacks. /// public void Setup(LevelSwitchData switchData, Action onLevelConfirm, Action onMinigameConfirm, Action onCancel, Action onRestart = null) { _switchData = switchData; _onLevelConfirm = onLevelConfirm; _onMinigameConfirm = onMinigameConfirm; _onCancel = onCancel; _onRestart = onRestart; if (iconImage) iconImage.sprite = switchData?.mapSprite; if (levelNameText) levelNameText.text = switchData?.targetLevelSceneName ?? ""; if (confirmButton) confirmButton.onClick.AddListener(OnConfirmClicked); if (cancelButton) cancelButton.onClick.AddListener(OnCancelClicked); if (minigameButton) { minigameButton.onClick.AddListener(OnMinigameClicked); bool minigameUnlocked = true; minigameButton.interactable = minigameUnlocked; padlockIcon.SetActive(!minigameUnlocked); } if (restartButton) restartButton.onClick.AddListener(OnRestartClicked); if (popupConfirmMenu) popupConfirmMenu.SetActive(false); if (tintTargetImage) _originalTintColor = tintTargetImage.color; if (popupConfirmButton) popupConfirmButton.onClick.AddListener(OnPopupConfirmClicked); if (popupCancelButton) popupCancelButton.onClick.AddListener(OnPopupCancelClicked); } private void OnDestroy() { if (confirmButton) confirmButton.onClick.RemoveListener(OnConfirmClicked); if (cancelButton) cancelButton.onClick.RemoveListener(OnCancelClicked); if (minigameButton) minigameButton.onClick.RemoveListener(OnMinigameClicked); if (restartButton) restartButton.onClick.RemoveListener(OnRestartClicked); if (popupConfirmButton) popupConfirmButton.onClick.RemoveListener(OnPopupConfirmClicked); if (popupCancelButton) popupCancelButton.onClick.RemoveListener(OnPopupCancelClicked); } private void OnConfirmClicked() { _onLevelConfirm?.Invoke(); Destroy(gameObject); } private void OnMinigameClicked() { _onMinigameConfirm?.Invoke(); Destroy(gameObject); } private void OnCancelClicked() { _onCancel?.Invoke(); Destroy(gameObject); } private void OnRestartClicked() { if (popupConfirmMenu) popupConfirmMenu.SetActive(true); if (tintTargetImage) tintTargetImage.color = popupTintColor; } private void OnPopupCancelClicked() { if (popupConfirmMenu) popupConfirmMenu.SetActive(false); if (tintTargetImage) tintTargetImage.color = _originalTintColor; } private void OnPopupConfirmClicked() { _onRestart?.Invoke(); if (popupConfirmMenu) popupConfirmMenu.SetActive(false); if (tintTargetImage) tintTargetImage.color = _originalTintColor; } } }