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)); }
/// <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)); }
/// <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)); }