TrackSettingsService.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Runtime.Serialization;
  5. using System.Xml;
  6. using SlamCross.Models;
  7. namespace SlamCross.Services;
  8. public static class TrackSettingsService
  9. {
  10. public static void Save(SourceGame game)
  11. {
  12. var settingsFile = Path.Combine(game.LibraryName, "TrackSettings.xml");
  13. var toSave = new List<Track>();
  14. foreach (var t in game.Tracks)
  15. {
  16. if (!string.IsNullOrEmpty(t.Hotkey) || t.Volume != 100 || t.EndPos > 0)
  17. toSave.Add(t);
  18. }
  19. if (toSave.Count > 0)
  20. {
  21. var serializer = new DataContractSerializer(typeof(List<Track>));
  22. using var writer = new StreamWriter(settingsFile);
  23. using var xml = new XmlTextWriter(writer);
  24. serializer.WriteObject(xml, toSave);
  25. }
  26. else if (File.Exists(settingsFile))
  27. {
  28. File.Delete(settingsFile);
  29. }
  30. }
  31. public static void Load(SourceGame game)
  32. {
  33. var settingsFile = Path.Combine(game.LibraryName, "TrackSettings.xml");
  34. if (!File.Exists(settingsFile)) return;
  35. List<Track> saved;
  36. try
  37. {
  38. var serializer = new DataContractSerializer(typeof(List<Track>));
  39. using var reader = new StreamReader(settingsFile);
  40. using var xml = new XmlTextReader(reader);
  41. saved = (List<Track>)serializer.ReadObject(xml)! ?? new List<Track>();
  42. }
  43. catch { return; }
  44. foreach (var track in game.Tracks)
  45. {
  46. foreach (var s in saved)
  47. {
  48. if (track.Name == s.Name)
  49. {
  50. track.Hotkey = s.Hotkey;
  51. track.Volume = s.Volume;
  52. track.StartPos = s.StartPos;
  53. track.EndPos = s.EndPos;
  54. }
  55. }
  56. }
  57. }
  58. }