public void DrawTile(Tile tile, Location location, float layerDepth)
        {
            if (tile == null)
            {
                return;
            }

            xTile.Dimensions.Rectangle tileImageBounds = tile.TileSheet.GetTileImageBounds(tile.TileIndex);
            Texture2D tileSheetTexture = GetTexture(tile.TileSheet);

            if (tileSheetTexture == null || tileSheetTexture.IsDisposed)
            {
                return;
            }

            this.m_instructions = tile.GetDrawInstructions();

            this.m_tilePosition.X         = (float)location.X + this.m_instructions.Offset.X;
            this.m_tilePosition.Y         = (float)location.Y + this.m_instructions.Offset.Y;
            this.m_sourceRectangle.X      = tileImageBounds.X;
            this.m_sourceRectangle.Y      = tileImageBounds.Y;
            this.m_sourceRectangle.Width  = tileImageBounds.Width;
            this.m_sourceRectangle.Height = tileImageBounds.Height;

            if (this.m_instructions.Color is TMXColor color)
            {
                this.m_modulationColour = new Color(color.R, color.G, color.B) * this.m_instructions.Opacity;
            }

            this.m_spriteBatchAlpha.Draw(tileSheetTexture, this.m_tilePosition, new Microsoft.Xna.Framework.Rectangle?(this.m_sourceRectangle), this.m_modulationColour, this.m_instructions.Rotation, Vector2.Zero, (float)Layer.zoom, (SpriteEffects)m_instructions.Effect, layerDepth);
        }
Esempio n. 2
0
        public virtual void DrawTile(Tile tile, Location location, float layerDepth)
        {
            if (tile == null)
            {
                return;
            }

            xTile.Dimensions.Rectangle tileImageBounds = tile.TileSheet.GetTileImageBounds(tile.TileIndex);
            Texture2D tileSheetTexture = GetTexture(tile.TileSheet);


            if (tileSheetTexture == null || tileSheetTexture.IsDisposed)
            {
                return;
            }

            this.m_instructions = tile.GetDrawInstructions();

            this.m_tilePosition.X         = (float)location.X + this.m_instructions.Offset.X;
            this.m_tilePosition.Y         = (float)location.Y + this.m_instructions.Offset.Y;
            this.m_sourceRectangle.X      = tileImageBounds.X;
            this.m_sourceRectangle.Y      = tileImageBounds.Y;
            this.m_sourceRectangle.Width  = tileImageBounds.Width;
            this.m_sourceRectangle.Height = tileImageBounds.Height;

            if (this.m_instructions.Color is TMXColor color)
            {
                this.m_modulationColour = new Color(color.R, color.G, color.B, color.A);
            }
            else
            {
                this.m_modulationColour = Color.White;
            }
            var origin = Vector2.Zero;

            if (this.m_instructions.Rotation != 0f)
            {
                if (!adjustOrigin)
                {
                    origin          = new Vector2(tileImageBounds.Width / 2, tileImageBounds.Height / 2);
                    m_tilePosition += new Vector2(tileImageBounds.Width * Game1.pixelZoom / 2, tileImageBounds.Height * Game1.pixelZoom / 2);
                }
                else
                {
                    m_tilePosition += GetOffsetForFlippedTile(tile.GetRotationValue());
                }
            }

            this.m_spriteBatchAlpha.Draw(
                texture: tileSheetTexture,
                destinationRectangle: new Microsoft.Xna.Framework.Rectangle((int)this.m_tilePosition.X, (int)this.m_tilePosition.Y, Game1.tileSize, Game1.tileSize),
                sourceRectangle: new Microsoft.Xna.Framework.Rectangle?(this.m_sourceRectangle), this.m_modulationColour * this.m_instructions.Opacity,
                rotation: this.m_instructions.Rotation,
                origin: origin,
                effects: (SpriteEffects)m_instructions.Effect,
                layerDepth);
        }