internal void refreshGui(Part part) { if (part != openPart) { return; } moduleRecolorData.Clear(); setupForPart(part); int len = moduleRecolorData.Count; if (moduleIndex >= len) { findFirstRecolorable(out moduleIndex, out sectionIndex); } len = moduleRecolorData[moduleIndex].sectionData.Length; if (sectionIndex >= len) { findFirstRecolorable(moduleIndex, out moduleIndex, out sectionIndex); } ModuleRecolorData mrd = moduleRecolorData[moduleIndex]; SectionRecolorData srd = mrd.sectionData[sectionIndex]; if (!srd.recoloringSupported()) { findFirstRecolorable(out moduleIndex, out sectionIndex); } setupSectionData(moduleRecolorData[moduleIndex].sectionData[sectionIndex], colorIndex); }
private void setupForPart(Part part) { List <IRecolorable> mods = part.FindModulesImplementing <IRecolorable>(); foreach (IRecolorable mod in mods) { ModuleRecolorData data = new ModuleRecolorData((PartModule)mod, mod); moduleRecolorData.Add(data); } }
private void findFirstRecolorable(int moduleStart, out int module, out int section) { module = moduleStart; if (moduleStart < moduleRecolorData.Count) { ModuleRecolorData mrd = moduleRecolorData[moduleStart]; int len = mrd.sectionData.Length; SectionRecolorData srd; for (int i = 0; i < len; i++) { srd = mrd.sectionData[i]; if (srd.recoloringSupported()) { //found section in current module that supports recoloring, return it section = i; return; } } } //if recolorable could not be found in current module selection, default to searching entire part findFirstRecolorable(out module, out section); }