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 equippedUpgrades = new(); } public List 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 equippedUpgrade in savedAbility.equippedUpgrades) { if (AbilityManager.instance.upgradeLookup[equippedUpgrade.Key] != null) { abilityHandler.instantiatedAbilityLookup[savedAbility.abilityName].AddUpgrade(AbilityManager.instance.upgradeLookup[equippedUpgrade.Key], equippedUpgrade.Value); } } } } }