public static Part CreatePart(AvailablePart part_info, string flag_url) { var part = UnityEngine.Object.Instantiate(part_info.partPrefab); part.gameObject.SetActive(true); part.partInfo = part_info; part.name = part_info.name; part.flagURL = flag_url; part.persistentId = FlightGlobals.GetUniquepersistentId(); FlightGlobals.PersistentLoadedPartIds.Remove(part.persistentId); part.transform.position = Vector3.zero; part.attPos0 = Vector3.zero; part.transform.rotation = Quaternion.identity; part.attRotation = Quaternion.identity; part.attRotation0 = Quaternion.identity; part.partTransform = part.transform; part.orgPos = part.transform.root.InverseTransformPoint(part.transform.position); part.orgRot = Quaternion.Inverse(part.transform.root.rotation) * part.transform.rotation; part.packed = true; // initialize modules try { part.InitializeModules(); } catch (Exception e) { Utils.Log("Error while initializing modules of {}: {}\n{}", part, e.Message, e.StackTrace); } //load modules var module_nodes = part_info.partConfig.GetNodes("MODULE"); for (int i = 0, numNodes = module_nodes.Length, numModules = part.Modules.Count; i < numNodes && i < numModules; i++) { var node = module_nodes[i]; var module_name = node.GetValue("name"); if (!string.IsNullOrEmpty(module_name)) { var module = part.Modules[i]; if (module != null && module.ClassName == module_name) { try { module.Load(node); } catch (Exception e) { Utils.Log("Unable to load {}: {}\n{}", module, e.Message, e.StackTrace); } } } } // start modules var m = 0; while (m < part.Modules.Count) { var module = part.Modules[m++]; try { module.OnStart(PartModule.StartState.None); } catch (Exception e) { Utils.Log("Error in OnStart of {}: {}\n{}", module, e.Message, e.StackTrace); } } return(part); }