using UnityEngine;
namespace MoreMountains.Tools
{
///
/// This component, on Awake or on demand, will force a SaveLoadMethod on the MMSaveLoadManager, changing the way it saves data to file.
/// This will impact all classes that use the MMSaveLoadManager (unless they change that method before saving or loading).
/// If you change the method, your previously existing data files won't be compatible, you'll need to delete them and start with new ones.
///
public class MMSaveLoadManagerMethod : MonoBehaviour
{
[Header("Save and load method")]
[MMInformation("This component, on Awake or on demand, will force a SaveLoadMethod on the MMSaveLoadManager, changing the way it saves data to file. " +
"This will impact all classes that use the MMSaveLoadManager (unless they change that method before saving or loading)." +
"If you change the method, your previously existing data files won't be compatible, you'll need to delete them and start with new ones.",
MMInformationAttribute.InformationType.Info,false)]
/// the method to use to save to file
[Tooltip("the method to use to save to file")]
public MMSaveLoadManagerMethods SaveLoadMethod = MMSaveLoadManagerMethods.Binary;
/// the key to use to encrypt the file (if using an encryption method)
[Tooltip("the key to use to encrypt the file (if using an encryption method)")]
public string EncryptionKey = "ThisIsTheKey";
protected IMMSaveLoadManagerMethod _saveLoadManagerMethod;
///
/// On Awake, we set the MMSaveLoadManager's method to the chosen one
///
protected virtual void Awake()
{
SetSaveLoadMethod();
}
///
/// Creates a new MMSaveLoadManagerMethod and passes it to the MMSaveLoadManager
///
public virtual void SetSaveLoadMethod()
{
switch(SaveLoadMethod)
{
case MMSaveLoadManagerMethods.Binary:
_saveLoadManagerMethod = new MMSaveLoadManagerMethodBinary();
break;
case MMSaveLoadManagerMethods.BinaryEncrypted:
_saveLoadManagerMethod = new MMSaveLoadManagerMethodBinaryEncrypted();
((MMSaveLoadManagerEncrypter)_saveLoadManagerMethod).Key = EncryptionKey;
break;
case MMSaveLoadManagerMethods.Json:
_saveLoadManagerMethod = new MMSaveLoadManagerMethodJson();
break;
case MMSaveLoadManagerMethods.JsonEncrypted:
_saveLoadManagerMethod = new MMSaveLoadManagerMethodJsonEncrypted();
((MMSaveLoadManagerEncrypter)_saveLoadManagerMethod).Key = EncryptionKey;
break;
}
MMSaveLoadManager.SaveLoadMethod = _saveLoadManagerMethod;
}
}
}