using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; public class ScoreController : MonoBehaviour, ITextChangable { public event Action OnScoreChange; private LeaderboardController _leaderboardController; private float _currentScore = 0; private bool _decreaseBonus; private Coroutine _decreaseReloadCoroutine; private UIPopupController _UIPopupController; public UnityEvent OnTextChange => _OnTextChange; private UnityEvent _OnTextChange = new UnityEvent(); private BonusController _bonusController; private void Awake() { _bonusController = FindObjectOfType(); _UIPopupController = FindObjectOfType(); _leaderboardController = FindObjectOfType(); } [ContextMenu("Debug add score")] private void DebugAddScore() { AddScore(100, true); } [ContextMenu("Debug add score in time")] private void DebugAddScoreInTime() { AddScoreInTime(100, 2, false); } public void AddScoreInTime(float ammount, float time, bool useBonus) { StartCoroutine(ScoreInTime_Coroutine(ammount,time,useBonus)); } private IEnumerator ScoreInTime_Coroutine(float ammount, float time, bool useBonus) { var timeOffset = time / ammount; for (int i = 0; i < ammount; i++) { AddScore(1, useBonus, false); yield return new WaitForSeconds(timeOffset); } } public void AddScore(float ammount, bool useBonus = false, bool usePopup = true) { float resScore = ammount; if (useBonus) { _bonusController.DecreaseReload(); resScore *= _bonusController.BonusValue; } _currentScore += resScore; PlayerSetup.Instance.SetPlayerScore(_currentScore); OnScoreChange?.Invoke(_currentScore); if (usePopup) { _UIPopupController.SpawnPopup ( resScore.ToString(), UIMagnetType.Score, () => { _OnTextChange?.Invoke(_currentScore); _bonusController.UseBonus(); } ); } else { _OnTextChange?.Invoke(_currentScore); } } }