using System.Collections; using System.Collections.Generic; using UnityEngine; using Sirenix.OdinInspector; namespace KairoEngine.Utilities.Statistics { [HideMonoScript] public class Statistics : SerializedMonoBehaviour { #region Singleton private static Statistics statistics; public static Statistics instance { get { if(!statistics) { statistics = FindObjectOfType (typeof(Statistics)) as Statistics; if(!statistics) { Debug.LogError("There need to one active Statistics script on the scene."); return null; } } return statistics; } } #endregion [ListDrawerSettings(ShowPaging = false)] public List data = new List(); void Awake() { if(instance != null && instance != this) { Destroy(this.gameObject); return; } LoadStatistics(); } void OnDestroy() { SaveStatistics(); } public static StatisticData GetData(string title) { if(instance == null) return null; for (int i = 0; i < instance.data.Count; i++) { if(instance.data[i].title == title) return instance.data[i]; } return null; } private void LoadStatistics() { if(instance == null) return; for (int i = 0; i < instance.data.Count; i++) { StatisticData stat = instance.data[i]; if(stat.persistent == false) continue; switch (stat.category) { case StatisticType.time: float time = PlayerPrefs.GetFloat(stat.title, 0f); stat.SetTime(time); break; case StatisticType.integer: int integer = PlayerPrefs.GetInt(stat.title, 0); stat.SetInteger(integer); break; case StatisticType.text: string text = PlayerPrefs.GetString(stat.title, ""); stat.SetText(text); break; default: break; } } } private void SaveStatistics() { if(instance == null) return; for (int i = 0; i < instance.data.Count; i++) { StatisticData stat = instance.data[i]; if(stat.persistent == false) continue; switch (stat.category) { case StatisticType.time: PlayerPrefs.SetFloat(stat.title, stat.GetTime()); break; case StatisticType.integer: PlayerPrefs.SetInt(stat.title, stat.GetInteger()); break; case StatisticType.text: PlayerPrefs.SetString(stat.title, stat.GetText()); break; default: break; } } } } }