コード例 #1
0
ファイル: PartMaker.cs プロジェクト: willwill2will54/AT_Utils
        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);
        }