Ejemplo n.º 1
0
        /// <summary>
        /// Creates an affine/transformed sprite from a block of OAM data and the affine data with it
        /// </summary>
        public Sprite(Palette palette, Tileset tileset, OAM oam, OAM_Affine transform)
        {
            Size size = oam.GetDimensions();

            Load(palette, tileset, new TileMap(oam.GetTileMap(size)), false, false);

            int width  = (oam.OBJMode == OAM_OBJMode.BigAffine) ? size.Width * 16 : size.Width * 8;
            int height = (oam.OBJMode == OAM_OBJMode.BigAffine) ? size.Height * 16: size.Height * 8;

            byte[] data = new byte[width * height];
            int    tileX, tileY;
            int    affX, affY;
            int    halfW = width / 2;
            int    halfH = height / 2;

            for (int y = halfH * -1; y < halfH; y++)
            {
                for (int x = halfW * -1; x < halfW; x++)
                {
                    affX = (int)(transform.Ux * x + transform.Vx * y) + size.Width * 4;
                    affY = (int)(transform.Uy * x + transform.Vy * y) + size.Height * 4;
                    if (affX < 0 || affX >= size.Width * 8)
                    {
                        continue;
                    }
                    if (affY < 0 || affY >= size.Height * 8)
                    {
                        continue;
                    }

                    tileX = affX / Tile.SIZE;
                    tileY = affY / Tile.SIZE;
                    int index = Tiles[tileX, tileY];
                    if (index < 0 || index >= Sheet.Count)
                    {
                        continue;
                    }
                    tileX = affX % Tile.SIZE;
                    tileY = affY % Tile.SIZE;

                    data[(halfW + x) + (halfH + y) * width] = (byte)Sheet[index][tileX, tileY];
                }
            }
            Transform = new Bitmap(width, height, palette.ToBytes(false), data);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Creates a sprite from a block of OAM data
 /// </summary>
 public Sprite(Palette palette, Tileset tileset, OAM oam)
 {
     Load(palette, tileset, new TileMap(oam.GetTileMap(oam.GetDimensions())), oam.FlipH, oam.FlipV);
 }