67 lines
1.7 KiB
C#
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());
|
|
}
|
|
|
|
}
|