Terraria.TileObject.DrawPreview C# (CSharp) Method

DrawPreview() public static method

public static DrawPreview ( SpriteBatch sb, TileObjectPreviewData op, Vector2 position ) : void
sb Microsoft.Xna.Framework.Graphics.SpriteBatch
op Terraria.DataStructures.TileObjectPreviewData
position Vector2
return void
        public static void DrawPreview(SpriteBatch sb, TileObjectPreviewData op, Vector2 position)
        {
            Point16 coordinates = op.Coordinates;
            Texture2D texture = Main.tileTexture[(int)op.Type];
            TileObjectData tileData = TileObjectData.GetTileData((int)op.Type, (int)op.Style, op.Alternate);
            int num1 = tileData.CalculatePlacementStyle((int)op.Style, op.Alternate, op.Random);
            int num2 = 0;
            int drawYoffset = tileData.DrawYOffset;
            if (tileData.StyleWrapLimit > 0)
            {
                num2 = num1 / tileData.StyleWrapLimit;
                num1 %= tileData.StyleWrapLimit;
            }
            int num3;
            int num4;
            if (tileData.StyleHorizontal)
            {
                num3 = tileData.CoordinateFullWidth * num1;
                num4 = tileData.CoordinateFullHeight * num2;
            }
            else
            {
                num3 = tileData.CoordinateFullWidth * num2;
                num4 = tileData.CoordinateFullHeight * num1;
            }
            for (int index1 = 0; index1 < (int)op.Size.X; ++index1)
            {
                int x = num3 + (index1 - (int)op.ObjectStart.X) * (tileData.CoordinateWidth + tileData.CoordinatePadding);
                int y = num4;
                for (int index2 = 0; index2 < (int)op.Size.Y; ++index2)
                {
                    int i = (int)coordinates.X + index1;
                    int num5 = (int)coordinates.Y + index2;
                    if (index2 == 0 && tileData.DrawStepDown != 0 && WorldGen.SolidTile(Framing.GetTileSafely(i, num5 - 1)))
                        drawYoffset += tileData.DrawStepDown;
                    Color color1;
                    switch (op[index1, index2])
                    {
                        case 1:
                            color1 = Color.White;
                            break;
                        case 2:
                            color1 = Color.Red * 0.7f;
                            break;
                        default:
                            goto default;
                    }
                    Color color2 = color1 * 0.5f;
                    if (index1 >= (int)op.ObjectStart.X && index1 < (int)op.ObjectStart.X + tileData.Width && (index2 >= (int)op.ObjectStart.Y && index2 < (int)op.ObjectStart.Y + tileData.Height))
                    {
                        SpriteEffects effects = SpriteEffects.None;
                        if (tileData.DrawFlipHorizontal && index1 % 2 == 1)
                            effects |= SpriteEffects.FlipHorizontally;
                        if (tileData.DrawFlipVertical && index2 % 2 == 1)
                            effects |= SpriteEffects.FlipVertically;
                        Rectangle rectangle = new Rectangle(x, y, tileData.CoordinateWidth, tileData.CoordinateHeights[index2 - (int)op.ObjectStart.Y]);
                        sb.Draw(texture, new Vector2((float)(i * 16 - (int)((double)position.X + (double)(tileData.CoordinateWidth - 16) / 2.0)), (float)(num5 * 16 - (int)position.Y + drawYoffset)), new Rectangle?(rectangle), color2, 0.0f, Vector2.Zero, 1f, effects, 0.0f);
                        y += tileData.CoordinateHeights[index2 - (int)op.ObjectStart.Y] + tileData.CoordinatePadding;
                    }
                }
            }
        }
    }