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