MarisaMagicalStudy/Assets/Scripts/AbilitySceneTransfer.cs

90 lines
2.8 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 = AbilityManager.instance.abilityLookup[savedAbility.abilityName];
if (!foundAbility)
{
Debug.LogWarning($"{savedAbility.abilityName} was not found.");
}
abilityHandler.abilities.Add(foundAbility);
}
abilityHandler.SetupAbilities();
foreach (SavedAbility savedAbility in savedAbilities)
{
foreach (KeyValuePair<string, int> equippedUpgrade in savedAbility.equippedUpgrades)
{
if (AbilityManager.instance.upgradeLookup[equippedUpgrade.Key] != null)
{
abilityHandler.instantiatedAbilityLookup[savedAbility.abilityName].AddUpgrade(AbilityManager.instance.upgradeLookup[equippedUpgrade.Key], equippedUpgrade.Value);
}
}
}
}
}