diff --git a/Source/Settings.cs b/Source/Settings.cs
index e01bad5..b22cdf0 100644
--- a/Source/Settings.cs
+++ b/Source/Settings.cs
@@ -1,6 +1,7 @@
using System;
using System.IO;
using System.Reflection;
+using System.Linq;
using UnityEngine;
namespace Astrogator {
@@ -17,26 +18,49 @@ public class Settings : MonoBehavior {
private Settings()
{
- if (File.Exists(path)) {
+ ConfigNode[] nodes = GameDatabase.Instance.GetConfigNodes(configNodeName);
+ if (nodes.Length > 0) {
+ for (int n = 0; n < nodes.Length; ++n) {
+ ConfigNode.LoadObjectFromConfig(this, nodes[n]);
+ }
+ } else if (File.Exists(legacyPath)) {
// ConfigNode.Load can return null if the file is empty,
// and this crashes LoadObjectFromConfig.
try {
- ConfigNode.LoadObjectFromConfig(this, ConfigNode.Load(path));
+ ConfigNode.LoadObjectFromConfig(this, ConfigNode.Load(legacyPath));
} catch (Exception ex) {
DbgExc("Failed to load settings file", ex);
}
}
}
- private const string settingsSuffix = "settings";
- private static readonly string path = $"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}/{Astrogator.Name}.{settingsSuffix}";
+ private const string configNodeName = "ASTROGATORSETTINGS";
+ private static readonly string legacyPath = $"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}/{Astrogator.Name}.settings";
///
/// Save current settings to disk.
///
public void Save()
{
- ConfigNode.CreateConfigFromObject(this, new ConfigNode(GetType().Name)).Save(path);
+ UrlDir.UrlFile settingsFile = null;
+ UrlDir.UrlConfig[] configs = GameDatabase.Instance.GetConfigs(configNodeName);
+ if (configs.Length > 0) {
+ // Already have a cfg file with settings, overwrite
+ settingsFile = configs[0].parent;
+ settingsFile.configs.Clear();
+ } else {
+ // Make a new file
+ var modFolder = GameDatabase.Instance.root.children
+ .First(d => d.type == UrlDir.DirectoryType.GameData)
+ .GetDirectory(Astrogator.Name);
+ settingsFile = new UrlDir.UrlFile(modFolder,
+ new FileInfo($"{modFolder.path}/AstrogatorSettings.cfg"));
+ }
+ settingsFile.configs.Add(new UrlDir.UrlConfig(
+ settingsFile,
+ ConfigNode.CreateConfigFromObject(this, new ConfigNode(configNodeName))
+ ));
+ settingsFile.SaveConfigs();
}
///