using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; using PrimeTween; namespace Code.UI { public class MainMenuController : MonoBehaviour { [SerializeField] private RectTransform logoTransform; [SerializeField] private CanvasGroup buttonsContainer; [SerializeField] private RectTransform[] buttons; [SerializeField] private Image backgroundImage; [SerializeField] private Button playButton; [SerializeField] private Button leaderboardButton; [SerializeField] private Button customizeButton; [SerializeField] private Button exitButton; [SerializeField] private AudioSource musicPrefab; private static AudioSource _instanceMusic; private void Awake() { HandleMusic(); } private void Start() { playButton.onClick.AddListener(() => LoadScene("Gameplay")); customizeButton.onClick.AddListener(() => LoadScene("Customization")); leaderboardButton.onClick.AddListener(() => Debug.Log("Leaderboard")); exitButton.onClick.AddListener(Application.Quit); AnimateMenu(); } private void HandleMusic() { if (_instanceMusic == null) { _instanceMusic = Instantiate(musicPrefab); DontDestroyOnLoad(_instanceMusic.gameObject); } } private void AnimateMenu() { backgroundImage.color = new Color(1, 1, 1, 0); Tween.Alpha(backgroundImage, 1f, 1f); Tween.Scale(logoTransform, 1.05f, 1f, Ease.InOutSine, cycles: -1, cycleMode: CycleMode.Yoyo); for (var i = 0; i < buttons.Length; i++) { var btn = buttons[i]; btn.localScale = Vector3.zero; Tween.Scale(btn, 1f, 0.5f, Ease.OutBack, startDelay: i * 0.1f); } } private void LoadScene(string sceneName) { Tween.Alpha(buttonsContainer, 0f, 0.3f).OnComplete(() => { SceneManager.LoadScene(sceneName); }); } private void OnDestroy() { playButton.onClick.RemoveAllListeners(); customizeButton.onClick.RemoveAllListeners(); leaderboardButton.onClick.RemoveAllListeners(); exitButton.onClick.RemoveAllListeners(); } } }