diff --git a/TestFlightCore/TestFlightCore/TestFlightCore.cs b/TestFlightCore/TestFlightCore/TestFlightCore.cs index 8e122d1..7445ae4 100644 --- a/TestFlightCore/TestFlightCore/TestFlightCore.cs +++ b/TestFlightCore/TestFlightCore/TestFlightCore.cs @@ -65,7 +65,6 @@ public class TestFlightCore : PartModuleExtended, ITestFlightCore public List configs = new List(8); public ConfigNode currentConfig; - public string configNodeData; bool initialized = false; float transferData; @@ -216,14 +215,13 @@ public override void OnLoad(ConfigNode node) { configs.Clear(); - foreach (ConfigNode subNode in cNodes) { + foreach (ConfigNode subNode in cNodes) + { var newNode = new ConfigNode("CONFIG"); subNode.CopyTo(newNode); configs.Add(newNode); } } - - configNodeData = node.ToString(); } internal void Log(string message) @@ -833,13 +831,13 @@ public override void OnDestroy() public override void OnAwake() { initialized = false; - - if (!string.IsNullOrEmpty(configNodeData)) + + TestFlightCore pm = GetCoreFromPrefab(); + if (pm != null) { - var node = ConfigNode.Parse(configNodeData); - OnLoad(node); + configs = pm.configs; } - + // poll failure modules for any existing failures foreach (ITestFlightFailure failure in TestFlightUtil.GetFailureModules(this.part, Alias)) { @@ -851,6 +849,22 @@ public override void OnAwake() } } + private TestFlightCore GetCoreFromPrefab() + { + Part prefab = part?.partInfo?.partPrefab; + if (prefab != null) + { + int index = part.Modules.IndexOf(this); + if (index < 0) + index = part.Modules.Count; + + var pm = prefab.Modules.Count > index ? prefab.Modules[index] as TestFlightCore : null; + return pm ?? prefab.FindModuleImplementing(); + } + + return null; + } + public void OnCrewChange(GameEvents.HostedFromToAction e) => _OnCrewChange(); private void _OnCrewChange() {