void RestoreStaging(List <Part> partsList, Part rootPart) { if (rootPart == null) // On initial entry into editor { InitStagingLists(); return; } sd = new Dictionary <int, Stages>(); minStage = 999; maxStage = -1; Stages stages; foreach (var p in partsList) { if (stagingPartList.ContainsKey(p.persistentId.ToString())) { StagingInfo si = stagingPartList[p.persistentId.ToString()]; if (sd.TryGetValue(si.inverseStage, out stages)) { stages.partList.Add(p); } else { stages = new Stages(si.inverseStage, p); sd.Add(si.inverseStage, stages); } minStage = Math.Min(minStage, si.inverseStage); maxStage = Math.Max(maxStage, si.inverseStage); SOS.Log.Info("RestoreStaging, part/stage: " + p.partInfo.title + ", inverseStage: " + si.inverseStage + ", originalStage: " + si.originalStage); } else { // Should never get here SOS.Log.Error("Part not found in stagingPartList"); } } // The following code has been adapted from SmartStage var SortIcons = typeof(KSP.UI.Screens.StageManager).GetMethod("SortIcons", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance, null, new Type[] { typeof(bool), typeof(Part), typeof(bool) }, null); // This is ugly, but it works // We call this private method for each part from the root, twice and it works. SetStages(rootPart, SortIcons); SetStages(rootPart, SortIcons); }
Dictionary <string, StagingInfo> GetAllStaging(List <Part> partsList) { SOS.Log.Info("GetAllStaging"); Dictionary <string, StagingInfo> stagingList = new Dictionary <string, StagingInfo>(); foreach (var p in partsList) { if (!stagingList.ContainsKey(p.persistentId.ToString())) { StagingInfo si = new StagingInfo(p); stagingList.Add(p.persistentId.ToString(), si); SOS.Log.Info("GetAllStaging, part/stage: " + p.partInfo.title + ", inverseStage: " + si.inverseStage + ", originalStage: " + si.originalStage); } } return(stagingList); }