public Polygon2D GetRoomTemplateOutline()
        {
            var tilemaps        = RoomTemplateUtilsGrid2D.GetTilemaps(gameObject);
            var outlineTilemaps = RoomTemplateUtilsGrid2D.GetTilemapsForOutline(tilemaps);
            var usedTiles       = RoomTemplateUtilsGrid2D.GetUsedTiles(outlineTilemaps);

            if (usedTiles.Count == 0)
            {
                return(null);
            }

            var minX = usedTiles.Min(x => x.x);
            var maxX = usedTiles.Max(x => x.x);
            var minY = usedTiles.Min(x => x.y);
            var maxY = usedTiles.Max(x => x.y) + PaddingTop;

            var polygonPoints = new List <Vector2Int>()
            {
                new Vector2Int(minX, minY),
                new Vector2Int(minX, maxY),
                new Vector2Int(maxX, maxY),
                new Vector2Int(maxX, minY),
            };

            return(new Polygon2D(polygonPoints));
        }
Пример #2
0
        /// <summary>
        /// Computes a polygon from points on given tilemaps.
        /// </summary>
        /// <param name="roomTemplate"></param>
        /// <returns></returns>
        public static PolygonGrid2D GetPolygonFromRoomTemplate(GameObject roomTemplate)
        {
            var outlineHandler = roomTemplate.GetComponent <IRoomTemplateOutlineHandlerGrid2D>();

            if (outlineHandler != null)
            {
                var polygon2d = outlineHandler.GetRoomTemplateOutline();
                return(polygon2d?.GetGridPolygon());
            }

            var tilemaps = RoomTemplateUtilsGrid2D.GetTilemaps(roomTemplate);
            var outline  = RoomTemplateUtilsGrid2D.GetTilemapsForOutline(tilemaps);

            return(GetPolygonFromTilemaps(outline));
        }
 /// <summary>
 /// Gets tilemaps that should be used when computing room template outline.
 /// </summary>
 /// <param name="tilemaps"></param>
 /// <returns></returns>
 public static List <Tilemap> GetTilemapsForOutline(ICollection <Tilemap> tilemaps)
 {
     return(RoomTemplateUtilsGrid2D.GetTilemapsForOutline(tilemaps));
 }
Пример #4
0
        /// <summary>
        /// Computes a polygon from points on given tilemaps.
        /// </summary>
        /// <param name="tilemaps"></param>
        /// <returns></returns>
        public static PolygonGrid2D GetPolygonFromTilemaps(ICollection <Tilemap> tilemaps)
        {
            var usedTiles = GetUsedTiles(RoomTemplateUtilsGrid2D.GetTilemapsForOutline(tilemaps));

            return(GetPolygonFromTiles(usedTiles));
        }