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); }
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); }