From a94f48a1a7d458e0557ee3ce876ff1c582e4e336 Mon Sep 17 00:00:00 2001 From: NathanKell Date: Sun, 19 Jun 2022 21:04:36 -0700 Subject: [PATCH] Support [Persistent] Guids --- GameData/KSPCommunityFixes/Settings.cfg | 1 + .../Modding/PersistentIConfigNode.cs | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/GameData/KSPCommunityFixes/Settings.cfg b/GameData/KSPCommunityFixes/Settings.cfg index ade43ee..8da56fb 100644 --- a/GameData/KSPCommunityFixes/Settings.cfg +++ b/GameData/KSPCommunityFixes/Settings.cfg @@ -197,6 +197,7 @@ KSP_COMMUNITY_FIXES // Implement `IConfigNode` members marked as `[Persistent]` serialization support when using // the `CreateObjectFromConfig()`, `LoadObjectFromConfig()` and `CreateConfigFromObject()` methods. // Disabled by default, you can enable it with a MM patch. + // Also adds support for [Persistent] tags on System.Guid PersistentIConfigNode = false BaseFieldListUseFieldHost = true diff --git a/KSPCommunityFixes/Modding/PersistentIConfigNode.cs b/KSPCommunityFixes/Modding/PersistentIConfigNode.cs index 684301a..cb24ece 100644 --- a/KSPCommunityFixes/Modding/PersistentIConfigNode.cs +++ b/KSPCommunityFixes/Modding/PersistentIConfigNode.cs @@ -78,6 +78,12 @@ private static bool ConfigNode_WriteObject_Prefix(object obj, ConfigNode node, i WriteValue(fieldName, typeof(int), writeLinks.AssignLink(value), node); } } + // begin edit 1 + else if (fieldType == typeof(Guid)) + { + node.AddValue(fieldName, ((Guid)value).ToString()); + } + // end edit else if (IsValue(fieldType)) { WriteValue(fieldName, fieldType, value, node); @@ -86,7 +92,7 @@ private static bool ConfigNode_WriteObject_Prefix(object obj, ConfigNode node, i { WriteArrayTypes(fieldName, fieldType, value, node, persistent); } - // begin edit + // begin edit 2 else if (IsIConfigNode(fieldType)) { WriteIConfigNode(fieldName, value, node); @@ -158,6 +164,12 @@ private static bool ConfigNode_ReadObject_Prefix(object obj, ConfigNode node, ou value.name = ""; } } + // begin edit 1 + else if (fieldItem.fieldType == typeof(Guid)) + { + fieldItem.fieldInfo.SetValue(fieldItem.host, new Guid(value.value)); + } + // end edit else if (IsValue(fieldItem.fieldType)) { object obj2 = ReadValue(fieldItem.fieldType, value.value); @@ -178,7 +190,7 @@ private static bool ConfigNode_ReadObject_Prefix(object obj, ConfigNode node, ou ReadFieldList.FieldItem fieldItem2 = readFieldList[configNode.name]; if (fieldItem2 != null) { - // begin edit + // begin edit 2 if (IsIConfigNode(fieldItem2.fieldType)) { ReadIConfigNode(fieldItem2, configNode);