using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization; using System.Xml; using SlamCross.Models; namespace SlamCross.Services; public static class TrackSettingsService { public static void Save(SourceGame game) { var settingsFile = Path.Combine(game.LibraryName, "TrackSettings.xml"); var toSave = new List(); foreach (var t in game.Tracks) { if (!string.IsNullOrEmpty(t.Hotkey) || t.Volume != 100 || t.EndPos > 0) toSave.Add(t); } if (toSave.Count > 0) { var serializer = new DataContractSerializer(typeof(List)); using var writer = new StreamWriter(settingsFile); using var xml = new XmlTextWriter(writer); serializer.WriteObject(xml, toSave); } else if (File.Exists(settingsFile)) { File.Delete(settingsFile); } } public static void Load(SourceGame game) { var settingsFile = Path.Combine(game.LibraryName, "TrackSettings.xml"); if (!File.Exists(settingsFile)) return; List saved; try { var serializer = new DataContractSerializer(typeof(List)); using var reader = new StreamReader(settingsFile); using var xml = new XmlTextReader(reader); saved = (List)serializer.ReadObject(xml)! ?? new List(); } catch { return; } foreach (var track in game.Tracks) { foreach (var s in saved) { if (track.Name == s.Name) { track.Hotkey = s.Hotkey; track.Volume = s.Volume; track.StartPos = s.StartPos; track.EndPos = s.EndPos; } } } } }