using UnityEngine; namespace FlappyBird.Core { /// /// Pure C# service — all scoring logic lives here. /// No MonoBehaviour, no Unity lifecycle. Injected via Zenject. /// High score is persisted with PlayerPrefs. /// public sealed class ScoreManager : IScoreManager { private const string HIGH_SCORE_KEY = "HighScore"; // ── IScoreManager ────────────────────────────────────────────────── /// public int CurrentScore { get; private set; } /// public int HighScore { get; private set; } /// public event System.Action OnScoreChanged; /// public event System.Action OnHighScoreBeaten; // ── Constructor ──────────────────────────────────────────────────── public ScoreManager() { HighScore = PlayerPrefs.GetInt(HIGH_SCORE_KEY, 0); } // ── IScoreManager ────────────────────────────────────────────────── /// public void AddScore(int points) { if (points <= 0) return; CurrentScore += points; OnScoreChanged?.Invoke(CurrentScore); if (CurrentScore > HighScore) { HighScore = CurrentScore; PlayerPrefs.SetInt(HIGH_SCORE_KEY, HighScore); PlayerPrefs.Save(); OnHighScoreBeaten?.Invoke(HighScore); } } /// public void ResetScore() { CurrentScore = 0; OnScoreChanged?.Invoke(CurrentScore); } } }