void InitializeLine() { currentUpdatableLine = Instantiate(walkablePointPrefab, getMouseToWorldPos(), Quaternion.identity) as WalkablePoint; }
void GenerateMeshFromHitsNew() { int meshCount = 0; wp = wp.OrderBy(w => w.i).ToList(); for (int i = 0; i < wp.Count; i++) { List <Vector3> vertices = new List <Vector3> (); List <int> triangles = new List <int> (); WalkablePoint hit = wp [i]; //always add the first point vertices.Add(hit.point); for (i = i + 1; i < wp.Count; i++) { //if the next hit should be connected to the current hit if (wp [i].i == hit.i + 1) { hit = wp [i]; vertices.Add(hit.point); } else if (wp [i].i == points.Count - 1 && wp[0].i == 0) { //last point should check if the first point should be connected hit = wp [wp.Count - 1]; vertices.Add(hit.point); } else { i -= 1; break; } } if (vertices.Count >= 2) { vertices = vertices.OrderBy(v => v.x).ToList(); for (int j = 0; j < vertices.Count; j += 2) { //add a corresponding vertex below this one vertices.Insert(j + 1, vertices[j] - Vector3.up * platformHeight); } for (int k = 0; k < vertices.Count - 3; k += 2) { triangles.Add(k + 1); triangles.Add(k); triangles.Add(k + 2); triangles.Add(k + 1); triangles.Add(k + 2); triangles.Add(k + 3); } if (triangles.Count > 1) { Mesh m = new Mesh(); m.vertices = vertices.ToArray(); m.triangles = triangles.ToArray(); m.uv = getUVs(vertices); m.RecalculateNormals(); GameObject newMesh; if (meshCount >= existingWalkables.Count) { newMesh = (GameObject)Instantiate(meshPlatform); newMesh.transform.parent = this.transform; newMesh.GetComponent <EdgeCollider2D> ().points = getColliderArray(vertices); newMesh.transform.position = new Vector3(0, 0, -1f); existingWalkables.Add(newMesh); MeshRenderer mr = newMesh.GetComponent <MeshRenderer> (); mr.sortingLayerName = "Walkable"; Material mat = new Material(mr.material); mat.color = GetComponent <Letter> ().canBeHarvested ? new Color(0.4f, 0.4f, 0.14f) : new Color(0.06f, 0.20f, 0.29f); //will probably need to be changed mr.material = mat; } else { newMesh = existingWalkables [meshCount]; newMesh.transform.localRotation = Quaternion.Euler(-transform.localRotation.eulerAngles); newMesh.GetComponent <EdgeCollider2D> ().points = getColliderArray(vertices); newMesh.transform.position = new Vector3(0, 0, -1f); } MeshFilter mf = newMesh.GetComponent <MeshFilter> (); mf.sharedMesh = m; meshCount++; } } } for (int i = meshCount; i < existingWalkables.Count; i++) { DestroyImmediate(existingWalkables [i]); existingWalkables.RemoveAt(i); } }