using System; using Core; using Sirenix.Utilities; using UnityEngine; namespace PermanentSystems { [Serializable] public class PersistantData { public float musicVolume = 1f; public float soundEffectsVolume = 1f; public int playSessions; public float highestScore; public int totalBlueOrbs; public float inputSensitivity = .5f; public bool enableVibrations = true; public string ToJson() => JsonUtility.ToJson(this, true); } public class PersistantDataController : SystemBase { public PersistantData PlayerData { get; private set; } private const string DataKey = "PlayerData"; protected override void ReleaseReferences() { PlayerData = null; } public override void Initialize() { var jsonData = PlayerPrefs.GetString(DataKey, string.Empty); PlayerData = jsonData.IsNullOrWhitespace() ? new PersistantData() : JsonUtility.FromJson(jsonData); } public void SaveData() => PlayerPrefs.SetString(DataKey, PlayerData.ToJson()); public void UpdatePlaySessions() => PlayerData.playSessions++; public void UpdateHighScore(float inScore) => PlayerData.highestScore = inScore; public void UpdateMusicVolume(float inVolume) => PlayerData.musicVolume = inVolume; public void UpdateSoundEffectsVolume(float inVolume) => PlayerData.soundEffectsVolume = inVolume; public void UpdateSensitivity(float inValue) => PlayerData.inputSensitivity = inValue; public void UpdateVibration(bool inState) => PlayerData.enableVibrations = inState; public void UpdateBlueOrbs(int inBlueOrbs) => PlayerData.totalBlueOrbs += inBlueOrbs; } }