private static void AddPolygonCollider(GameObject go, CollisionObject collision, SuperTile tile, SuperImportContext importContext)
        {
            // Note that polygons may need to be decomposed into convex parts
            var points = importContext.MakePointsPPU(collision.Points);

            // Triangulate the polygon points
            var triangulator = new Triangulator();
            var triangles    = triangulator.TriangulatePolygon(points);

            // Gather triangles into a collection of convex polygons
            var composition    = new ComposeConvexPolygons();
            var convexPolygons = composition.Compose(triangles);

            PolygonUtils.AddCompositePolygonCollider(go, convexPolygons);
        }
Exemplo n.º 2
0
        private void ProcessPolygonElement(GameObject goObject, XElement xPolygon)
        {
            // Get the points of the polygon so we can decompose into a collection of convex polygons
            var points = xPolygon.GetAttributeAsVector2Array("points");

            points = points.Select(p => ColliderFactory.TransformPoint(p)).ToArray();
            points = Importer.SuperImportContext.MakePoints(points);

            // Triangulate the polygon points
            var triangulator = new Triangulator();
            var triangles    = triangulator.TriangulatePolygon(points);

            // Gather triangles into a collection of convex polygons
            var composition    = new ComposeConvexPolygons();
            var convexPolygons = composition.Compose(triangles);

            PolygonUtils.AddCompositePolygonCollider(goObject, convexPolygons);
        }
Exemplo n.º 3
0
        private void AddConvexPolygonsFromSolution(PolyTree solution)
        {
            ClosedPaths = new List <Vector2[]>();

            // Triangulate the solution
            var triangulator = new Triangulator();
            var triangles    = triangulator.TriangulateClipperSolution(solution);

            // Gather triangles into a collection of convex polygons
            var composition    = new ComposeConvexPolygons();
            var convexPolygons = composition.Compose(triangles);

            foreach (var poly in convexPolygons)
            {
                var transformed = FromClipperSpace(poly);
                ClosedPaths.Add(transformed);
            }
        }
        private static void AddPolygonCollider(GameObject go, CollisionObject collision, SuperTile tile, SuperImportContext importContext)
        {
            // Note that polygons may need to be decomposed into convex parts
            var points = importContext.MakePoints(collision.Points);

            // Triangulate the polygon points
            var triangulator = new Triangulator();
            var triangles    = triangulator.TriangulatePolygon(points);

            // Gather triangles into a collection of convex polygons
            var composition    = new ComposeConvexPolygons();
            var convexPolygons = composition.Compose(triangles);

            PolygonUtils.AddCompositePolygonCollider(go, convexPolygons);

            // Position is from top-left corner
            float height = importContext.MakeScalar(tile.m_Height);

            go.transform.localPosition = new Vector3(0, height, 0);
        }
Exemplo n.º 5
0
        public static IEnumerable <PointF[]> SolutionPolygons_Simple(PolyTree solution)
        {
            List <PointF[]> triangles = new TriangulateClipperSolution().Triangulate(solution);
            List <PointF[]> list      = new ComposeConvexPolygons().Compose(triangles);

            List <PointF[]> .Enumerator enumerator = list.GetEnumerator();
            try
            {
                while (enumerator.MoveNext())
                {
                    PointF[] current = enumerator.Current;
                    yield return(current);
                }
            }
            finally
            {
                ((IDisposable)enumerator).Dispose();
            }
            enumerator = default(List <PointF[]> .Enumerator);
        }