/// <summary> /// Fills in background tiles for any non-empty cell that is adjacent to a background tile. Returns true if any changes were made. /// </summary> /// <param name="mapGrid"></param> /// <param name="grassMap"></param> /// <returns></returns> public static void CalculateObscuredTiles(ArrayGrid <ImageCellType> mapGrid, TileMaskMap bgMap) { List <Vector2> tilesToAdd = new List <Vector2>(); List <Vector2> tilesToRecheck = new List <Vector2>(); foreach (var tile in mapGrid.PointItems) { if (bgMap.TileFlags.GetFromPoint(tile.Position) == TileMaskValue.Filled) { continue; } if (tile.Value == ImageCellType.Empty) { continue; } if (tile.Value.IsSolid()) { bgMap.TileFlags.Set(tile.Position, TileMaskValue.Obscured); } else if (tile.Position.GetAdjacentPoints(true).Select(bgMap.TileFlags.GetFromPoint).Where(p => p == TileMaskValue.Filled).Any()) { bgMap.TileFlags.Set(tile.Position, TileMaskValue.Filled); } } }
private void InitMaps() { BrownRockMap = new TileMaskMap(Cells.Map(p => p == ImageCellType.BrownRock), GameTiles.BrownRock()); GrassMap = new TileMaskMap(Cells.Map(p => p == ImageCellType.GrassBackground), GameTiles.Grass()); WaterMap = new TileMaskMap(Cells.Map(p => p == ImageCellType.Water), GameTiles.Water()); LadderMap = new TileMaskMap(Cells.Map(p => p == ImageCellType.Ladder), GameTiles.Ladder()); }
/// <summary> /// Extends tiles one unit into the obscured tiles, for smoother boundaries /// </summary> /// <param name="waterTiles"></param> public static void ExtendTileMask(TileMaskMap tiles) { List <ArrayGridPoint <TileMaskValue> > itemsToSet = new List <ArrayGridPoint <TileMaskValue> >(); foreach (var tile in tiles.TileFlags.PointItems.Where(p => p.Value == TileMaskValue.Filled)) { itemsToSet.AddRange(tile.GetAdjacent().Where(p => p.Value == TileMaskValue.Obscured)); } foreach (var item in itemsToSet) { item.Set(TileMaskValue.Filled); } }