MarisaMagicalStudy/Assets/Scripts/AbilitySceneTransfer.cs

101 lines
3.1 KiB
C#

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(gameObject);
}
#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 TestSaving()
{
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;
return;
}
}
if (!foundAbility)
{
Debug.LogWarning($"{savedAbility.abilityName} was not found.");
}
switch (savedAbility.abilitySlot)
{
case SavedAbility.AbilitySlot.Primary :
abilityHandler.abilities[0] = foundAbility;
break;
case SavedAbility.AbilitySlot.Secondary :
abilityHandler.abilities[1] = foundAbility;
break;
case SavedAbility.AbilitySlot.SpellA :
abilityHandler.abilities[2] = foundAbility;
break;
case SavedAbility.AbilitySlot.SpellB :
abilityHandler.abilities[3] = foundAbility;
break;
}
}
abilityHandler.SetupAbilities();
}
}