Files
PGiZ4/Assets/Code/UI/MainMenuController.cs
T
2026-03-08 21:56:20 +03:00

78 lines
2.4 KiB
C#

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(() => LoadScene("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();
}
}
}