public bool Load() { var lines = File.ReadAllLines(Path.Combine(BlueprintManager.BlueprintPath, m_name + ".blueprint")).ToList(); Logger.LogDebug("read " + lines.Count + " pieces from " + Path.Combine(BlueprintManager.BlueprintPath, m_name + ".blueprint")); if (m_pieceEntries == null) { m_pieceEntries = new PieceEntry[lines.Count()]; } else if (m_pieceEntries.Length > 0) { Array.Clear(m_pieceEntries, 0, m_pieceEntries.Length - 1); Array.Resize(ref m_pieceEntries, lines.Count()); } uint i = 0; foreach (var line in lines) { m_pieceEntries[i++] = new PieceEntry(line); } return(true); }
private GameObject Create(Transform startPosition, PieceEntry piece, Dictionary <string, GameObject> prefabs, float maxX, float maxZ) { var pos = startPosition.position + startPosition.right * piece.GetPosition().x + startPosition.forward * piece.GetPosition().z + new Vector3(0, piece.GetPosition().y, 0); var q = new Quaternion(); q.eulerAngles = new Vector3(0, startPosition.transform.rotation.eulerAngles.y + piece.GetRotation().eulerAngles.y); var toBuild = Object.Instantiate(prefabs[piece.name], pos, q); var component = toBuild.GetComponent <Piece>(); if (component) { component.SetCreator(Player.m_localPlayer.GetPlayerID()); } return(toBuild); }
public bool Capture(float radiusDelta) { var vec = Player.m_localPlayer.transform.position; var rot = Camera.main.transform.rotation.eulerAngles; Console.instance.AddString("Collecting piece information"); var numPieces = 0; var numLastIteration = -1; var startRadius = 20.0f; var collected = new List <Piece>(); var iteration = 0; while (numLastIteration < numPieces) { collected.Clear(); Piece.GetAllPiecesInRadius(vec, startRadius, collected); numLastIteration = numPieces; numPieces = collected.Count(x => x.IsPlacedByPlayer() && x.m_category != Piece.PieceCategory.Misc); var newStart = new Vector3(); foreach (var position in collected.Where(x => x.IsPlacedByPlayer() && x.m_category != Piece.PieceCategory.Misc) .Select(x => x.m_nview.GetZDO().m_position)) { newStart.x += position.x; newStart.y += position.y; newStart.z += position.z; } newStart.x = newStart.x / (numPieces * 1f); newStart.y = newStart.y / (numPieces * 1f); newStart.z = newStart.z / (numPieces * 1f); vec = newStart; iteration++; Console.instance.AddString($"Iteration #{iteration} - found {numPieces} pieces in radius {startRadius}"); startRadius += radiusDelta; Thread.Sleep(100); } Console.instance.AddString($"Found {numPieces} in a radius of {startRadius:F2}"); // Relocate Z var minZ = 9999999.9f; var minX = 9999999.9f; var minY = 9999999.9f; foreach (var piece in collected.Where(x => x.IsPlacedByPlayer() && x.m_category != Piece.PieceCategory.Misc)) { if (piece.m_nview.GetZDO().m_position.x < minX) { minX = piece.m_nview.GetZDO().m_position.x; } if (piece.m_nview.GetZDO().m_position.z < minZ) { minZ = piece.m_nview.GetZDO().m_position.z; } if (piece.m_nview.GetZDO().m_position.y < minY) { minY = piece.m_nview.GetZDO().m_position.y; } } Console.instance.AddString($"{minX} - {minY} - {minZ}"); var bottomleft = new Vector3(minX, minY, minZ); // select and order instance piece entries var pieces = collected.Where(x => x.IsPlacedByPlayer() && x.m_category != Piece.PieceCategory.Misc).OrderBy(x => x.transform.position.y) .ThenBy(x => x.transform.position.x).ThenBy(x => x.transform.position.z); if (m_pieceEntries == null) { m_pieceEntries = new PieceEntry[pieces.Count()]; } else if (m_pieceEntries.Length > 0) { Array.Clear(m_pieceEntries, 0, m_pieceEntries.Length - 1); Array.Resize(ref m_pieceEntries, pieces.Count()); } uint i = 0; foreach (var piece in pieces) { var v1 = new Vector3(piece.m_nview.GetZDO().m_position.x - bottomleft.x, piece.m_nview.GetZDO().m_position.y - bottomleft.y, piece.m_nview.GetZDO().m_position.z - bottomleft.z); var q = piece.m_nview.GetZDO().m_rotation; q.eulerAngles = new Vector3(0, q.eulerAngles.y, 0); var line = string.Join(";", piece.name.Split('(')[0], piece.m_category.ToString(), v1.x.ToString("F5"), v1.y.ToString("F5"), v1.z.ToString("F5"), q.x.ToString("F5"), q.y.ToString("F5"), q.z.ToString("F5"), q.w.ToString("F5"), q.eulerAngles.x.ToString("F5"), q.eulerAngles.y.ToString("F5"), q.eulerAngles.z.ToString("F5")); m_pieceEntries[i++] = new PieceEntry(line); } return(true); }
public bool Capture(Vector3 startPosition, float startRadius, float radiusDelta) { var vec = startPosition; var rot = Camera.main.transform.rotation.eulerAngles; Logger.LogDebug("Collecting piece information"); var numPieces = 0; var collected = new List <Piece>(); collected.Clear(); foreach (var piece in Piece.m_allPieces) { if (Vector2.Distance(new Vector2(startPosition.x, startPosition.z), new Vector2(piece.transform.position.x, piece.transform.position.z)) < startRadius && piece.transform.position.y >= startPosition.y) { collected.Add(piece); numPieces++; } } Logger.LogDebug($"Found {numPieces} in a radius of {startRadius:F2}"); // Relocate Z var minZ = 9999999.9f; var minX = 9999999.9f; var minY = 9999999.9f; foreach (var piece in collected.Where(x => x.m_category != Piece.PieceCategory.Misc && x.IsPlacedByPlayer())) { if (piece.m_nview.GetZDO().m_position.x < minX) { minX = piece.m_nview.GetZDO().m_position.x; } if (piece.m_nview.GetZDO().m_position.z < minZ) { minZ = piece.m_nview.GetZDO().m_position.z; } if (piece.m_nview.GetZDO().m_position.y < minY) { minY = piece.m_nview.GetZDO().m_position.y; } } Logger.LogDebug($"{minX} - {minY} - {minZ}"); var bottomleft = new Vector3(minX, minY, minZ); // select and order instance piece entries var pieces = collected.Where(x => x.IsPlacedByPlayer() && x.m_category != Piece.PieceCategory.Misc).OrderBy(x => x.transform.position.y) .ThenBy(x => x.transform.position.x).ThenBy(x => x.transform.position.z); if (m_pieceEntries == null) { m_pieceEntries = new PieceEntry[pieces.Count()]; } else if (m_pieceEntries.Length > 0) { Array.Clear(m_pieceEntries, 0, m_pieceEntries.Length - 1); Array.Resize(ref m_pieceEntries, pieces.Count()); } uint i = 0; foreach (var piece in pieces) { var pos = new Vector3(piece.m_nview.GetZDO().m_position.x - bottomleft.x, piece.m_nview.GetZDO().m_position.y - bottomleft.y, piece.m_nview.GetZDO().m_position.z - bottomleft.z); var quat = piece.m_nview.GetZDO().m_rotation; quat.eulerAngles = new Vector3(0, quat.eulerAngles.y, 0); quat.eulerAngles = piece.transform.eulerAngles; var additionalInfo = piece.GetComponent <TextReceiver>() != null?piece.GetComponent <TextReceiver>().GetText() : ""; m_pieceEntries[i++] = new PieceEntry(piece.name, piece.m_category.ToString(), pos, quat, additionalInfo); } return(true); }