private void TriangulateMesh(Square square, int configuration, params Node[] nodes)
        {
            if (nodes.Length < 3)
            {
                Debug.LogError("TriangulateMesh: need at least 3 nodes!");
                return;
            }

            List <Vector2> edgeColliders = new List <Vector2> ();

            for (int i = 0; i < nodes.Length; i++)
            {
                Vector2 uv = new Vector2(nodes [i].GetPosition().x - square.BottomLeft.GetPosition().x, nodes [i].GetPosition().y - square.BottomLeft.GetPosition().y);
                Vector4 tilingAndOffset = TileMapData.GetTilingAndOffsetFromConfiguration(configuration);
                uv.x = uv.x * tilingAndOffset.x + tilingAndOffset.z;
                uv.y = uv.y * tilingAndOffset.y + tilingAndOffset.w;

                CreateVertex(nodes [i]);
                CreateUvs(uv);

                // edge collider
                if (!checkedVertices.Contains(nodes [i].GetPosition()))
                {
                    edgeColliders.Add(new Vector2(nodes [i].GetPosition().x, nodes [i].GetPosition().y));
                }
            }

            for (int i = 0; i < nodes.Length - 2; i++)
            {
                CreateTriangle(nodes [0].vertexIndex, nodes [i + 1].vertexIndex, nodes [i + 2].vertexIndex);
            }

            if (edgeColliders.Count >= 2)
            {
                edgeColliderPoints.Add(edgeColliders);
            }
        }