forked from MonoGame/MonoGame
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDrawableGameComponent.cs
142 lines (127 loc) · 4.83 KB
/
DrawableGameComponent.cs
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
// MonoGame - Copyright (C) MonoGame Foundation, Inc
// This file is subject to the terms and conditions defined in
// file 'LICENSE.txt', which is part of this source code package.
using System;
namespace Microsoft.Xna.Framework
{
/// <summary>
/// A drawable object that, when added to the <see cref="Game.Components">Game.Components</see> collection of a
/// <see cref="Game"/> instance, will have it's <see cref="Draw(GameTime)">Draw(GameTime)</see> method called when
/// <see cref="Game.Draw(GameTime)">Game.Draw(GameTime)</see> is called.
/// </summary>
/// <remarks>
/// This inherits from <see cref="GameComponent"/> so it's <see cref="GameComponent.Update(GameTime)">Update(GameTime)</see>
/// method will also be called when <see cref="Game.Update(GameTime)">Game.Update(GameTime)</see> is called.
/// </remarks>
public class DrawableGameComponent : GameComponent, IDrawable
{
private bool _initialized;
private bool _disposed;
private int _drawOrder;
private bool _visible = true;
/// <summary>
/// Get the <see cref="GraphicsDevice"/> that this <see cref="DrawableGameComponent"/> uses for drawing.
/// </summary>
public Graphics.GraphicsDevice GraphicsDevice
{
get { return this.Game.GraphicsDevice; }
}
/// <summary>
/// Gets the order in which this component should be drawn, relative to other components that are in the
/// same <see cref="GameComponentCollection"/>.
/// </summary>
/// <remarks>
/// This value can be any integer. Components in the <see cref="GameComponentCollection"/> are drawn in
/// ascending order based on their <b>DrawOrder</b>.
/// </remarks>
public int DrawOrder
{
get { return _drawOrder; }
set
{
if (_drawOrder != value)
{
_drawOrder = value;
OnDrawOrderChanged(this, EventArgs.Empty);
}
}
}
/// <summary>
/// Gets or Sets a value that indicates whether the <see cref="Draw(GameTime)"/> method of this component
/// should be called.
/// </summary>
public bool Visible
{
get { return _visible; }
set
{
if (_visible != value)
{
_visible = value;
OnVisibleChanged(this, EventArgs.Empty);
}
}
}
/// <inheritdoc />
public event EventHandler<EventArgs> DrawOrderChanged;
/// <inheritdoc />
public event EventHandler<EventArgs> VisibleChanged;
/// <summary>
/// Create a <see cref="DrawableGameComponent"/>.
/// </summary>
/// <param name="game">The game that this component will belong to.</param>
public DrawableGameComponent(Game game)
: base(game)
{
}
/// <inheritdoc />
public override void Initialize()
{
if (!_initialized)
{
_initialized = true;
LoadContent();
}
}
/// <inheritdoc />
protected override void Dispose(bool disposing)
{
if (!_disposed)
{
_disposed = true;
UnloadContent();
}
}
/// <summary>
/// Load graphical resources needed by this component.
/// </summary>
protected virtual void LoadContent() { }
/// <summary>
/// Unload graphical resources needed by this component.
/// </summary>
protected virtual void UnloadContent () { }
/// <summary>
/// Draw this component.
/// </summary>
/// <param name="gameTime">The time elapsed since the last call to <see cref="Draw"/>.</param>
public virtual void Draw(GameTime gameTime) { }
/// <summary>
/// Called when <see cref="Visible"/> changed.
/// </summary>
/// <param name="sender">This <see cref="DrawableGameComponent"/>.</param>
/// <param name="args">Arguments to the <see cref="VisibleChanged"/> event.</param>
protected virtual void OnVisibleChanged(object sender, EventArgs args)
{
EventHelpers.Raise(sender, VisibleChanged, args);
}
/// <summary>
/// Called when <see cref="DrawOrder"/> changed.
/// </summary>
/// <param name="sender">This <see cref="DrawableGameComponent"/>.</param>
/// <param name="args">Arguments to the <see cref="DrawOrderChanged"/> event.</param>
protected virtual void OnDrawOrderChanged(object sender, EventArgs args)
{
EventHelpers.Raise(sender, DrawOrderChanged, args);
}
}
}