public void PlaceTileColliders(SuperMap map, SuperTile tile, TileIdMath tileId, Vector3Int pos) { // Do we have any collider objects defined for this tile? if (!tile.m_CollisionObjects.IsEmpty()) { var polygons = AcquireTilePolygonCollection(tile, tileId, map.m_Orientation); foreach (var poly in polygons.Polygons) { // Offset the polygon so that it is in the location of the tile var offset = map.CellPositionToLocalPosition(pos.x, pos.y, m_ImportContext); var points = poly.Points.Select(pt => pt + offset).ToArray(); CollisionClipperKey key = poly.MakeKey(); CollisionClipper clipper; if (!m_CollisionClippers.TryGetValue(key, out clipper)) { // Add a new clipper for the layer clipper = new CollisionClipper(); m_CollisionClippers.Add(key, clipper); } // Add the path to our clipper if (poly.IsClosed) { clipper.AddClosedPath(points); } else { clipper.AddOpenPath(points); } } } }
public void PlaceTileColliders(SuperMap map, SuperTile tile, TileIdMath tileId, Vector3Int pos) { Assert.IsNotNull(m_Tilemap, "Need a Tilemap component if we are going to gather tile colliders"); // Do we have any collider objects defined for this tile? if (!tile.m_CollisionObjects.IsEmpty()) { var polygons = AcquireTilePolygonCollection(tile, tileId, map.m_Orientation); foreach (var poly in polygons.Polygons) { // Offset the polygon so that it is in the location of the tile var offset = map.CellPositionToLocalPosition(pos.x, pos.y); if (map.m_Orientation == MapOrientation.Isometric || map.m_Orientation == MapOrientation.Staggered) { offset -= m_ImportContext.MakePointPPU(map.m_TileWidth, 0) * 0.5f; } else if (map.m_Orientation == MapOrientation.Hexagonal) { offset -= m_ImportContext.MakePointPPU(map.m_TileWidth, map.m_TileHeight) * 0.5f; } var points = poly.Points.Select(pt => pt + offset).ToArray(); CollisionClipperKey key = poly.MakeKey(); CollisionClipper clipper; if (!m_CollisionClippers.TryGetValue(key, out clipper)) { // Add a new clipper for the layer clipper = new CollisionClipper(); m_CollisionClippers.Add(key, clipper); } // Add the path to our clipper if (poly.IsClosed) { clipper.AddClosedPath(points); } else { clipper.AddOpenPath(points); } } } }