-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSpriteBatchExtensions.cs
More file actions
88 lines (79 loc) · 2.52 KB
/
SpriteBatchExtensions.cs
File metadata and controls
88 lines (79 loc) · 2.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using System;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace Doom;
public static class SpriteBatchExtensions
{
private static Texture2D _pixel;
private static void EnsurePixel(SpriteBatch spriteBatch)
{
if (_pixel == null)
{
_pixel = new Texture2D(spriteBatch.GraphicsDevice, 1, 1, false, SurfaceFormat.Color);
_pixel.SetData(new[] {Color.White});
}
}
public static void DrawLine(
this SpriteBatch spriteBatch,
Vector2 start,
Vector2 end,
Color color,
Single thickness,
float layerDepth = 0)
{
EnsurePixel(spriteBatch);
var edge = end - start;
var rotation = MathF.Atan2(edge.Y, edge.X);
var lineScale = new Vector2(edge.Length(), thickness);
spriteBatch.Draw(
_pixel,
start,
null,
color,
rotation,
Vector2.Zero,
lineScale,
SpriteEffects.None,
layerDepth);
}
public static void DrawCircle(
this SpriteBatch spriteBatch,
Vector2 position,
int radius,
Color color)
{
EnsurePixel(spriteBatch);
for (int y = -radius; y <= radius; y++)
for (int x = -radius; x <= radius; x++)
{
if (x * x + y * y <= radius * radius)
{
spriteBatch.Draw(_pixel, position + new Vector2(x, y), color);
}
}
}
public static void DrawRectangle(
this SpriteBatch spriteBatch,
Rectangle rectangle,
Color color)
{
EnsurePixel(spriteBatch);
spriteBatch.Draw(_pixel, rectangle, color);
}
public static void DrawEmptyRectangle(
this SpriteBatch spriteBatch,
Rectangle rectangle,
Color color,
int thickness = 1)
{
EnsurePixel(spriteBatch);
var topLeft = new Vector2(rectangle.X, rectangle.Y);
var topRight = new Vector2(rectangle.X + rectangle.Width, rectangle.Y);
var bottomLeft = new Vector2(rectangle.X, rectangle.Y + rectangle.Height);
var bottomRight = new Vector2(rectangle.X + rectangle.Width, rectangle.Y + rectangle.Height);
spriteBatch.DrawLine(topLeft, topRight, color, thickness);
spriteBatch.DrawLine(topRight, bottomRight, color, thickness);
spriteBatch.DrawLine(bottomRight, bottomLeft, color, thickness);
spriteBatch.DrawLine(bottomLeft, topLeft, color, thickness);
}
}