Example #1
0
        // Return an enumerable list of tiles contained within the given tile grid area.
        public IEnumerable <Tile> GetTilesInArea(Rectangle2I area, TileLayerOrder layerOrder = TileLayerOrder.LowestToHighest)
        {
            Rectangle2I clippedArea = Rectangle2I.Intersect(area,
                                                            new Rectangle2I(Point2I.Zero, gridDimensions));

            foreach (int i in GetLayers(layerOrder))
            {
                for (int y = clippedArea.Top; y < clippedArea.Bottom; y++)
                {
                    for (int x = clippedArea.Left; x < clippedArea.Right; x++)
                    {
                        Tile tile = tiles[x, y, i];
                        if (tile != null)
                        {
                            Point2I loc = tile.TileGridArea.Point;
                            if (!clippedArea.Contains(loc))
                            {
                                loc = Point2I.Clamp(loc, clippedArea);
                            }
                            if (x == loc.X && y == loc.Y)
                            {
                                yield return(tile);
                            }
                        }
                    }
                }
            }
        }
Example #2
0
        // Return an enumerable list of tiles touching the given point.
        public IEnumerable <Tile> GetTilesAtPosition(Vector2F position, TileLayerOrder layerOrder = TileLayerOrder.LowestToHighest)
        {
            Point2I location = GetTileLocation(position);

            foreach (Tile tile in GetTilesAtLocation(location, layerOrder))
            {
                if (tile.Bounds.Contains(position))
                {
                    yield return(tile);
                }
            }
        }
Example #3
0
        // Return an enumerable list of tiles touching the given rectangular bounds.
        public IEnumerable <Tile> GetTilesTouching(Rectangle2F bounds, TileLayerOrder layerOrder = TileLayerOrder.LowestToHighest)
        {
            Rectangle2I area = GetTileAreaFromRect(bounds);

            foreach (Tile tile in GetTilesInArea(area, layerOrder))
            {
                if (tile.Bounds.Intersects(bounds))
                {
                    yield return(tile);
                }
            }
        }
Example #4
0
        // Return an enumerable list of solid tiles colliding with the given collision box.
        public IEnumerable <Tile> GetSolidTilesColliding(Rectangle2F collisionBox, TileLayerOrder layerOrder = TileLayerOrder.LowestToHighest)
        {
            Rectangle2I area = GetTileAreaFromRect(collisionBox);

            foreach (Tile tile in GetTilesInArea(area, layerOrder))
            {
                if (tile.IsSolid && tile.CollisionModel != null &&
                    CollisionModel.Intersecting(tile.CollisionModel, tile.Position, collisionBox))
                {
                    yield return(tile);
                }
            }
        }
Example #5
0
        //-----------------------------------------------------------------------------
        // Tile Accessors
        //-----------------------------------------------------------------------------

        // Return an enumerable list of tiles at the given location.
        public IEnumerable <Tile> GetTilesAtLocation(Point2I location, TileLayerOrder layerOrder = TileLayerOrder.LowestToHighest)
        {
            if (IsTileInBounds(location))
            {
                foreach (int i in GetLayers(layerOrder))
                {
                    Tile tile = tiles[location.X, location.Y, i];
                    if (tile != null)
                    {
                        yield return(tile);
                    }
                }
            }
        }
Example #6
0
 // Return an enumerable list of tile layers in the specified order.
 public IEnumerable <int> GetLayers(TileLayerOrder order)
 {
     if (order == TileLayerOrder.LowestToHighest)
     {
         for (int layer = 0; layer < layerCount; layer++)
         {
             yield return(layer);
         }
     }
     else
     {
         for (int layer = layerCount - 1; layer >= 0; layer--)
         {
             yield return(layer);
         }
     }
 }
Example #7
0
 // Return an enumerable list of all tiles.
 public IEnumerable <Tile> GetTiles(TileLayerOrder layerOrder = TileLayerOrder.LowestToHighest)
 {
     foreach (int i in GetLayers(layerOrder))
     {
         for (int x = 0; x < GridWidth; x++)
         {
             for (int y = 0; y < GridHeight; y++)
             {
                 Tile tile = tiles[x, y, i];
                 if (tile != null && IsTileAtGridLocation(tile, x, y))
                 {
                     yield return(tile);
                 }
             }
         }
     }
 }
Example #8
0
 // Return an enumerable list of tiles contained within the given tile grid area.
 public IEnumerable<Tile> GetTilesInArea(Rectangle2I area, TileLayerOrder layerOrder = TileLayerOrder.LowestToHighest)
 {
     Rectangle2I clippedArea = Rectangle2I.Intersect(area,
         new Rectangle2I(Point2I.Zero, gridDimensions));
     foreach (int i in GetLayers(layerOrder)) {
         for (int y = clippedArea.Top; y < clippedArea.Bottom; y++) {
             for (int x = clippedArea.Left; x < clippedArea.Right; x++) {
                 Tile tile = tiles[x, y, i];
                 if (tile != null) {
                     Point2I loc = tile.TileGridArea.Point;
                     if (!clippedArea.Contains(loc))
                         loc = Point2I.Clamp(loc, clippedArea);
                     if (x == loc.X && y == loc.Y)
                         yield return tile;
                 }
             }
         }
     }
 }
Example #9
0
 // Return an enumerable list of tiles touching the given rectangular bounds.
 public IEnumerable<Tile> GetTilesTouching(Rectangle2F bounds, TileLayerOrder layerOrder = TileLayerOrder.LowestToHighest)
 {
     Rectangle2I area = GetTileAreaFromRect(bounds);
     foreach (Tile tile in GetTilesInArea(area, layerOrder)) {
         if (tile.Bounds.Intersects(bounds))
             yield return tile;
     }
 }
Example #10
0
 // Return an enumerable list of tiles touching the given point.
 public IEnumerable<Tile> GetTilesAtPosition(Vector2F position, TileLayerOrder layerOrder = TileLayerOrder.LowestToHighest)
 {
     Point2I location = GetTileLocation(position);
     foreach (Tile tile in GetTilesAtLocation(location, layerOrder)) {
         if (tile.Bounds.Contains(position))
             yield return tile;
     }
 }
Example #11
0
 //-----------------------------------------------------------------------------
 // Tile Accessors
 //-----------------------------------------------------------------------------
 // Return an enumerable list of tiles at the given location.
 public IEnumerable<Tile> GetTilesAtLocation(Point2I location, TileLayerOrder layerOrder = TileLayerOrder.LowestToHighest)
 {
     if (IsTileInBounds(location)) {
         foreach (int i in GetLayers(layerOrder)) {
             Tile tile = tiles[location.X, location.Y, i];
             if (tile != null)
                 yield return tile;
         }
     }
 }
Example #12
0
 // Return an enumerable list of all tiles.
 public IEnumerable<Tile> GetTiles(TileLayerOrder layerOrder = TileLayerOrder.LowestToHighest)
 {
     foreach (int i in GetLayers(layerOrder)) {
         for (int x = 0; x < GridWidth; x++) {
             for (int y = 0; y < GridHeight; y++) {
                 Tile tile = tiles[x, y, i];
                 if (tile != null && IsTileAtGridLocation(tile, x, y))
                     yield return tile;
             }
         }
     }
 }
Example #13
0
 // Return an enumerable list of solid tiles colliding with the given collision box.
 public IEnumerable<Tile> GetSolidTilesColliding(Rectangle2F collisionBox, TileLayerOrder layerOrder = TileLayerOrder.LowestToHighest)
 {
     Rectangle2I area = GetTileAreaFromRect(collisionBox);
     foreach (Tile tile in GetTilesInArea(area, layerOrder)) {
         if (tile.IsSolid && tile.CollisionModel != null &&
             CollisionModel.Intersecting(tile.CollisionModel, tile.Position, collisionBox))
             yield return tile;
     }
 }
Example #14
0
 // Return an enumerable list of tile layers in the specified order.
 public IEnumerable<int> GetLayers(TileLayerOrder order)
 {
     if (order == TileLayerOrder.LowestToHighest) {
         for (int layer = 0; layer < layerCount; layer++)
             yield return layer;
     }
     else {
         for (int layer = layerCount - 1; layer >= 0; layer--)
             yield return layer;
     }
 }