Ejemplo n.º 1
0
        public static Vector3 GetSize(Vessel v)
        {
            Bounds  bounds = default(Bounds);
            Vector3 orgPos = v.parts[0].orgPos;

            bounds.center = orgPos;
            List <Bounds> list = new List <Bounds>();

            foreach (Part current in v.parts)
            {
                MPLog.Writelog("[Maritime Pack] part: " + current.name + " WCoM" + current.WCoM);
                MPLog.Writelog("[Maritime Pack] part: " + current.name + " CoB" + current.CenterOfBuoyancy);
                MPLog.Writelog("[Maritime Pack] part: " + current.name + " CoD" + current.CenterOfDisplacement);

                Bounds[] partRendererBounds = PartGeometryUtil.GetPartRendererBounds(current);
                Bounds[] array = partRendererBounds;
                for (int i = 0; i < array.Length; i++)
                {
                    Bounds bounds2 = array[i];
                    Bounds bounds3 = bounds2;
                    bounds3.size *= current.boundsMultiplier;
                    Vector3 size = bounds3.size;
                    bounds3.Expand(current.GetModuleSize(size));
                    list.Add(bounds2);
                }
            }
            return(PartGeometryUtil.MergeBounds(list.ToArray(), v.parts[0].transform.root).size);
        }
Ejemplo n.º 2
0
        void GetPartData(AvailablePart part)
        {
            bool    started = false;
            Vector3 pg      = new Vector3();

            StartLine(part.name);
            started = true;
            if (partAttrs[(int)PartAttrEnum.DimensionsInfo - 1] != null && partAttrs[(int)PartAttrEnum.DimensionsInfo - 1].enabled)
            {
                //
                // Now get the part dimensions: x,y,z
                //
                List <Bounds> list = new List <Bounds>();
                if (!(part.partPrefab.Modules.GetModule <LaunchClamp>(0) != null))
                {
                    Bounds[] partRendererBounds = PartGeometryUtil.GetPartRendererBounds(part.partPrefab);
                    int      num = partRendererBounds.Length;
                    for (int j = 0; j < num; j++)
                    {
                        Bounds bounds2 = partRendererBounds[j];
                        Bounds bounds3 = bounds2;
                        bounds3.size *= part.partPrefab.boundsMultiplier;
                        Vector3 size = bounds3.size;
                        bounds3.Expand(part.partPrefab.GetModuleSize(size, ModifierStagingSituation.CURRENT));
                        list.Add(bounds2);
                    }
                }

                pg = PartGeometryUtil.MergeBounds(list.ToArray(), part.partPrefab.transform.root).size;
#if false
                if (!started)
                {
                    StartLine(pg.x.ToString("F3"));
                }
                else
                {
                    AppendLine(pg.x.ToString("F3"));
                }
                AppendLine(pg.y.ToString("F3"));
                AppendLine(pg.z.ToString("F3"));
                started = true;
#endif
#if false
                string resources = "";
                foreach (AvailablePart.ResourceInfo r in part.resourceInfos)
                {
                    if (r.resourceName != "ElectricCharge" && r.resourceName != "Ablator")
                    {
                        resources += r.resourceName + ",";
                    }
                }
                if (resources != "")
                {
                    Log.Info("part: " + part.name + ", part.title: " + part.title + ", descr: " + part.description.Replace(",", ".") +
                             ", mass: " + part.partPrefab.mass + ", techRequired: " + part.TechRequired +
                             ", height x,y,z: " + pg.x.ToString() + ", " + pg.y.ToString() + ", " + pg.z.ToString() + "," + resources);
                }
#endif
            }

            DataDump.activeMod = "PART";
            var    a       = part.GetType();
            bool   b       = false;
            Module partmod = new Module("PART", "PART", a);
            // ConfigNode partNode = part.partConfig.GetNode("PART");
            //Log.Info("partConfig: " + part.partConfig);
            if (ActiveLists.activePropertyList.TryGetValue(Property.GetKey(partmod.modName, partmod.moduleName), out Property p))
            {
                foreach (FldInfo s in p.fields) //FromReflection)
                {
                    if (!b)
                    {
                        //string value = part.partConfig.GetValue(s.Name);


                        b = true;
                        for (var partAttr = PartAttrEnum.first + 1; partAttr < PartAttrEnum.last; partAttr++)
                        {
                            if (DataDump.partAttrs[(int)partAttr - 1] != null && DataDump.partAttrs[(int)partAttr - 1].enabled)
                            {
                                switch (partAttr)
                                {
                                case PartAttrEnum.DimensionsInfo:
                                    AppendLine(pg.x.ToString("F3"));
                                    AppendLine(pg.y.ToString("F3"));
                                    AppendLine(pg.z.ToString("F3"));
                                    break;

                                case PartAttrEnum.Resources:
                                    var nodes = part.partConfig.GetNodes("RESOURCE").ToList().OrderBy(r => r.GetValue("name"));
                                    int cnt   = 0;
                                    foreach (var n in nodes)
                                    {
                                        string name      = n.GetValue("name");
                                        string maxAmount = n.GetValue("maxAmount");

                                        if (cnt < maxResources)
                                        {
                                            AppendLine(name + ":" + maxAmount);
                                        }
                                        cnt++;
                                        if (cnt >= maxResources)
                                        {
                                            break;
                                        }
                                    }
                                    break;

                                case PartAttrEnum.TechRequired:
                                    AppendLine(part.TechRequired);
                                    break;

                                case PartAttrEnum.entryCost:
                                    AppendLine(part.entryCost);
                                    break;

                                case PartAttrEnum.cost:
                                    AppendLine(part.cost);
                                    break;

                                case PartAttrEnum.category:
                                    AppendLine(part.category.ToString());
                                    break;

                                default:
                                    string str = "n/a";
                                    str = "";

                                    if (!part.partConfig.TryGetValue(partAttr.ToString(), ref str))
                                    {
                                        if (useDefaultValues)
                                        {
                                            Part p1 = new Part();

                                            switch (partAttr)
                                            {
                                            case PartAttrEnum.breakingForce:
                                                str = p1.breakingForce.ToString();
                                                break;

                                            case PartAttrEnum.breakingtorque:
                                                str = p1.breakingTorque.ToString();
                                                break;

                                            case PartAttrEnum.minimum_drag:
                                                str = p1.minimum_drag.ToString();
                                                break;

                                            case PartAttrEnum.maximum_drag:
                                                str = p1.maximum_drag.ToString();
                                                break;

                                            case PartAttrEnum.angularDrag:
                                                str = p1.angularDrag.ToString();
                                                break;

                                            case PartAttrEnum.crashTolerance:
                                                str = p1.crashTolerance.ToString();
                                                break;

                                            case PartAttrEnum.maxTemp:
                                                str = p1.maxTemp.ToString();
                                                break;

                                            case PartAttrEnum.mass:
                                                AppendLine("Default: " + p1.mass);
                                                break;
                                            }
                                        }
                                        else
                                        {
                                            Log.Error("data not found");
                                        }
                                    }

                                    //str = part.partConfig.GetValue(partAttr.ToString());

                                    AppendLine(str);

                                    break;
                                }
                            }
                        }
                    }

                    Field field = new Field(partmod.modName, partmod.moduleName, s.Name);
                    if (s.Name == "entryCost")
                    {
                        s.Name = "_entryCost";
                    }
                    if (ActiveLists.activeFieldsList.TryGetValue(field.ActiveKey, out field))
                    {
                        if (field != null && field.enabled)
                        {
                            string value = part.partConfig.GetValue(s.Name);
                            if (value == null || value == "")
                            {
                                Type fieldsType = typeof(AvailablePart);
                                // Get an array of FieldInfo objects.
                                FieldInfo[] fields = fieldsType.GetFields(BindingFlags.FlattenHierarchy |
                                                                          BindingFlags.Instance |
                                                                          BindingFlags.Public | BindingFlags.NonPublic |
                                                                          BindingFlags.Static);
                                foreach (var f in fields)
                                {
                                    string v = "";


                                    var    fieldtype = s.FieldType.ToString();
                                    string t         = "System.Collections.Generic";
                                    if (fieldtype.StartsWith(t))
                                    {
                                        fieldtype = fieldtype.Substring(t.Length + 1);
                                    }


                                    if (f.Name == s.Name)
                                    {
                                        switch (fieldtype)
                                        {
                                        case "System.Single":
                                            v     = "float";
                                            value = ((float)f.GetValue(part)).ToString();
                                            break;

                                        case "System.Double":
                                            v     = "double";
                                            value = ((double)f.GetValue(part)).ToString();
                                            break;

                                        case "System.Int32":
                                            v     = "int";
                                            value = ((int)f.GetValue(part)).ToString();
                                            break;

                                        case "System.UInt32":
                                            v     = "uint";
                                            value = ((uint)f.GetValue(part)).ToString();
                                            break;

                                        case "System.String":
                                            v     = "string";
                                            value = (string)f.GetValue(part);
                                            if (s.Name == "description")
                                            {
                                                value = StripHtml(value);
                                                if (value.Length > maxLen && s.Name == "description")
                                                {
                                                    value = value.Substring(0, maxLen);
                                                }
                                                value = value.Replace("\n", " ").Replace("\r", " ");
                                            }
                                            break;

                                        case "System.Boolean":
                                            v     = "boolean";
                                            value = ((bool)f.GetValue(part)).ToString();
                                            break;

                                        case "UnityEngine.Vector3":
                                            v     = "Vector3";
                                            value = ((Vector3)f.GetValue(part)).ToString();
                                            break;
                                        }
                                        break;
                                    }
                                    Log.Info("v: " + v);
                                }
                            }
                            if (!started)
                            {
                            }
                            else
                            {
                                AppendLine(value);
                            }
                        }
                    }
                    else
                    {
#if false
                        if (field == null)
                        {
                            Log.Error("GetPartData, field is null");
                        }
                        else if (field.ActiveKey == null)
                        {
                            Log.Error("GetPartData, field.ActiveKey is null");
                        }
                        else
                        {
                            Log.Error("GetPartData, not found: " + field.ActiveKey);
                        }
#endif
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public Dictionary <string, blackListPart> loadData(string fname)
        {
            Dictionary <string, blackListPart> blpList = new Dictionary <string, blackListPart>();

            List <AvailablePart> loadedParts = new List <AvailablePart>();

            if (PartLoader.Instance != null)
            {
                loadedParts.AddRange(PartLoader.LoadedPartsList);
            }

#if false
            // This code is used to export various information about parts and their resources
            // used to rebalance fuel tanks
            foreach (AvailablePart part in loadedParts)
            {
                List <Bounds> list = new List <Bounds>();
                if (!(part.partPrefab.Modules.GetModule <LaunchClamp>(0) != null))
                {
                    Bounds[] partRendererBounds = PartGeometryUtil.GetPartRendererBounds(part.partPrefab);
                    int      num = partRendererBounds.Length;
                    for (int j = 0; j < num; j++)
                    {
                        Bounds bounds2 = partRendererBounds[j];
                        Bounds bounds3 = bounds2;
                        bounds3.size *= part.partPrefab.boundsMultiplier;
                        Vector3 size = bounds3.size;
                        bounds3.Expand(part.partPrefab.GetModuleSize(size, ModifierStagingSituation.CURRENT));
                        list.Add(bounds2);
                    }
                }

                var    pg        = PartGeometryUtil.MergeBounds(list.ToArray(), part.partPrefab.transform.root).size;
                string resources = "";
                foreach (AvailablePart.ResourceInfo r in part.resourceInfos)
                {
                    if (r.resourceName != "ElectricCharge" && r.resourceName != "Ablator")
                    {
                        resources += r.resourceName + ",";
                    }
                }
                if (resources != "")
                {
                    Log.Info("part: " + part.name + ", part.title: " + part.title + ", descr: " + part.description.Replace(",", ".") +
                             ", mass: " + part.partPrefab.mass + ", techRequired: " + part.TechRequired +
                             ", height x,y,z: " + pg.x.ToString() + ", " + pg.y.ToString() + ", " + pg.z.ToString() + "," + resources);
                }
            }
#endif
            Log.Info("loadData, fname: " + fname);
            if (fname != "" && File.Exists(fname))
            {
                using (StreamReader f = File.OpenText(fname))
                {
                    string l = "";
                    while ((l = f.ReadLine()) != null)
                    {
                        string[] s = l.Split(',');
                        if (s.Length >= 2)
                        {
                            blackListPart blp = new blackListPart();
                            blp.modName = s[0];
                            if (s[1] == "ALL")
                            {
                                blp.where = blackListType.ALL;
                            }
                            if (s[1] == "SPH")
                            {
                                blp.where = blackListType.SPH;
                            }
                            if (s[1] == "VAB")
                            {
                                blp.where = blackListType.VAB;
                            }

                            AvailablePart p = loadedParts.Find(part => part.name == blp.modName);
                            if (p != null)
                            {
                                blp.title = p.title;
                                Log.Info("Blacklist mod: " + blp.modName);
                                Log.Info("partTitle: " + blp.title);
                                blp.permapruned = false;

                                blpList.Add(blp.modName, blp);
                            }
                        }
                    }
                }
                return(blpList);
            }
            else
            {
                return(blpList);
            }
        }