Files
Fruitomation/Assets/Scripts/Game/UpgradeManager.cs
2026-04-14 15:38:20 +01:00

124 lines
3.3 KiB
C#

using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Linq;
using System;
namespace Fruitomation.Game
{
[Serializable] public enum BasicUpgrade
{
Grapes,
Bananas,
Kiwi,
Mangoes,
Durian,
BuddhasHand,
Pitayas,
AppleSlices,
DriedAppleSlices,
AppleJuice,
GrapeJuice,
Wine,
Raisins,
DriedFruitSelection,
BananaSlices,
DriedBananaSlices,
BananaBacon,
BananaPeeler,
KiwiPresser,
KiwiSeedOil,
KiwiVinegar,
AppleMangoJuice,
SlicedKiwi,
BananaIceCream,
MangoJuice,
MangoSlices,
SpicedBananaIceCream,
DurianPowder,
DurianSlices,
ExoticFruitSelection,
BuddhasHandSlices,
PitayaPeeler,
PitayaFoodDye,
PitayaIceCream,
SpicedPitayaIceCream,
}
public class UnlockedUpgrades
{
[Serializable] public class Serialized
{
[SerializeField] private BasicUpgrade[] BasicUpgrades;
private Serialized()
{
// All logic done in Serialize
}
public UnlockedUpgrades Unserialize()
{
UnlockedUpgrades upgrades = new();
foreach (BasicUpgrade upgrade in BasicUpgrades)
{
Debug.Log($"Restored [{upgrade}] upgrade");
upgrades.Unlocks.Add(upgrade);
}
return upgrades;
}
public static Serialized Serialize(UnlockedUpgrades upgrades)
{
Serialized serialized = new()
{
BasicUpgrades = upgrades.Unlocks.ToArray()
};
return serialized;
}
}
private HashSet<BasicUpgrade> Unlocks = new();
public void Unlock(BasicUpgrade upgrade)
{
Unlocks.Add(upgrade);
}
}
public static class UpgradeManager
{
private static string Filepath => Path.Combine(Application.persistentDataPath, "upgrades.json");
private static UnlockedUpgrades CurrentUpgrades;
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
private static void LoadSavedUpgrades()
{
if (File.Exists(Filepath))
{
string json = File.ReadAllText(Filepath);
UnlockedUpgrades.Serialized serialized = JsonUtility.FromJson<UnlockedUpgrades.Serialized>(json);
if (serialized is not null)
{
CurrentUpgrades = JsonUtility.FromJson<UnlockedUpgrades.Serialized>(json).Unserialize();
}
}
CurrentUpgrades ??= new UnlockedUpgrades();
Application.quitting += SaveUpgradesToDisk;
}
private static void SaveUpgradesToDisk()
{
UnlockedUpgrades.Serialized serialized = UnlockedUpgrades.Serialized.Serialize(CurrentUpgrades);
string json = JsonUtility.ToJson(serialized, true);
File.WriteAllText(Filepath, json);
}
public static void Unlock(BasicUpgrade upgrade) => CurrentUpgrades.Unlock(upgrade);
}
}