added basic setting persistence system

This commit is contained in:
2018-10-28 22:42:47 -05:00
parent 6a28aeb852
commit 8d762c7841
7 changed files with 102 additions and 31 deletions

View File

@@ -1,4 +1,5 @@
using System;
using RhythmBullet.Zer01HD.Utilities.Persistence;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -6,11 +7,12 @@ using System.Threading.Tasks;
namespace RhythmBullet.Zer01HD.Game.Preferences
{
class Controls
public class Controls : IPreferences
{
public int Forward;
public int Backward;
public int Left;
public int Right;
public int Shoot;
}
}

View File

@@ -3,14 +3,18 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RhythmBullet.Zer01HD.Utilities;
using RhythmBullet.Zer01HD.Utilities.Persistence;
namespace RhythmBullet.Zer01HD.Game.Preferences
{
class General
public class General : IPreferences
{
public Resolution Resolution;
public bool Fullscreen;
public float MusicVolume;
public float FXVolume;
public string MusicDirectory;
public string GameDirectory;
}
}

View File

@@ -4,9 +4,9 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RhythmBullet.Zer01HD.Utilities
namespace RhythmBullet.Zer01HD.Utilities.Persistence
{
class Preferences
public interface IPreferences
{
}
}

View File

@@ -0,0 +1,53 @@
using RhythmBullet.Zer01HD.Utilities.Persistence;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace RhythmBullet.Zer01HD.Utilities
{
public class PreferencesManager
{
private readonly Dictionary<Type, IPreferences> preferenceList;
public string SavePath;
XmlSerializer xmlSerializer;
public PreferencesManager(string savePath, params IPreferences[] preferences)
{
this.SavePath = savePath;
preferenceList = new Dictionary<Type, IPreferences>();
foreach (IPreferences prefs in preferences)
{
preferenceList.Add(prefs.GetType(), prefs);
}
}
public T GetPreferences<T>() where T : IPreferences
{
return (T) preferenceList[typeof(T)];
}
public void Load()
{
foreach (KeyValuePair<Type, IPreferences> prefs in preferenceList)
{
Stream stream = new FileStream(SavePath + nameof(prefs.Key), FileMode.Open);
preferenceList[prefs.Key] = (IPreferences) xmlSerializer.Deserialize(stream);
stream.Close();
}
}
public void Save()
{
foreach (KeyValuePair<Type, IPreferences> prefs in preferenceList)
{
Stream stream = new FileStream(SavePath + nameof(prefs.Key), FileMode.Create);
xmlSerializer.Serialize(stream, prefs.Value);
stream.Close();
}
}
}
}