protected override void HandleOnUpdate()
    {
        
        for(int i = 0; i<OuterPolygon.Count; i++)
        {
            List<Vector2> union = PolygonAlgorithm.Combine(OuterPolygon[i], new List<List<Vector2>>() { InnerHole[i] });
            if ((FaceType & Facing.FACE_BACK) == Facing.FACE_BACK)
                CalcFaceMeshData(union, ForceEarCut.ComputeTriangles(union), Facing.FACE_FORWARD, tinkness, ref vertices, ref normals, ref uv, ref triangles);
            if ((FaceType & Facing.FACE_BACK) == Facing.FACE_BACK)
                CalcFaceMeshData(union, ForceEarCut.ComputeTriangles(union), Facing.FACE_BACK, tinkness, ref vertices, ref normals, ref uv, ref triangles);
        }

        if(IsTinkness)
        {
            foreach (var outer in OuterPolygon)
            {
                //outer.Reverse();
                CalcSideMeshData(outer, tinkness, ref vertices, ref normals, ref uv, ref triangles);
            }

            foreach (var inner in InnerHole)
            {
                CalcSideMeshData(inner, tinkness, ref vertices, ref normals, ref uv, ref triangles);
            }
        }

    }
    public void OnUpdateMesh()
    {
        List <Vector3> verts = new List <Vector3>();
        List <Vector2> uvs   = new List <Vector2>();
        List <int>     tris  = new List <int>();

        List <Vector2> points    = PolygonAlgorithm.Combine(_shape2D);
        List <int>     triangles = ForceEarCut.ComputeTriangles(points);

        if ((facing & Facing.FACE_BACK) == Facing.FACE_BACK)
        {
            CalculateMeshData(points, triangles, Facing.FACE_BACK, _thickness, ref verts, ref uvs, ref tris);
        }

        if ((facing & Facing.FACE_FORWARD) == Facing.FACE_FORWARD)
        {
            CalculateMeshData(points, triangles, Facing.FACE_FORWARD, _thickness, ref verts, ref uvs, ref tris);
        }

        Mesh _mesh = GetComponent <MeshFilter>().sharedMesh;

        if (_mesh == null)
        {
            _mesh      = new Mesh();
            _mesh.name = "Face_Mesh";
            GetComponent <MeshFilter>().mesh = _mesh;
        }
        _mesh.Clear();
        _mesh.vertices  = verts.ToArray();
        _mesh.uv        = uvs.ToArray();
        _mesh.triangles = tris.ToArray();
        _mesh.RecalculateNormals();
        ;
    }