Add options de- and se-rialization

This commit is contained in:
Jens Pitkänen 2020-08-07 00:12:26 +03:00
parent 16b0132f6c
commit 60b109a629

View File

@ -1,19 +1,46 @@
using System.Collections; using UnityEngine;
using System.Collections.Generic; using System.IO;
using UnityEngine; using System;
using System.Xml.Serialization;
namespace NeonTea.Quakeball { namespace NeonTea.Quakeball {
/// <summary>Container for user-selected options.</summary> /// <summary>Container for user-selected options.</summary>
[XmlRootAttribute("Options")]
public class OptionsData { public class OptionsData {
// DO NOT REMOVE OR CHANGE EXISTING FIELDS AFTER RELEASE TO AVOID BREAKING EXISTING CONFIGURATIONS
// New fields are fine though, the defaults will be used.
public bool InvertVerticalLook = false; public bool InvertVerticalLook = false;
public float LookSensitivity = 0.15f; public float LookSensitivity = 0.1f;
} }
public class Options : MonoBehaviour { /// <summary>A collection of functions to access user-specific configuration.</summary>
private static OptionsData Singleton = new OptionsData(); public static class Options {
private static string OptionsDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Quakeball");
private static string OptionsPath = Path.Combine(OptionsDirectory, "Config.xml");
private static OptionsData Singleton = Load();
public static OptionsData Get() { public static OptionsData Get() {
return Singleton; return Singleton;
} }
public static void Save(OptionsData options) {
XmlSerializer Serializer = new XmlSerializer(typeof(OptionsData));
Directory.CreateDirectory(OptionsDirectory);
FileStream OptionsFile = File.Create(OptionsPath);
Serializer.Serialize(OptionsFile, options);
OptionsFile.Close();
}
public static OptionsData Load() {
try {
XmlSerializer Serializer = new XmlSerializer(typeof(OptionsData));
FileStream OptionsFile = File.OpenRead(OptionsPath);
OptionsData Options = (OptionsData)Serializer.Deserialize(OptionsFile);
OptionsFile.Close();
return Options;
} catch (Exception) {
return new OptionsData();
}
}
} }
} }