12 public static Dictionary<string, XElement>
ModSettingsCache {
get;
private set; } =
new();
29 public const string fName =
"ModSettingsManager";
33 Dictionary<string, object> dictionary =
new();
35 dictionary.TryAdd(item.Key, item.Value);
38 foreach (KeyValuePair<string, object> item2
in item) {
39 dictionary.TryAdd(item2.Key, item2.Value);
47 Dictionary<string, object> dictionary =
new();
49 dictionary.TryAdd(item.Key, item.Value);
52 foreach (KeyValuePair<string, object> item2
in item) {
53 dictionary.TryAdd(item2.Key, item2.Value);
62 Dictionary<string, int> dictionary =
new();
64 dictionary.TryAdd(item.Key, Convert.ToInt32(item.Value));
67 foreach (KeyValuePair<string, object> item2
in item) {
68 dictionary.TryAdd(item2.Key, Convert.ToInt32(item2.Value));
83 XElement element = XElement.Load(stream);
84 foreach (XElement modXElement
in element.Elements(
"Mod")) {
92 str =
"Error serializing mod settings file:";
107 IEnumerable<KeyValuePair<string, int>> camerasToAdd = modEntity.
Loader?.
GetCameraList() ?? [];
108 foreach (KeyValuePair<string, object> item1
in keysToAdd) {
109 modKeyboardSettings.Add(item1.Key, item1.Value);
111 foreach (KeyValuePair<string, object> item1
in gamepadKeysToAdd) {
112 modGamepadSettings.Add(item1.Key, item1.Value);
114 foreach (KeyValuePair<string, int> item2
in camerasToAdd) {
115 modCameraSettings.Add(item2.Key, item2.Value);
119 if (setting !=
null) {
120 XElement keyboardMapping = setting.Element(
"KeyboardMapping");
121 if (keyboardMapping !=
null) {
122 modKeyboardSettings.ApplyOverrides(keyboardMapping,
true);
124 XElement gamepadMapping = setting.Element(
"GamepadMapping");
125 if (gamepadMapping !=
null) {
126 modGamepadSettings.ApplyOverrides(gamepadMapping);
128 XElement cameraList = setting.Element(
"CameraList");
129 if (cameraList !=
null) {
130 modCameraSettings.ApplyOverrides(cameraList,
true);
139 info =
"Loaded mod settings";
143 catch (Exception e) {
145 str =
"Error loading mod settings:";
154 XElement settingsElement =
new(
"Mod");
159 catch (Exception e) {
161 str =
"Error saving the mod settings of [{0}]:";
163 Log.
Warning($
"{string.Format(str, packageName)} {e}");
166 XElement keyboardMapping =
new(
"KeyboardMapping");
168 && modKeyboardSettings.Count > 0) {
169 modKeyboardSettings.Save(keyboardMapping);
170 settingsElement.Add(keyboardMapping);
173 XElement gamepadMapping =
new(
"GamepadMapping");
175 && modGamepadSettings.Count > 0) {
176 modGamepadSettings.Save(gamepadMapping);
177 settingsElement.Add(gamepadMapping);
180 XElement cameraList =
new(
"CameraList");
182 && modCameraSettings.Count > 0) {
183 modCameraSettings.Save(cameraList);
184 settingsElement.Add(cameraList);
187 if (settingsElement.Elements().Any()
188 || settingsElement.Attributes().Count() > 1) {
192 XElement xElement =
new(
"ModSettings");
193 foreach (KeyValuePair<string, XElement> settingElement
in ModSettingsCache) {
194 xElement.Add(settingElement.Value);
201 catch (Exception e) {
203 str =
"Error saving mod settings file:";
208 info =
"Saved mod settings";
217 keyboardSettings.Clear();
219 foreach (KeyValuePair<string, object> item1
in keysToAdd) {
220 keyboardSettings.Add(item1.Key, item1.Value);
231 gamepadSettings.Clear();
233 foreach (KeyValuePair<string, object> item1
in keysToAdd) {
234 gamepadSettings.Add(item1.Key, item1.Value);
245 cameraSettings.Clear();
246 IEnumerable<KeyValuePair<string, int>> camerasToAdd = modEntity.
Loader?.
GetCameraList() ?? [];
247 foreach (KeyValuePair<string, int> item1
in camerasToAdd) {
248 cameraSettings.Add(item1.Key, item1.Value);
static void Information(object message)
static void Warning(object message)
static Stream OpenFile(string path, OpenFileMode openFileMode)
static bool FileExists(string path)
static bool TryGet(out string result, params string[] keys)
static string Get(string className, int key)
获取在当前语言类名键对应的字符串
virtual void LoadSettings(XElement xElement)
加载设置
virtual void SaveSettings(XElement xElement)
保存设置
virtual IEnumerable< KeyValuePair< string, object > > GetGamepadMappings()
用于添加新的手柄按键映射,在重置按键设置时也会使用这里的设置作为默认值。 使用yield return可返回多个键值对。键:映射名;值:按键(Key)或鼠标按钮(MouseButton)
virtual IEnumerable< KeyValuePair< string, int > > GetCameraList()
用于添加新的摄像机顺序,在重置摄像机列表时也会使用这里的设置作为默认值。 使用yield return可返回多个键值对。键:摄像机类名;值:顺序
virtual IEnumerable< KeyValuePair< string, object > > GetKeyboardMappings()
用于添加新的键盘鼠标按键映射,在重置按键设置时也会使用这里的设置作为默认值。 使用yield return可返回多个键值对。键:映射名;值:按键(Key)或鼠标按钮(MouseButton)
static void LoadModSettings()
static void ResetModsCameraManageSettings()
static Dictionary< string, object > CombinedGamepadMappingSettings
static void ResetModsGamepadMappingSettings()
static void SaveModSettings()
static Dictionary< string, XElement > ModSettingsCache
储存每一个没有使用到的Mod设置的键值对,键:Mod的包名,值:Mod的设置信息XElement
static Dictionary< string, ValuesDictionary > ModGamepadMapSettings
储存每个模组的手柄键位映射设置,键:模组包名,值:模组的键位映射设置
static Dictionary< string, object > CombinedKeyboardMappingSettings
static Dictionary< string, int > CombinedCameraManageSettings
static void ResetModsKeyboardMappingSettings()
static Dictionary< string, ValuesDictionary > ModCameraManageSettings
储存每个模组的相机设置,键:模组包名,值:模组的相机设置
static Dictionary< string, ValuesDictionary > ModKeyboardMapSettings
储存每个模组的键盘鼠标键位映射设置,键:模组包名,值:模组的键位映射设置
static ValuesDictionary GamepadMappingSettings
static ValuesDictionary CameraManageSettings
static ValuesDictionary KeyboardMappingSettings
static string ModsSettingsPath
static List< ModEntity > ModList
所有已启用的模组
static void SetAttributeValue(XElement node, string attributeName, object value)
static object GetAttributeValue(XElement node, string attributeName, Type type)
static void SaveXmlToStream(XElement node, Stream stream, Encoding encoding, bool throwOnError)