109 lines
2.9 KiB
C#
109 lines
2.9 KiB
C#
using OctoberStudio.Save;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
|
|
namespace OctoberStudio.Abilities
|
|
{
|
|
[System.Serializable]
|
|
public class AbilitiesSave : ISave
|
|
{
|
|
[SerializeField] AbilitySave[] savedAbilities;
|
|
|
|
private Dictionary<AbilityType, int> abilitiesLevels;
|
|
|
|
public void Init()
|
|
{
|
|
abilitiesLevels = new Dictionary<AbilityType, int>();
|
|
|
|
if(savedAbilities == null) savedAbilities = new AbilitySave[0];
|
|
|
|
for(int i = 0; i < savedAbilities.Length; i++)
|
|
{
|
|
var save = savedAbilities[i];
|
|
|
|
if (abilitiesLevels.ContainsKey(save.AbilityType))
|
|
{
|
|
var savedLevel = abilitiesLevels[save.AbilityType];
|
|
|
|
if(save.Level > savedLevel)
|
|
{
|
|
abilitiesLevels[save.AbilityType] = save.Level;
|
|
}
|
|
} else
|
|
{
|
|
abilitiesLevels.Add(save.AbilityType, save.Level);
|
|
}
|
|
}
|
|
}
|
|
|
|
public List<AbilityType> GetSavedAbilities()
|
|
{
|
|
return abilitiesLevels.Keys.ToList();
|
|
}
|
|
|
|
public int GetAbilityLevel(AbilityType ability)
|
|
{
|
|
if (abilitiesLevels.ContainsKey(ability))
|
|
{
|
|
return abilitiesLevels[ability];
|
|
} else
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
public void SetAbilityLevel(AbilityType ability, int level)
|
|
{
|
|
if (abilitiesLevels.ContainsKey(ability))
|
|
{
|
|
abilitiesLevels[ability] = level;
|
|
} else
|
|
{
|
|
abilitiesLevels.Add(ability, level);
|
|
}
|
|
}
|
|
|
|
public void RemoveAbility(AbilityType ability)
|
|
{
|
|
if (abilitiesLevels.ContainsKey(ability))
|
|
{
|
|
abilitiesLevels.Remove(ability);
|
|
}
|
|
}
|
|
|
|
public void Flush()
|
|
{
|
|
savedAbilities = new AbilitySave[abilitiesLevels.Count];
|
|
|
|
int i = 0;
|
|
|
|
foreach(var ability in abilitiesLevels.Keys)
|
|
{
|
|
var abilitySave = new AbilitySave(ability, abilitiesLevels[ability]);
|
|
savedAbilities[i++] = abilitySave;
|
|
}
|
|
}
|
|
|
|
public void Clear()
|
|
{
|
|
abilitiesLevels.Clear();
|
|
}
|
|
|
|
[System.Serializable]
|
|
private class AbilitySave
|
|
{
|
|
[SerializeField] AbilityType abilityType;
|
|
[SerializeField] int level;
|
|
|
|
public AbilityType AbilityType => abilityType;
|
|
public int Level => level;
|
|
|
|
public AbilitySave(AbilityType abilityType, int level)
|
|
{
|
|
this.abilityType = abilityType;
|
|
this.level = level;
|
|
}
|
|
}
|
|
}
|
|
} |