diff --git a/Assets/Scripts/Game/Buildings/BuildingRegistry.cs b/Assets/Scripts/Game/Buildings/BuildingRegistry.cs index a3199d4..66764c6 100644 --- a/Assets/Scripts/Game/Buildings/BuildingRegistry.cs +++ b/Assets/Scripts/Game/Buildings/BuildingRegistry.cs @@ -9,6 +9,7 @@ namespace Fruitomation.Game [System.Serializable] public class BuildingInfo { public string Name; + public BuildingUnlock Requirement; public GameObject Prefab; } diff --git a/Assets/Scripts/Game/UpgradeManager.cs b/Assets/Scripts/Game/UpgradeManager.cs index 682a640..c69a48f 100644 --- a/Assets/Scripts/Game/UpgradeManager.cs +++ b/Assets/Scripts/Game/UpgradeManager.cs @@ -3,6 +3,7 @@ using UnityEngine; using System.IO; using System.Linq; using System; +using System.Runtime.CompilerServices; #if UNITY_EDITOR using UnityEditor; @@ -12,6 +13,7 @@ namespace Fruitomation.Game { [Serializable] public enum BasicUpgrade { + //Apple, - Unlocked by default Grapes, Bananas, Kiwi, @@ -50,8 +52,25 @@ namespace Fruitomation.Game SpicedPitayaIceCream, } - [Serializable] public enum IncrementalUpgrade + [Serializable] public enum BuildingUnlock { + None, + + //Wall, - Unlocked by default + //Slope, + Floor, + + //Spring, - Unlocked by default + Fan, + Alternator, + + //Slicer, - Unlocked by default + //Presser, - Unlocked by default + HeatExchanger, + Grinder, + Mixer, + Fermenter, + Peeler, } public class UnlockedUpgrades @@ -87,17 +106,20 @@ namespace Fruitomation.Game } } + private HashSet Buildings = new(); private HashSet Unlocks = new(); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Unlock(BuildingUnlock unlock) => Buildings.Add(unlock); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Unlock(BasicUpgrade upgrade) => Unlocks.Add(upgrade); - public void Unlock(BasicUpgrade upgrade) - { - Unlocks.Add(upgrade); - } - - public bool IsUnlocked(BasicUpgrade upgrade) - { - return Unlocks.Contains(upgrade); - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool IsUnlocked(BuildingUnlock unlock) => Buildings.Contains(unlock); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool IsUnlocked(BasicUpgrade upgrade) => Unlocks.Contains(upgrade); } public static class UpgradeManager @@ -131,10 +153,31 @@ namespace Fruitomation.Game File.WriteAllText(Filepath, json); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void Unlock(BuildingUnlock unlock) + { + if (unlock == BuildingUnlock.None) + { + throw new ArgumentOutOfRangeException(nameof(unlock)); + } + + CurrentUpgrades.Unlock(unlock); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Unlock(BasicUpgrade upgrade) => CurrentUpgrades.Unlock(upgrade); - public static bool Is(BasicUpgrade upgrade) => CurrentUpgrades.IsUnlocked(upgrade); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool Is(BuildingUnlock unlock) + { + return unlock == BuildingUnlock.None + ? throw new ArgumentOutOfRangeException(nameof(unlock)) + : CurrentUpgrades.IsUnlocked(unlock); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool Is(BasicUpgrade upgrade) => CurrentUpgrades.IsUnlocked(upgrade); + #if UNITY_EDITOR [MenuItem("Fruitomation/Reset Upgrades")] public static void ResetUpgrades() => CurrentUpgrades = new UnlockedUpgrades();