using System; using Core; using DG.Tweening; using PermanentSystems; using Systems; using TMPro; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; using Application = Core.Application; namespace Panels { public class GameOverPanel : PanelBase { [SerializeField] private RectTransform window; [SerializeField] private float openDuration = .7f; [SerializeField] private Ease openEase; [SerializeField] private Button restartBtn; [SerializeField] private TextMeshProUGUI scoreText; private GameManager _manager; private GameManager GameManager { get { if (_manager == null) _manager = Application.GetSystem(); return _manager; } } private PersistantDataController _dataController; private PersistantDataController DataController { get { if (_dataController == null) _dataController = Application.GetSystem(); return _dataController; } } protected override void ReleaseReferences() { base.ReleaseReferences(); _manager = null; restartBtn = null; } public override void Initialize() { restartBtn.onClick.AddListener(RestartGame); } public override void OpenPanel(Action callBack = null) { TinySauce.OnGameFinished(GameManager.CurrentScore); GameManager.PauseGame(); var score = (int) DataController.PlayerData.highestScore; DataController.UpdatePlaySessions(); scoreText.text = GameManager.HasNewScore ? $"New High Score!\n{score}" : $"Previous High Score:\n{score}"; OpenPanelImmediately(); window.localScale = Vector3.zero; window.DOScale(Vector3.one * 1.5f, openDuration) .SetEase(openEase) .OnComplete(() => callBack?.Invoke()); } private void RestartGame() { AudioSystem.PlaySoundEffect(AudioList.ButtonClickB); DataController.SaveData(); SceneManager.LoadScene(SceneManager.GetActiveScene().name); // TODO: Centralize navigation in Application class. } } }