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 = 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; } } } } }