using System; using D2D.Common; using D2D.Utilities; using D2D.Core; using D2D.Gameplay; using NaughtyAttributes; using UnityEngine; using static D2D.Utilities.SettingsFacade; using static D2D.Utilities.CommonLazyFacade; using static D2D.Utilities.CommonGameplayFacade; using System.Collections.Generic; namespace D2D.Databases { public class GameProgressionDatabase : GameStateMachineUser, ILazy { #region For analytics public readonly DataContainer<int> Reloads = new DataContainer<int>("ReloadsCount", 0); public readonly DataContainer<int> CompletedLevelsPerSession = new DataContainer<int>("CompletedLevelsPerSession", 0); #endregion // Stickman Squad Specified Vars public readonly DataContainer<float> PowerIncreasePercent = new DataContainer<float>("PowerIncreasePercent", 0); public readonly DataContainer<float> FireRateDecreasePercent = new DataContainer<float>("FireRateDecreasePercent", 0); public readonly DataContainer<float> PowerIncreaseLevel = new DataContainer<float>("PowerIncreaseLevel", 0); public readonly DataContainer<float> FireRateDecreaseLevel = new DataContainer<float>("FireRateDecreaseLevel", 0); public readonly DataContainer<string> UnlockableItem = new DataContainer<string>("UnlockableItem", ""); public readonly DataContainer<float> UnlockableItemProgress = new DataContainer<float>("UnlockableItemProgress", 0f); public readonly DataContainer<string> LastUnlockedMember = new DataContainer<string>("LastUnlockedMember", ""); public List<string> UnlockedMembers { get { if (ES3.KeyExists(UnlockedMembersKey)) { _UnlockedMembers = ES3.Load<List<string>>(UnlockedMembersKey); } else { _UnlockedMembers = new List<string>(); ES3.Save(UnlockedMembersKey, _UnlockedMembers); } return _UnlockedMembers; } } private List<string> _UnlockedMembers; public void SaveMembers() => ES3.Save(UnlockedMembersKey, _UnlockedMembers); private const string UnlockedMembersKey = "UnlockedMembers"; // Common Vars public readonly DataContainer<int> PassedLevels = new DataContainer<int>("PassedLevels", 0); public readonly TrackableValue<float> Money = new TrackableValue<float>(value: 0, firstGet: () => PlayerPrefs.GetInt("Money")); public readonly DataContainer<int> LastSceneNumber = new DataContainer<int>("LastSceneNumber", 1); public float TimeOfSceneLoad { get; private set; } public float TimeElapsedFromSceneLoad => Time.time - TimeOfSceneLoad; [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)] private static void ResetLevelsPerSession() { LazySugar.FindLazy<GameProgressionDatabase>().CompletedLevelsPerSession.Value = 0; } protected override void OnEnable() { base.OnEnable(); Money.Changed += SaveMoney; TimeOfSceneLoad = Time.time; } protected override void OnDisable() { base.OnDisable(); Money.Changed -= SaveMoney; } private void SaveMoney(float val) { PlayerPrefs.SetInt("Money", Money.Value.Round()); } private void OnApplicationQuit() { SaveMoney(Money.Value.Round()); } private void Start() { var level = this.Find<Level>(); if (level != null) LastSceneNumber.Value = level.SceneNumber; } protected override void OnGameWin() { Debug.Log("PassedLevels: " + PassedLevels.Value); CompletedLevelsPerSession.Value++; PassedLevels.Value++; } public static void Clear() { ES3.Save("ReloadsCount", 0); ES3.Save("CompletedLevelsPerSession", 0); ES3.Save("PassedLevels", 0); ES3.Save("LastSceneNumber", 1); ES3.Save("PassedLevels", 0); ES3.Save("LastSceneNumber", 1); ES3.Save("PowerIncreaseLevel", 0f); ES3.Save("FireRateDecreaseLevel", 0f); ES3.Save("UnlockableItemProgress", 0f); ES3.Save("UnlockableItem", ""); ES3.Save("LastUnlockedMember", ""); ES3.Save(UnlockedMembersKey, new List<string>()); PlayerPrefs.SetInt("Money", 0); } } }