106 lines
2.7 KiB
C#
106 lines
2.7 KiB
C#
using OctoberStudio.Save;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace OctoberStudio.Upgrades
|
|
{
|
|
[System.Serializable]
|
|
public class UpgradesSave : ISave
|
|
{
|
|
[SerializeField] UpgradeSave[] savedUpgrades;
|
|
|
|
private Dictionary<UpgradeType, int> upgradesLevels;
|
|
|
|
public void Init()
|
|
{
|
|
upgradesLevels = new Dictionary<UpgradeType, int>();
|
|
|
|
if (savedUpgrades == null) savedUpgrades = new UpgradeSave[0];
|
|
|
|
for (int i = 0; i < savedUpgrades.Length; i++)
|
|
{
|
|
var save = savedUpgrades[i];
|
|
|
|
if (upgradesLevels.ContainsKey(save.UpgradeType))
|
|
{
|
|
var savedLevel = upgradesLevels[save.UpgradeType];
|
|
|
|
if (save.Level > savedLevel)
|
|
{
|
|
upgradesLevels[save.UpgradeType] = save.Level;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
upgradesLevels.Add(save.UpgradeType, save.Level);
|
|
}
|
|
}
|
|
}
|
|
|
|
public int GetUpgradeLevel(UpgradeType upgrade)
|
|
{
|
|
if (upgradesLevels.ContainsKey(upgrade))
|
|
{
|
|
return upgradesLevels[upgrade];
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
public void SetUpgradeLevel(UpgradeType upgrade, int level)
|
|
{
|
|
if (upgradesLevels.ContainsKey(upgrade))
|
|
{
|
|
upgradesLevels[upgrade] = level;
|
|
}
|
|
else
|
|
{
|
|
upgradesLevels.Add(upgrade, level);
|
|
}
|
|
}
|
|
|
|
public void RemoveUpgrade(UpgradeType upgrade)
|
|
{
|
|
if (upgradesLevels.ContainsKey(upgrade))
|
|
{
|
|
upgradesLevels.Remove(upgrade);
|
|
}
|
|
}
|
|
|
|
public void Flush()
|
|
{
|
|
savedUpgrades = new UpgradeSave[upgradesLevels.Count];
|
|
|
|
int i = 0;
|
|
|
|
foreach (var upgrade in upgradesLevels.Keys)
|
|
{
|
|
var upgradeSave = new UpgradeSave(upgrade, upgradesLevels[upgrade]);
|
|
savedUpgrades[i++] = upgradeSave;
|
|
}
|
|
}
|
|
|
|
public void Clear()
|
|
{
|
|
upgradesLevels.Clear();
|
|
}
|
|
|
|
[System.Serializable]
|
|
private class UpgradeSave
|
|
{
|
|
[SerializeField] UpgradeType upgradeType;
|
|
[SerializeField] int level;
|
|
|
|
public UpgradeType UpgradeType => upgradeType;
|
|
public int Level => level;
|
|
|
|
public UpgradeSave(UpgradeType upgradeType, int level)
|
|
{
|
|
this.upgradeType = upgradeType;
|
|
this.level = level;
|
|
}
|
|
}
|
|
}
|
|
} |