Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
MapOverlayDrawContext.cs
Go to the documentation of this file.
4using Terraria.UI;
5
6namespace Terraria.Map;
7
9{
10 public struct DrawResult
11 {
12 public static readonly DrawResult Culled = new DrawResult(isMouseOver: false);
13
14 public readonly bool IsMouseOver;
15
16 public DrawResult(bool isMouseOver)
17 {
18 IsMouseOver = isMouseOver;
19 }
20 }
21
22 private readonly Vector2 _mapPosition;
23
24 private readonly Vector2 _mapOffset;
25
26 private readonly Rectangle? _clippingRect;
27
28 private readonly float _mapScale;
29
30 private readonly float _drawScale;
31
32 public MapOverlayDrawContext(Vector2 mapPosition, Vector2 mapOffset, Rectangle? clippingRect, float mapScale, float drawScale)
33 {
34 _mapPosition = mapPosition;
35 _mapOffset = mapOffset;
36 _clippingRect = clippingRect;
37 _mapScale = mapScale;
38 _drawScale = drawScale;
39 }
40
41 public DrawResult Draw(Texture2D texture, Vector2 position, Alignment alignment)
42 {
43 return Draw(texture, position, new SpriteFrame(1, 1), alignment);
44 }
45
46 public DrawResult Draw(Texture2D texture, Vector2 position, SpriteFrame frame, Alignment alignment)
47 {
48 position = (position - _mapPosition) * _mapScale + _mapOffset;
49 if (_clippingRect.HasValue && !_clippingRect.Value.Contains(position.ToPoint()))
50 {
51 return DrawResult.Culled;
52 }
53 Rectangle sourceRectangle = frame.GetSourceRectangle(texture);
54 Vector2 vector = sourceRectangle.Size() * alignment.OffsetMultiplier;
55 Main.spriteBatch.Draw(texture, position, sourceRectangle, Color.White, 0f, vector, _drawScale, SpriteEffects.None, 0f);
56 position -= vector * _drawScale;
57 return new DrawResult(new Rectangle((int)position.X, (int)position.Y, (int)((float)texture.Width * _drawScale), (int)((float)texture.Height * _drawScale)).Contains(Main.MouseScreen.ToPoint()));
58 }
59
60 public DrawResult Draw(Texture2D texture, Vector2 position, Color color, SpriteFrame frame, float scaleIfNotSelected, float scaleIfSelected, Alignment alignment)
61 {
62 position = (position - _mapPosition) * _mapScale + _mapOffset;
63 if (_clippingRect.HasValue && !_clippingRect.Value.Contains(position.ToPoint()))
64 {
65 return DrawResult.Culled;
66 }
67 Rectangle sourceRectangle = frame.GetSourceRectangle(texture);
68 Vector2 vector = sourceRectangle.Size() * alignment.OffsetMultiplier;
69 Vector2 position2 = position;
70 float num = _drawScale * scaleIfNotSelected;
71 Vector2 vector2 = position - vector * num;
72 bool num2 = new Rectangle((int)vector2.X, (int)vector2.Y, (int)((float)sourceRectangle.Width * num), (int)((float)sourceRectangle.Height * num)).Contains(Main.MouseScreen.ToPoint());
73 float scale = num;
74 if (num2)
75 {
76 scale = _drawScale * scaleIfSelected;
77 }
78 Main.spriteBatch.Draw(texture, position2, sourceRectangle, color, 0f, vector, scale, SpriteEffects.None, 0f);
79 return new DrawResult(num2);
80 }
81}
static SpriteBatch spriteBatch
Definition Main.cs:974
static Vector2 MouseScreen
Definition Main.cs:2773
bool Contains(int x, int y)
Definition Rectangle.cs:92
Rectangle GetSourceRectangle(Texture2D texture)
DrawResult Draw(Texture2D texture, Vector2 position, Alignment alignment)
MapOverlayDrawContext(Vector2 mapPosition, Vector2 mapOffset, Rectangle? clippingRect, float mapScale, float drawScale)
DrawResult Draw(Texture2D texture, Vector2 position, Color color, SpriteFrame frame, float scaleIfNotSelected, float scaleIfSelected, Alignment alignment)
DrawResult Draw(Texture2D texture, Vector2 position, SpriteFrame frame, Alignment alignment)