// This runs after OnStart() so everything should be initalized public void Start() { // Check for incompatible modules bool modifiedSetup = false; List <ModuleB9PartSwitch> otherModules = part.FindModulesImplementing <ModuleB9PartSwitch>(); for (int i = 0; i < otherModules.Count; i++) { ModuleB9PartSwitch otherModule = otherModules[i]; if (otherModule == this) { continue; } bool destroy = false; for (int j = 0; j < managedResourceNames.Count; j++) { if (otherModule.IsManagedResource(managedResourceNames[j])) { LogError("Two ModuleB9PartSwitch modules cannot manage the same resource: " + managedResourceNames[j]); destroy = true; } } for (int j = 0; j < managedTransformNames.Count; j++) { if (otherModule.IsManagedTransform(managedTransformNames[j])) { LogError("Two ModuleB9PartSwitch modules cannot manage the same transform: " + managedTransformNames[j]); destroy = true; } } for (int j = 0; j < managedStackNodeIDs.Count; j++) { if (otherModule.IsManagedNode(managedStackNodeIDs[j])) { LogError("Two ModuleB9PartSwitch modules cannot manage the same attach node: " + managedStackNodeIDs[j]); destroy = true; } } if (otherModule.MaxTempManaged && MaxTempManaged) { LogError("Two ModuleB9PartSwitch modules cannot both manage the part's maxTemp"); destroy = true; } if (otherModule.SkinMaxTempManaged && SkinMaxTempManaged) { LogError("Two ModuleB9PartSwitch modules cannot both manage the part's skinMaxTemp"); destroy = true; } if (otherModule.AttachNodeManaged && AttachNodeManaged) { LogError("Two ModuleB9PartSwitch modules cannot both manage the part's attach node"); destroy = true; } if (destroy) { LogWarning("ModuleB9PartSwitch with moduleID '" + otherModule.moduleID + "' is incomatible, and will be removed."); part.Modules.Remove(otherModule); Destroy(otherModule); modifiedSetup = true; } } for (int i = 0; i < part.Modules.Count; i++) { PartModule m = part.Modules[i]; if (m == null || m is ModuleB9PartSwitch) { continue; } Type mType = m.GetType(); for (int j = 0; j < IncompatibleModuleTypes.Length; j++) { Type testType = IncompatibleModuleTypes[j]; if (mType == testType || mType.IsSubclassOf(testType)) { LogError("ModuleB9PartSwitch and " + m.moduleName + " cannot exist on the same part. " + m.moduleName + " will be removed."); part.Modules.Remove(m); Destroy(m); modifiedSetup = true; break; } } } // If there were incompatible modules, they might have messed with things if (modifiedSetup) { UpdateSubtype(false); } }