using System; using Core; using DG.Tweening; using Sirenix.OdinInspector; using Systems; using TMPro; using UnityEngine; using UnityEngine.UI; using Application = Core.Application; namespace Panels { public class MenuPanel : PanelBase { [SerializeField] private Button startBtn; [SerializeField] private Button investBtn; [SerializeField] private TextMeshProUGUI investPrice; [SerializeField] private Button upgradeBtn; [SerializeField] private TextMeshProUGUI upgradePrice; [BoxGroup("Tap Indicator Settings")] [SerializeField] private Image tapText; [BoxGroup("Tap Indicator Settings")] [SerializeField] private float fadeValue; [BoxGroup("Tap Indicator Settings")] [SerializeField] private float scaleValue; [BoxGroup("Tap Indicator Settings")] [SerializeField] private float animationSpeed; [BoxGroup("Tap Indicator Settings")] [SerializeField] private Ease animationEase; private Tween _scaleTween; private Tween _fadeTween; // TODO: Replace with GameManager. private CannonController _controller; private CannonController Controller { get { if (ReferenceEquals(_controller, null)) _controller = Application.GetSystem(); return _controller; } } protected override void ReleaseReferences() { tapText = null; startBtn = null; investBtn = null; upgradeBtn = null; investPrice = null; upgradePrice = null; base.ReleaseReferences(); } public override void Initialize() { startBtn.onClick.AddListener(StartGame); } private void StartGame() { ClosePanel(); Controller.LaunchCannon(); } private void AnimateText() { _scaleTween = tapText.rectTransform.DOScale(Vector3.one * scaleValue, animationSpeed) .SetEase(animationEase) .SetLoops(-1, LoopType.Yoyo); _fadeTween = tapText.DOFade(fadeValue, animationSpeed) .SetEase(animationEase) .SetLoops(-1, LoopType.Yoyo); } private void ResetAnimationText() { _scaleTween?.Kill(); tapText.rectTransform.localScale = Vector3.one; _fadeTween?.Kill(); tapText.DOFade(1f, 0f); // TODO: Add "SetAlpha()" extension method. } public override void ClosePanel(Action callBack = null) { base.ClosePanel(() => { ResetAnimationText(); callBack?.Invoke(); }); } public override void ClosePanelImmediately() { base.ClosePanelImmediately(); ResetAnimationText(); } public override void OpenPanel(Action callBack = null) { AnimateText(); base.OpenPanel(callBack); } public override void OpenPanelImmediately() { AnimateText(); base.OpenPanelImmediately(); } } }