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, and supports leaderboard view. /// public class MinigameSwitchMenu : MonoBehaviour { [Header("UI References")] public Image iconImage; public TMP_Text levelNameText; public Button confirmButton; public Button cancelButton; public Button leaderboardButton; public GameObject levelInfoContainer; public GameObject leaderboardContainer; public Button leaderboardDismissButton; private Action _onLevelConfirm; private Action _onCancel; private LevelSwitchData _switchData; /// /// Initialize the menu with data and callbacks. /// public void Setup(LevelSwitchData switchData, Action onLevelConfirm, Action onCancel) { _switchData = switchData; _onLevelConfirm = onLevelConfirm; _onCancel = onCancel; if (iconImage) iconImage.sprite = switchData?.menuSprite ?? switchData?.mapSprite; if (levelNameText) levelNameText.text = switchData?.targetLevelSceneName ?? ""; if (confirmButton) confirmButton.onClick.AddListener(OnConfirmClicked); if (cancelButton) cancelButton.onClick.AddListener(OnCancelClicked); if (leaderboardButton) leaderboardButton.onClick.AddListener(OnLeaderboardClicked); if (leaderboardDismissButton) leaderboardDismissButton.onClick.AddListener(OnLeaderboardDismissClicked); if (levelInfoContainer) levelInfoContainer.SetActive(true); if (leaderboardContainer) leaderboardContainer.SetActive(false); } private void OnDestroy() { if (confirmButton) confirmButton.onClick.RemoveListener(OnConfirmClicked); if (cancelButton) cancelButton.onClick.RemoveListener(OnCancelClicked); if (leaderboardButton) leaderboardButton.onClick.RemoveListener(OnLeaderboardClicked); if (leaderboardDismissButton) leaderboardDismissButton.onClick.RemoveListener(OnLeaderboardDismissClicked); } private void OnConfirmClicked() { _onLevelConfirm?.Invoke(); Destroy(gameObject); } private void OnCancelClicked() { _onCancel?.Invoke(); Destroy(gameObject); } private void OnLeaderboardClicked() { if (levelInfoContainer) levelInfoContainer.SetActive(false); if (leaderboardContainer) leaderboardContainer.SetActive(true); } private void OnLeaderboardDismissClicked() { if (levelInfoContainer) levelInfoContainer.SetActive(true); if (leaderboardContainer) leaderboardContainer.SetActive(false); } } }