private void OnPartCouple(GameEvents.FromToAction <Part, Part> data) { if (_isDockingInProgress) { var vm1 = (KCTVesselTracker)data.from.vessel.vesselModules.Find(vm => vm is KCTVesselTracker); var vm2 = (KCTVesselTracker)data.to.vessel.vesselModules.Find(vm => vm is KCTVesselTracker); uint id1 = data.from.vessel.rootPart.launchID; uint id2 = data.to.vessel.rootPart.launchID; var dict1 = vm1.DockedVesselData ?? new Dictionary <uint, KCTVesselData>() { { id1, KCTVesselData.Parse(vm1) } }; var dict2 = vm2.DockedVesselData ?? new Dictionary <uint, KCTVesselData>() { { id2, KCTVesselData.Parse(vm2) } }; var combinedDict = new[] { dict1, dict2 }.SelectMany(dict => dict) .ToLookup(pair => pair.Key, pair => pair.Value) .ToDictionary(group => group.Key, group => group.First()); vm1.DockedVesselData = vm2.DockedVesselData = combinedDict; } }
protected override void OnLoad(ConfigNode node) { base.OnLoad(node); foreach (ConfigNode n in node.GetNodes("DATA")) { Data.Load(n); } foreach (ConfigNode n in node.GetNodes("DOCKED_DATA")) { uint launchID = default; if (!n.TryGetValue("launchID", ref launchID)) { continue; } DockedVesselData = DockedVesselData ?? new Dictionary <uint, KCTVesselData>(); DockedVesselData[launchID] = new KCTVesselData(n); } }