Пример #1
0
        /// <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);
                }
            }
        }
Пример #2
0
 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());
 }
Пример #3
0
        /// <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);
            }
        }