public static void DrawInBitmap(this Tilemap tilemap, GraphicsBank tileSet, Bitmap bm)
 {
     for (int tileY = 0; tileY < tilemap.TilesY; ++tileY)
     {
         for (int tileX = 0; tileX < tilemap.TilesX; ++tileX)
         {
             Tilemap.TilemapEntry tileEntry = tilemap.TileMap[tileY, tileX];
             Tile tile = tileSet.Tiles[tileEntry.TileId];
             tile.DrawInBitmap(bm, tileX * Tile.Width, tileY * Tile.Height, tileEntry.XFlip, tileEntry.YFlip, tileEntry.Palette * 16);
         }
     }
 }
        public static Bitmap ToBitmap(this GraphicsBank tiles, Palette palette)
        {
            int widthTiles  = tiles.TilesX;
            int heightTiles = tiles.TilesY;

            var bm = new Bitmap(widthTiles * Tile.Width, heightTiles * Tile.Height, tiles.Format.AsPixelFormat());

            palette.Apply(bm);

            tiles.DrawInBitmap(bm);

            return(bm);
        }
        public static Bitmap ToBitmap(this Tilemap tilemap, GraphicsBank tileSet, Palette palette)
        {
            int widthTiles  = tilemap.TilesX;
            int heightTiles = tilemap.TilesY;

            var bm = new Bitmap(widthTiles * Tile.Width, heightTiles * Tile.Height, PixelFormat.Format8bppIndexed);

            palette.Apply(bm);

            tilemap.DrawInBitmap(tileSet, bm);

            return(bm);
        }
        private static void DrawInBitmap1DMapping(this OAMEntry oam, Bitmap bm, GraphicsBank graphics, int xOffset, int yOffset)
        {
            for (uint tileY = 0; tileY < oam.TilesY; ++tileY)
            {
                for (uint tileX = 0; tileX < oam.TilesX; ++tileX)
                {
                    uint tileIndex = oam.TileIndex;
                    tileIndex += tileX + oam.TilesX * tileY;

                    var tile = graphics.Tiles[tileIndex];
                    oam.DrawInBitmap(bm, tile, tileX, tileY, xOffset, yOffset);
                }
            }
        }
        public static void DrawInBitmap2DMapping(this OAMEntry oam, Bitmap bm, GraphicsBank graphics, int xOffset, int yOffset)
        {
            uint baseX        = oam.TileIndex % graphics.TilesX;
            uint baseY        = oam.TileIndex / graphics.TilesX;
            uint subTileWidth = (graphics.TilesX == 0xFFFF) ? oam.TilesX : graphics.TilesX;

            for (uint tileY = 0; tileY < oam.TilesY; ++tileY)
            {
                for (uint tileX = 0; tileX < oam.TilesX; ++tileX)
                {
                    uint subTileYIndex = baseY + tileY;
                    uint subTileXIndex = baseX + tileX;
                    uint tileIndex     = subTileXIndex + subTileYIndex * subTileWidth;

                    var tile = graphics.Tiles[tileIndex];
                    oam.DrawInBitmap(bm, tile, tileX, tileY, xOffset, yOffset);
                }
            }
        }
        public static void DrawInBitmap(this GraphicsBank tiles, Bitmap bm)
        {
            if (!tiles.CanBeDrawnStandalone)
            {
                throw new NotSupportedException("Graphicsbank can't be drawn independently");
            }

            int widthTiles  = tiles.TilesX;
            int heightTiles = tiles.TilesY;

            for (int tileY = 0; tileY < heightTiles; ++tileY)
            {
                for (int tileX = 0; tileX < widthTiles; ++tileX)
                {
                    var tile = tiles.Tiles[tileY * tiles.TilesX + tileX];
                    tile.DrawInBitmap(bm, tileX * Tile.Width, tileY * Tile.Height);
                }
            }
        }
 public static void DrawInBitmap(this NCER.AnimationCell cell, Bitmap bm, NCER.MappingFormat mapping, GraphicsBank graphics, int xOffset = 0, int yOffset = 0)
 {
     foreach (var oam in cell.oams)
     {
         oam.DrawInBitmap(bm, mapping, graphics, xOffset, yOffset);
     }
 }
 public static void DrawInBitmap(this OAMEntry oam, Bitmap bm, Animation.NCER.MappingFormat mapping, GraphicsBank graphics, int xOffset, int yOffset)
 {
     if (mapping == Animation.NCER.MappingFormat.CM_2D)
     {
         oam.DrawInBitmap2DMapping(bm, graphics, xOffset, yOffset);
     }
     else
     {
         oam.DrawInBitmap1DMapping(bm, graphics, xOffset, yOffset);
     }
 }