Exemple #1
0
 public void Draw(Texture2D texture,
                  Rectangle destination,
                  Rectangle source,
                  SpriteFlipMode flipMode = SpriteFlipMode.None)
 {
     Draw(texture, destination, source, Color.White, flipMode);
 }
Exemple #2
0
        public void Draw(Texture2D texture,
                         Rectangle destination,
                         Rectangle source,
                         Color color,
                         float rotation,
                         Vector2 origin,
                         SpriteFlipMode flipMode = SpriteFlipMode.None)
        {
            float x   = destination.X;
            float y   = destination.Y;
            float dx  = -origin.X;
            float dy  = -origin.Y;
            float w   = destination.Width;
            float h   = destination.Height;
            float sin = (float)Math.Sin(rotation);
            float cos = (float)Math.Cos(rotation);

            Vector2 topLeft     = new Vector2(x + dx * cos - dy * sin, y + dx * sin + dy * cos);
            Vector2 topRight    = new Vector2(x + (dx + w) * cos - dy * sin, y + (dx + w) * sin + dy * cos);
            Vector2 bottomLeft  = new Vector2(x + dx * cos - (dy + h) * sin, y + dx * sin + (dy + h) * cos);
            Vector2 bottomRight = new Vector2(x + (dx + w) * cos - (dy + h) * sin, y + (dx + w) * sin + (dy + h) * cos);

            Draw(texture,
                 topLeft,
                 topRight,
                 bottomLeft,
                 bottomRight,
                 source,
                 color,
                 flipMode);
        }
Exemple #3
0
 public void Draw(TextureRegion textureRegion,
                  Rectangle destination,
                  Color color,
                  float rotation,
                  Vector2 origin,
                  SpriteFlipMode flipMode = SpriteFlipMode.None)
 {
     Draw(textureRegion.Texture, destination, textureRegion.Region, color, rotation, origin, flipMode);
 }
Exemple #4
0
 public void Draw(Texture2D texture,
                  Rectangle destination,
                  Rectangle source,
                  Color color,
                  SpriteFlipMode flipMode = SpriteFlipMode.None)
 {
     Draw(texture,
          new Vector2(destination.X, destination.Y),
          new Vector2(destination.X + destination.Width, destination.Y + destination.Height),
          source,
          color,
          flipMode);
 }
Exemple #5
0
 public void Draw(Texture2D texture, Vector2 position, SpriteFlipMode flipMode = SpriteFlipMode.None)
 {
     Draw(texture,
          new Rectangle((int)position.X,
                        (int)position.Y,
                        texture._width,
                        texture._height),
          new Rectangle(0,
                        0,
                        texture._width,
                        texture._height),
          Color.White,
          flipMode);
 }
Exemple #6
0
 public void Draw(Texture2D texture,
                  Vector2 topLeft,
                  Vector2 bottomRight,
                  Rectangle source,
                  Color color,
                  SpriteFlipMode flipMode = SpriteFlipMode.None)
 {
     Draw(texture, topLeft,
          new Vector2(bottomRight.X, topLeft.Y),
          new Vector2(topLeft.X, bottomRight.Y),
          bottomRight,
          source,
          color,
          flipMode);
 }
Exemple #7
0
        public void Draw(Texture2D texture,
                         Vector2 topLeft,
                         Vector2 topRight,
                         Vector2 bottomLeft,
                         Vector2 bottomRight,
                         Rectangle source,
                         Color color,
                         SpriteFlipMode flipMode = SpriteFlipMode.None)
        {
            if (!_active)
            {
                throw new InvalidOperationException("Begin() must be called before SpriteBatch may be used for drawing.");
            }

            if (texture == null)
            {
                throw new ArgumentNullException(nameof(texture));
            }

            FlushIfNeeded(texture);

            _count++;
            EnsureBufferLargeEnough();

            int vertexOffset = (_count - 1) * 4;
            int indexOffset  = (_count - 1) * 6;

            float uvLeft   = source.X / (float)texture._width;
            float uvRight  = (source.X + source.Width) / (float)texture._width;
            float uvTop    = (texture._height - (source.Y + source.Height)) / (float)texture._height;
            float uvBottom = (texture._height - (source.Y + source.Height) + source.Height) / (float)texture._height;

            if (flipMode == SpriteFlipMode.FlipHorizontally)
            {
                ValueHelper.Swap(ref uvLeft, ref uvRight);
            }

            if (flipMode == SpriteFlipMode.FlipVertically)
            {
                ValueHelper.Swap(ref uvTop, ref uvBottom);
            }

            _vertexData[vertexOffset + 0].Position.X = bottomLeft.X;     // Bottom Left
            _vertexData[vertexOffset + 0].Position.Y = bottomLeft.Y;
            _vertexData[vertexOffset + 0].TexCoord.X = uvLeft;
            _vertexData[vertexOffset + 0].TexCoord.Y = uvTop;
            _vertexData[vertexOffset + 0].Color      = color;

            _vertexData[vertexOffset + 1].Position.X = bottomRight.X;    // Bottom Right
            _vertexData[vertexOffset + 1].Position.Y = bottomRight.Y;
            _vertexData[vertexOffset + 1].TexCoord.X = uvRight;
            _vertexData[vertexOffset + 1].TexCoord.Y = uvTop;
            _vertexData[vertexOffset + 1].Color      = color;

            _vertexData[vertexOffset + 2].Position.X = topRight.X;    // Top Right
            _vertexData[vertexOffset + 2].Position.Y = topRight.Y;
            _vertexData[vertexOffset + 2].TexCoord.X = uvRight;
            _vertexData[vertexOffset + 2].TexCoord.Y = uvBottom;
            _vertexData[vertexOffset + 2].Color      = color;

            _vertexData[vertexOffset + 3].Position.X = topLeft.X;     // Top Left
            _vertexData[vertexOffset + 3].Position.Y = topLeft.Y;
            _vertexData[vertexOffset + 3].TexCoord.X = uvLeft;
            _vertexData[vertexOffset + 3].TexCoord.Y = uvBottom;
            _vertexData[vertexOffset + 3].Color      = color;

            _indexData[indexOffset + 0] = (ushort)(vertexOffset + 0);        // Bottom Left
            _indexData[indexOffset + 1] = (ushort)(vertexOffset + 1);        // Bottom Right
            _indexData[indexOffset + 2] = (ushort)(vertexOffset + 2);        // Top Right
            _indexData[indexOffset + 3] = (ushort)(vertexOffset + 0);        // Bottom Left
            _indexData[indexOffset + 4] = (ushort)(vertexOffset + 2);        // Top Right
            _indexData[indexOffset + 5] = (ushort)(vertexOffset + 3);        // Top Left
        }
Exemple #8
0
 public void Draw(Texture2D texture, Rectangle destination, Color color, SpriteFlipMode flipMode = SpriteFlipMode.None)
 {
     Draw(texture, destination, new Rectangle(0, 0, texture._width, texture._height), color, flipMode);
 }
Exemple #9
0
        public void Draw(Tileset tileset, int tileX, int tileY, Rectangle destination, Color color, SpriteFlipMode flipMode = SpriteFlipMode.None)
        {
            if (tileset == null)
            {
                throw new ArgumentNullException(nameof(tileset));
            }

            Draw(tileset.Texture2D, destination, tileset.GetTileRegion(tileX, tileY), color, flipMode);
        }
Exemple #10
0
        public void Draw(TextureRegion textureRegion, Rectangle destination, Color color, SpriteFlipMode flipMode = SpriteFlipMode.None)
        {
            if (textureRegion == null)
            {
                throw new ArgumentNullException(nameof(textureRegion));
            }

            Draw(textureRegion.Texture, destination, textureRegion.Region, color, flipMode);
        }
Exemple #11
0
 public void Draw(TextureRegion textureRegion, Rectangle destination, SpriteFlipMode flipMode = SpriteFlipMode.None)
 {
     Draw(textureRegion, destination, Color.White, flipMode);
 }