101 lines
3.1 KiB
C#
101 lines
3.1 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class AbilitySceneTransfer : MonoBehaviour
|
|
{
|
|
#region Statication
|
|
|
|
public static AbilitySceneTransfer instance;
|
|
|
|
private void Awake()
|
|
{
|
|
if (instance != null && instance != this)
|
|
{
|
|
Destroy(gameObject);
|
|
return;
|
|
}
|
|
instance = this;
|
|
DontDestroyOnLoad(gameObject);
|
|
}
|
|
|
|
#endregion
|
|
[System.Serializable]
|
|
public class SavedAbility
|
|
{
|
|
public enum AbilitySlot {Primary, Secondary, SpellA, SpellB}
|
|
public AbilitySlot abilitySlot = AbilitySlot.Primary;
|
|
public string abilityName;
|
|
public Dictionary<string, int> equippedUpgrades = new();
|
|
}
|
|
public List<SavedAbility> savedAbilities;
|
|
public MarisaAbilityHandler abilityHandler;
|
|
|
|
[ContextMenu("Save")]
|
|
public void TestSaving()
|
|
{
|
|
int testSlot = 0;
|
|
foreach (PlayerAbility ability in abilityHandler.abilityInstances)
|
|
{
|
|
SaveAbility(ability);
|
|
savedAbilities[testSlot].abilitySlot = (SavedAbility.AbilitySlot)testSlot;
|
|
testSlot++;
|
|
}
|
|
}
|
|
[ContextMenu("Load")]
|
|
public void TestLoading()
|
|
{
|
|
LoadAbilities();
|
|
}
|
|
public void SaveAbility(PlayerAbility savedAbility)
|
|
{
|
|
SavedAbility newSavedAbility = new();
|
|
newSavedAbility.abilityName = savedAbility.abilityName;
|
|
foreach (AbilityUpgrade upgrade in AbilityManager.instance.allUpgrades)
|
|
{
|
|
int upgradeCount = savedAbility.GetUpgradeCount(upgrade);
|
|
if (upgradeCount > 0)
|
|
{
|
|
newSavedAbility.equippedUpgrades[upgrade.upgradeName] = upgradeCount;
|
|
}
|
|
}
|
|
savedAbilities.Add(newSavedAbility);
|
|
}
|
|
|
|
public void LoadAbilities()
|
|
{
|
|
abilityHandler.abilities.Clear();
|
|
foreach (SavedAbility savedAbility in savedAbilities)
|
|
{
|
|
PlayerAbility foundAbility = null;
|
|
foreach (PlayerAbility ability in AbilityManager.instance.allAbilities)
|
|
{
|
|
if (savedAbility.abilityName == ability.abilityName) //shit code
|
|
{
|
|
foundAbility = ability;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (!foundAbility)
|
|
{
|
|
Debug.LogWarning($"{savedAbility.abilityName} was not found.");
|
|
}
|
|
switch (savedAbility.abilitySlot)
|
|
{
|
|
case SavedAbility.AbilitySlot.Primary :
|
|
abilityHandler.abilities[0] = foundAbility;
|
|
break;
|
|
case SavedAbility.AbilitySlot.Secondary :
|
|
abilityHandler.abilities[1] = foundAbility;
|
|
break;
|
|
case SavedAbility.AbilitySlot.SpellA :
|
|
abilityHandler.abilities[2] = foundAbility;
|
|
break;
|
|
case SavedAbility.AbilitySlot.SpellB :
|
|
abilityHandler.abilities[3] = foundAbility;
|
|
break;
|
|
}
|
|
}
|
|
abilityHandler.SetupAbilities();
|
|
}
|
|
}
|