93 lines
2.4 KiB
C#
93 lines
2.4 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
public class ScoreController : MonoBehaviour, ITextChangable
|
|
{
|
|
public event Action<float> OnScoreChange;
|
|
|
|
|
|
private LeaderboardController _leaderboardController;
|
|
private float _currentScore = 0;
|
|
|
|
private bool _decreaseBonus;
|
|
private Coroutine _decreaseReloadCoroutine;
|
|
|
|
private UIPopupController _UIPopupController;
|
|
|
|
public UnityEvent<object> OnTextChange => _OnTextChange;
|
|
private UnityEvent<object> _OnTextChange = new UnityEvent<object>();
|
|
|
|
private BonusController _bonusController;
|
|
|
|
private void Awake()
|
|
{
|
|
_bonusController = FindObjectOfType<BonusController>();
|
|
_UIPopupController = FindObjectOfType<UIPopupController>();
|
|
_leaderboardController = FindObjectOfType<LeaderboardController>();
|
|
}
|
|
|
|
[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((int)_currentScore);
|
|
OnScoreChange?.Invoke(_currentScore);
|
|
|
|
if (usePopup)
|
|
{
|
|
_UIPopupController.SpawnPopup
|
|
(
|
|
resScore.ToString(),
|
|
UIMagnetType.Score,
|
|
() => {
|
|
_OnTextChange?.Invoke(_currentScore);
|
|
_bonusController.UseBonus();
|
|
}
|
|
);
|
|
}
|
|
else
|
|
{
|
|
_OnTextChange?.Invoke(_currentScore);
|
|
}
|
|
}
|
|
|
|
}
|