using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using System;
using NaughtyAttributes;
class UpgradeManager : MonoBehaviour
{
public static UpgradeManager Instance;
[BoxGroup("EnergySystem Upgrades")]
[SerializeField] private Upgrade fastRechargeUpgrade;
[SerializeField] Upgrade[] _upgrades;
[System.NonSerialized] public List<Upgrade> UsableUpgrades = new List<Upgrade>();
private PlayerSaveData saveData => GameManager.Instance.SaveData;
private void Awake()
{
Instance = this;
}
public Upgrade GetByName(string name)
{
Upgrade upgrade = Array.Find(_upgrades, u => u.name == name);
if (upgrade == null)
{
throw new ArgumentException($"Unknown upgrade: {name}", nameof(name));
}
return upgrade;
}
public void GenerateUsableUpgrades()
{
UsableUpgrades.Clear();
foreach (Upgrade upgrade in _upgrades)
{
bool hasUnmetDependancies = false;
foreach (Upgrade dependance in upgrade.Dependancies)
{
if (!saveData.HasUpgrade(dependance))
{
hasUnmetDependancies = true;
break;
}
}
if (saveData.HasMaximumUpgrade(upgrade)) { continue; }
//Debug.Log($"{upgrade.name} is missing dependendies? {hasUnmetDependancies}");
if (!hasUnmetDependancies) UsableUpgrades.Add(upgrade);
}
if (GameManager.Instance.UseEnergySystem)
{
UsableUpgrades.Add(fastRechargeUpgrade);
}
}
public Upgrade GetRandom()
{
int randUpgrade = UnityEngine.Random.Range(0, UsableUpgrades.Count);
return UsableUpgrades[randUpgrade];
}
}