-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathManager.cs
More file actions
193 lines (171 loc) · 7.78 KB
/
Manager.cs
File metadata and controls
193 lines (171 loc) · 7.78 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
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// XNA:
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
// TLSA.Engine:
using TLSA.Engine;
using TLSA.Engine.Scene;
using TLSA.Engine.Graphics;
using TLSA.Engine.Graphics.Primitives;
using TLSA.Engine.Input;
using TLSA.Engine.Physics.V1Engine;
using TLSA.Engine.Tools;
using TLSA.Engine.Tools.IO;
using TLSA.Engine.Tools.XML;
namespace TLSA.Engine
{
/// <summary>
/// Punto de acceso global del motor.
/// </summary>
/// <remarks>Desde aqui se accede a la gestion de la mayor parte del motor.</remarks>
public static class Manager
{
private static FPSCounter fps;
/// <summary>
/// Instancia de la clase principal del juego en XNA.
/// </summary>
/// /// <remarks>Esta propiedad se implementa para la comunicacion de los modulos del motor con XNA.</remarks>
public static Game GameInstance { get; internal set; }
/// <summary>
/// Instancia del dispositivo grafico de XNA.
/// </summary>
/// /// <remarks>Esta propiedad se implementa para la comunicacion de los modulos del motor con XNA.</remarks>
public static GraphicsDevice GraphicsDevice { get { return GameInstance.GraphicsDevice; } }
/// <summary>
/// Instancia del administrador de contenidos de XNA:
/// </summary>
/// /// <remarks>Esta propiedad se implementa para la comunicacion de los modulos del motor con XNA.</remarks>
public static ContentManager Content { get { return GameInstance.Content; } }
/// <summary>
/// Instancia del administrador del dispositivo grafico de XNA.
/// </summary>
/// <remarks>Esta propiedad se implementa para la comunicacion de los modulos del motor con XNA.</remarks>
public static GraphicsDeviceManager GraphicsDeviceManager { get; internal set; }
/// <summary>
/// Acceso al motor grafico.
/// </summary>
public static Render Graphics { get; internal set; }
/// <summary>
/// Instancia principal del Stage.
/// </summary>
/// <remarks>Utilice este Stage instanciado como gestor principal de la escena de su juego.</remarks>
public static Stage Scene { get; internal set; }
/// <summary>
/// Instancia principal de la maquina de estados.
/// </summary>
/// <remarks>Utilice esta maquina de estados instanciado como gestor principal de estados de su juego.</remarks>
public static StateMachine GameStates { get; internal set; }
/// <summary>
/// Instancia principal del mapa de input.
/// </summary>
/// <remarks>Esta instancia esta pensada para ser usada en la interaccion de menus y demas interfaces de usuario.</remarks>
public static InputMap UIInput { get; set; }
/// <summary>
/// Instancia principal de la cola de mensaje.
/// </summary>
/// <remarks>Esta instancia esta pensada para ser usada con las entidades de la instancia principal del Stage.</remarks>
public static MessageQueue Messages { get; internal set; }
/// <summary>
/// Instancia generica del motor de fisicas.
/// </summary>
/// <remarks>Esta instancia ofrece un simulador de fisicas preparado para el uso en la instancia principal de Stage.
/// Esta basado en el V1Engine.</remarks>
public static World PhysicEngine { get; internal set; }
/// <summary>
/// Lista global de variables.
/// </summary>
/// <remarks>Utilice esta lista para definir variables que pueden usarse desde cualquier entidad o seccion del juego.</remarks>
public static VarList Vars { get; internal set; }
/// <summary>
/// Devuelve el numero de fotogramas por segundo que ha tardado el completarse el ciclo de la escena en actualizarse y dibujarse.
/// </summary>
public static int FPS { get { return fps.GetFPS(); } }
/// <summary>
/// Permite acceder a los perfiles de usuario que hayan iniciado sesion y gestionar varias funcionalidades del componente de servicios de jugador de XNA.
/// </summary>
public static TLSA.Engine.Tools.GamerServices.Sessions GamerServices { get; internal set; }
/// <summary>
/// Instancia global de la variable de tiempo de juego de XNA:
/// </summary>
public static GameTime GameTime { get; internal set; }
/// <summary>
/// Inicializa TLSA.Engine.
/// </summary>
/// <param name="gameInstance">Instancia de la clase principal del juego en XNA.</param>
/// <param name="graphicsInstance">Instancia del administrador del dispositivo grafico de XNA.</param>
public static void Initialize(Game gameInstance, GraphicsDeviceManager graphicsInstance)
{
fps = new FPSCounter();
GameInstance = gameInstance;
GamerServices = new Tools.GamerServices.Sessions();
GraphicsDeviceManager = graphicsInstance;
Graphics = new Render();
Scene = new Stage();
GameStates = new StateMachine();
UIInput = new InputMap(PlayerIndex.One, InputType.KeyboardMouse);
Messages = new MessageQueue(Scene);
PhysicEngine = new World(Vector2.Zero, Graphics.ScreenBounds);
Vars = new VarList();
GameTime = new GameTime();
}
/// <summary>
/// Termina TLSA.Engine.
/// </summary>
/// <remarks>Libera todos las instancias del motor y termina la ejecucion del juego.</remarks>
public static void Terminate()
{
Scene.Dispose();
GameStates.Dispose();
PhysicEngine.Dispose();
GameInstance.Exit();
UnloadContent();
}
/// <summary>
/// Descarga todos los recursos cargados en el content por el motor:
/// </summary>
public static void UnloadContent()
{
Content.Unload();
Graphics.Textures.Clear();
Graphics.Fonts.Clear();
}
/// <summary>
/// Actualiza los estados del motor.
/// </summary>
/// <param name="gameTime"></param>
/// <remarks>Actualiza los estados del mapa de input de la interfaz de usuario, el estado actual del juego y el contenido del grafo de escena.</remarks>
public static void Update(GameTime gameTime)
{
GameTime = gameTime;
UIInput.Update(gameTime); // Actualizamos el input.
GameStates.Update(gameTime); // Actualizamos los estados.
Messages.Process(); // Procesamos la cola de mensajes.
PhysicEngine.Update(gameTime); // Actualizamos las fisicas, si estan activas.
Scene.Update(gameTime); // Actualizamos las entidades de la escena.
}
/// <summary>
/// Dibuja la escena actual.
/// </summary>
/// <param name="gameTime">Gestiona el dibujado del render grafico, el estado actual del juego y el contenido del grafo de escena.</param>
public static void Draw(GameTime gameTime)
{
GameTime = gameTime;
Graphics.Begin();
{
GameStates.Draw(gameTime);
Scene.Draw(gameTime);
PhysicEngine.Draw(gameTime);
}
Graphics.End();
fps.Update(gameTime); // Actualizamos la cuenta de fotogramas por segundo al finalizar las operaciones de dibujado.
}
}
}