106 lines
3.2 KiB
C#
106 lines
3.2 KiB
C#
using System;
|
|
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(this);
|
|
}
|
|
|
|
#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 SaveAllAbilities()
|
|
{
|
|
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;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!foundAbility)
|
|
{
|
|
Debug.LogWarning($"{savedAbility.abilityName} was not found.");
|
|
}
|
|
abilityHandler.abilities.Add(foundAbility);
|
|
}
|
|
abilityHandler.SetupAbilities();
|
|
foreach (PlayerAbility abilityInstance in abilityHandler.abilityInstances)
|
|
{
|
|
foreach (SavedAbility savedAbility in savedAbilities)
|
|
{
|
|
if (savedAbility.abilityName == abilityInstance.abilityName) //shit code
|
|
{
|
|
foreach (AbilityUpgrade upgrade in AbilityManager.instance.allUpgrades)
|
|
{
|
|
if (savedAbility.equippedUpgrades[upgrade.upgradeName] > 0)
|
|
{
|
|
abilityInstance.AddUpgrade(upgrade, savedAbility.equippedUpgrades[upgrade.upgradeName]);
|
|
}
|
|
} //this is REALLY BAD.
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|