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; }
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); } }
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); } }
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); }
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); }