67 lines
1.7 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Serialization;
public class Statistics : MonoBehaviour,IResettable
{
private float distance;
public int coinCount;
private int coinMultiplier;
public int Score { get; private set; }
public event Action<int> OnCoinCountChanged = delegate { };
public event Action<float> OnDistanceChanged = delegate { };
public event Action<int> OnScoreCalculated = delegate { };
[FormerlySerializedAs("PlayerHUD")] [SerializeField] private PlayerHUDView playerHUD;
private void Awake()
{
ResetToDefault();
}
private void OnEnable()
{
Coin.OnCoinCollected += UpdateCoinCount;
}
private void OnDisable()
{
Coin.OnCoinCollected -= UpdateCoinCount;
}
private void Update()
{
CalculateScore();
}
public void UpdateCoinCount(int amount)
{
coinCount += amount;
OnCoinCountChanged?.Invoke(coinCount);
}
public void UpdateDistance(float amount)
{
distance += amount;
OnDistanceChanged?.Invoke(distance);
}
public void CalculateScore()
{
Score = Mathf.FloorToInt(coinCount * coinMultiplier + distance);
OnScoreCalculated?.Invoke(Score);
playerHUD.UpdateScore(Score.ToString());
}
public void ResetToDefault()
{
distance = 0;
Score = 0;
coinCount = 0;
coinMultiplier = 1;
//gameOverPopUp.gameObject.SetActive(false);
}
public void AddScore(int amount)
{
Score += amount;
OnScoreCalculated?.Invoke(Score);
playerHUD.UpdateScore(Score.ToString());
}
}