示例#1
0
        public static void CenterToPositon(List <Build.BuildSave.PlacedPartSave> parts, PartDatabase partDatabase, ref Vector2 size, Vector2 targetCenter)
        {
            Vector2 zero   = Vector2.zero;
            Vector2 vector = Vector2.one * float.PositiveInfinity;

            foreach (Build.BuildSave.PlacedPartSave placedPartSave in parts)
            {
                PartData partByName = partDatabase.GetPartByName(placedPartSave.partName);
                if (!(partByName == null))
                {
                    foreach (PartData.Area area in partByName.areas)
                    {
                        Vector2 vector2 = placedPartSave.position + area.start * placedPartSave.orientation;
                        Vector2 vector3 = placedPartSave.position + (area.start + area.size) * placedPartSave.orientation;
                        zero = new Vector2(Mathf.Max(new float[]
                        {
                            zero.x,
                            vector2.x,
                            vector3.x
                        }), Mathf.Max(new float[]
                        {
                            zero.y,
                            vector2.y,
                            vector3.y
                        }));
                        vector = new Vector2(Mathf.Min(new float[]
                        {
                            vector.x,
                            vector2.x,
                            vector3.x
                        }), Mathf.Min(new float[]
                        {
                            vector.y,
                            vector2.y,
                            vector3.y
                        }));
                    }
                }
            }
            Vector2 b  = (vector + zero) / 2f;
            Vector2 b2 = targetCenter - b;

            for (int j = 0; j < parts.Count; j++)
            {
                parts[j].position += b2;
            }
            size = zero - vector;
        }
示例#2
0
        public static void PositionForLaunch(List <Build.BuildSave.PlacedPartSave> parts, PartDatabase partDatabase, int rotation)
        {
            Vector2 zero = Vector2.zero;
            Vector2 a    = Vector2.one * float.PositiveInfinity;

            foreach (Build.BuildSave.PlacedPartSave placedPartSave in parts)
            {
                PartData partByName = partDatabase.GetPartByName(placedPartSave.partName);
                if (!(partByName == null))
                {
                    foreach (PartData.Area area in partByName.areas)
                    {
                        Vector2 vector  = placedPartSave.position + area.start * placedPartSave.orientation;
                        Vector2 vector2 = placedPartSave.position + (area.start + area.size) * placedPartSave.orientation;
                        zero = new Vector2(Mathf.Max(new float[]
                        {
                            zero.x,
                            vector.x,
                            vector2.x
                        }), Mathf.Max(new float[]
                        {
                            zero.y,
                            vector.y,
                            vector2.y
                        }));
                        a = new Vector2(Mathf.Min(new float[]
                        {
                            a.x,
                            vector.x,
                            vector2.x
                        }), Mathf.Min(new float[]
                        {
                            a.y,
                            vector.y,
                            vector2.y
                        }));
                    }
                }
            }
            for (int j = 0; j < parts.Count; j++)
            {
                parts[j].position -= a - new Vector2(Utility.RoundToHalf((a.x - zero.x) / 2f), 0f);
            }
        }
示例#3
0
        public static void PositionForLaunch(List <Build.BuildSave.PlacedPartSave> parts, PartDatabase partDatabase)
        {
            Vector2 zero = Vector2.zero;
            Vector2 a    = Vector2.one * float.PositiveInfinity;

            foreach (Build.BuildSave.PlacedPartSave current in parts)
            {
                PartData.Area[] areas = partDatabase.GetPartByName(current.partName).areas;
                for (int i = 0; i < areas.Length; i++)
                {
                    PartData.Area area    = areas[i];
                    Vector2       vector  = current.position + area.start * current.orientation;
                    Vector2       vector2 = current.position + (area.start + area.size) * current.orientation;
                    zero = new Vector2(Mathf.Max(new float[]
                    {
                        zero.x,
                        vector.x,
                        vector2.x
                    }), Mathf.Max(new float[]
                    {
                        zero.y,
                        vector.y,
                        vector2.y
                    }));
                    a = new Vector2(Mathf.Min(new float[]
                    {
                        a.x,
                        vector.x,
                        vector2.x
                    }), Mathf.Min(new float[]
                    {
                        a.y,
                        vector.y,
                        vector2.y
                    }));
                }
            }
            for (int j = 0; j < parts.Count; j++)
            {
                parts[j].position -= a - new Vector2(Utility.RoundToHalf((a.x - zero.x) / 2f), 0f);
            }
        }
示例#4
0
                public static List <PlacedPart> FromSave(List <Build.BuildSave.PlacedPartSave> parts, PartDatabase partDatabase)
                {
                    List <PlacedPart> list = new List <PlacedPart>();

                    for (int i = 0; i < parts.Count; i++)
                    {
                        PartData partByName = partDatabase.GetPartByName(parts[i].partName);
                        bool     flag       = partByName != null;
                        if (flag)
                        {
                            try
                            {
                                partByName.GUID = new Guid(parts[i].GUID);
                            } catch
                            {
                                partByName.GUID = Guid.NewGuid();
                            }
                            //Tags parsing from text back to a Dictionary
                            partByName.tags = new Dictionary <string, object>();
                            try
                            {
                                foreach (string text in parts[i].tagsString.Split(new char[]
                                {
                                    '|'
                                }))
                                {
                                    if (!(text == ""))
                                    {
                                        Type type = Type.GetType(text.Split(new char[]
                                        {
                                            '#'
                                        })[0]);
                                        string key = text.Split(new char[]
                                        {
                                            '#'
                                        })[1];
                                        //ModLoader.mainConsole.log(text.Split('#')[2]);

                                        object obj = JsonUtility.FromJson(text.Split(new char[]
                                        {
                                            '#'
                                        })[2], type);

                                        //ModLoader.mainConsole.log(obj.ToString(), "Tags");
                                        partByName.tags.Add(key, obj);
                                    }
                                }

                                /*foreach (string text2 in partByName.tags.Keys)
                                 * {
                                 *  ModLoader.mainConsole.log(text2 + " " + partByName.tags[text2].ToString(), "Tags");
                                 * }*/
                            }
                            catch (Exception e)
                            {
                                ModLoader.mainConsole.logError(e);
                            }

                            list.Add(new PlacedPart(null, parts[i].position, parts[i].orientation, partByName));
                        }
                    }
                    return(list);
                }
示例#5
0
                public static List <PlacedPart> FromSave(List <Build.BuildSave.PlacedPartSave> parts, PartDatabase partDatabase)
                {
                    List <PlacedPart> list = new List <PlacedPart>();

                    for (int i = 0; i < parts.Count; i++)
                    {
                        list.Add(new PlacedPart(null, parts[i].position, parts[i].orientation, partDatabase.GetPartByName(parts[i].partName)));
                    }
                    return(list);
                }