MarisaMagicalStudy/Assets/Scripts/AbilitySceneTransfer.cs

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