4 <dt><li><A HREF=Armas.html>Armas</A></dt>
\r
5 <dd>Contiene las armas que pueden ser usadas por las diferentes naves.<br>
\r
8 10/11/00: Se agrega el manejo de excepciones para evitar un BUG en cMisilDirigido. Si el objetivo del misil
\r
9 dirigido es destruido, la velocidad permanece constante y en mGetDebugInfo se informa que esta destruido.
\r
10 27/11/00: Se le agrega el manejo de la velocidad maxima a la clase cArma y se agrega el Alcance del arma, cambiando
\r
11 el anterior por la Duracion.
\r
12 01/12/00: Se cambiaron las dimensiones de las armas para que los disparos sean mas "jugables".
\r
14 <dt><li><A HREF=Camara.html>Camara</A></dt>
\r
15 <dd>Implementa una cámara que se encarga de representar los objetos en 2D.<br>
\r
18 10/11/00: Se agrega el manejo de excepciones para evitar usar la camara cuando el cameraman fue destruido.
\r
19 Para lograr esto se crea una excepcion (ECameramanDestruido) que se lanza cuando hay una excepcion
\r
20 de violacion de acceso a memoria. Esta excepcion debe ser manejada por quien meneje la camara y puede
\r
21 ser lanzada por mGetDebugInfo o mProyectar.
\r
22 01/12/00: Se elimina el atributo aApertura porque era absolutamente inecesario.
\r
23 Se cambia la estructura interna para que el filtrado de los objetos los realice un cFiltro.
\r
24 07/12/00: Se agregan nuevos métodos (protegidos) para obtener información de la cámara para poder crear subclases,
\r
25 para lo cual tambien se hace virtual el método mProyectar.
\r
26 08/12/00: Se quita el método para setear el filtro y se agrega un contructor que admite un filtro para reemplazarlo.
\r
27 Se cambia esta clase para que sea abstracta. Se deja la implementacion del método mProyectar para las
\r
28 subclases exlusivamente ya que ahora es abstracto. La cámara frontal (que antes se implementaba en
\r
29 esta unidad), ahora está implementado la unidad Camaras al igual que el resto.
\r
31 <dt><li><A HREF=Camaras.html>Camaras</A></dt>
\r
32 <dd>Se implementan varias cámaras en diferentes direcciones.<br>
\r
35 09/12/00: Se agrega la clase cCamaraMapa.
\r
37 <dt><li><A HREF=Coordenadas.html>Coordenadas</A></dt>
\r
38 <dd>Implementa un sistema de coordenadas y metodos para rotarlo.<br>
\r
41 28/10/00: Se agregaron métodos para modificar el sistema de coordenadas, asignandole a un versor
\r
42 particular la direccion de un vector arbitrario (mSetI, mSetJ, mSetK).
\r
44 <dt><li><A HREF=Espacio.html>Espacio</A></dt>
\r
45 <dd>Se encarga de controlar la interacción entre
\r
46 las naves y el responsable de manejar el tiempo.<br>
\r
49 05/10/00: Se corrigió para que utilice los nuevos metodos de cNaveEnemiga y cObjetoVolador
\r
50 Se corrigió el método mComunicarPosicion para que solo se comunique la posicion
\r
51 a las naves que estan en el campo de radar de la nave espia.
\r
52 07/10/00: Se agregaron los métodos mDestruir y mActualizarObjetoVolador. Se modificó el
\r
53 método mActualizar (para usar los nuevos) y el método mDetectarColisiones para
\r
54 manejar de forma más eficiente y clara la destrucción de objetos sin energía.
\r
55 03/11/00: Se sacan los metodos mIniciay y mParar, ya que el control del tiempo y el encargado
\r
56 de actualizar el espacio sera el Controlador (Controller).
\r
57 Se agregaron métodos para facilitar la manipulación del espacio:
\r
58 mQuitarObjeto, mGetObjetos, mSetObjetos y mSetNavePropia
\r
59 05/11/00: Se corrigió un BUG que hacia que siempre el espacio se inicialice con una lista vacia
\r
60 y una nave propia estandar (en el constructor).
\r
61 09/11/00: Se corrigió un BUG que hacía que la nave espia no pueda escapar, ya que se avisaba a si misma.
\r
62 Tambien se hace que ignore otras naves espias que esten avisando para evitar problemas similares.
\r
63 (en el método mComunicarPosicion).
\r
64 10/11/00: Se reemplaza el método mNavePropiaDestruida por una excepción (ENavePropiaDestruida).
\r
65 Es lanzada por el método mActualizar y otros metodos privados que utilizan la nave propia.
\r
66 27/11/00: Se agrega el control de disparos de las naves enemigas en el método mActualizar
\r
67 29/11/00: Se elimina el método temporal mActualizarNavePropia.
\r
68 01/12/00: Se modifica el método mActualizar para manejar los disparos de la nave propia.
\r
70 <dt><li><A HREF=Filtro.html>Filtro</A></dt>
\r
71 <dd>Es una clase abstracta que representa filtro que recibe una lista de objetos y devuelve otra filtrada.<br>
\r
74 06/12/00: Se agregan nuevos métodos (protegidos) para obtener información del filtro para poder crear subclases,
\r
75 para lo cual tambien se hace virtual el método mVisible.
\r
76 08/12/00: Se cambia esta clase para que sea abstracta. Se deja la implementacion del método mVisible para las
\r
77 subclases exlusivamente ya que ahora es abstracto. El filtro frontal (que antes se implementaba en
\r
78 esta unidad), ahora está implementado la unidad Filtros al igual que el resto.
\r
80 <dt><li><A HREF=Filtros.html>Filtros</A></dt>
\r
81 <dd>Se implementan varios filtro en diferentes direcciones.<br>
\r
84 09/12/00: Se agrega la clase cFiltroMapa.
\r
86 <dt><li><A HREF=FormConfig.html>FormConfig</A></dt>
\r
87 <dd>Formulario para configurar la aplicación</dd>
\r
88 <dt><li><A HREF=FormMain.html>FormMain</A></dt>
\r
89 <dd>Formulario principal de la aplicación<br>
\r
92 29/11/00: Se agregan algunos controles gráficos con indicadores de energía y velocidad.
\r
93 No se incluyen en una clase Vista porque son muy pequeños.
\r
94 01/12/00: Se modifica levemente la interfaz.
\r
95 Se agregan controles para los disparos y metodos pertinentes.
\r
96 06/12/00: Se cambian minimamente los menúes, poniendo la parte del manejo
\r
97 de escenarios en un submenú del menú Archivo.
\r
98 08/12/00: Se termina de implementar la funcionalidad de los menúes
\r
99 Archivo -> Abrir ...
\r
100 Archivo -> Guardar ...
\r
101 Archivo -> Escenario -> Abrir ...
\r
102 Archivo -> Escenario -> Guardar ...
\r
103 Se completa el 'destructor', ya que faltaban liberar bastantes
\r
106 <dt><li><A HREF=Lista.html>Lista</A></dt>
\r
107 <dd>Lista exactamente igual a TList, solo que el destructor tambien destruye
\r
108 todos los objetos que contiene</dd>
\r
109 <dt><li><A HREF=Meteorito.html>Meteorito</A></dt>
\r
110 <dd>Representa un objeto volador básico. Tiene una velocidad constante.<br>
\r
113 01/12/00: Se cambiaron las dimensiones por defecto para que los disparos sean mas "jugables".
\r
115 <dt><li><A HREF=Nave.html>Nave</A></dt>
\r
116 <dd>Contiene una clase abstracta con elementos comunes a todas las naves.<br>
\r
119 27/11/00: Se agrega toda la parte del manejo de disparos, agregándose los métodos mPuedeDispararLaser,
\r
120 mPuedeDispararMisil, mPuedeDispararMisDir y mDisparar, además de varios atributos para manejar
\r
121 los retardos de las armas. El método mDisparar se hace virtual ya que puede ser modificado por
\r
122 las subclases para que cambie su mecanismo de disparos.
\r
123 29/11/00: Se agregan métodos para obtener la cantidad de armamento que le queda a la nave para poder ser
\r
124 mostrados (mGetMisiles y mGetMisilesDirigidos)
\r
125 01/12/00: Se modifican levemente los metodos mPuedeDispararXxxx para que permitan disparar si el puntero
\r
126 al Objeto Volador objetivo es nil.
\r
127 Se Agregan los métodos mRetardarLaser, mRetardarMisil, mRetardarMisDir que resetea el contador
\r
128 del retardo, mActualizarRetardos que resta el dT a los retardos, y mCrearLaserDisparado,
\r
129 mCrearMisilDisparado y mCrearMisDirDisparado que crea el arma correspondiente (actualizando
\r
130 retardos y todo lo que sea necesario) para que las subclases puedan escribir su propio mDisparar.
\r
131 Se cambia el orden de los argumentos de mDisparar para aprovechar los argumentos por defecto.
\r
132 08/12/00: Se sobreescribieron los métodos para establecer la velocidad y su módulo para evitar que se
\r
133 sobrepase el límite de la velocidad máxima.
\r
135 <dt><li><A HREF=NaveEnemiga.html>NaveEnemiga</A></dt>
\r
136 <dd>La clase cNaveEnemiga esta pensada como una clase abtracta. En ella se encuentran
\r
137 características comunes a todas las naves enemigas.<br>
\r
140 05/10/00: Se cambio el metodo mGetRadar por el metodo mDetectado, que devuelve true
\r
141 si un objeto volador esta destro del campo de radar. De esta manera se logra
\r
142 una abstracción mayor y un manejo mas intuitivo del radar.
\r
144 <dt><li><A HREF=NavePropia.html>NavePropia</A></dt>
\r
145 <dd>Es la nave que será controlada por el jugador.<br>
\r
148 05/10/00: Se corrigió el método mAcelerar porque tenía algunos bugs cuando la velocidad llegaba a cero.
\r
149 01/12/00: Se implementan los disparon sobreescribiendo el método mDisparar de cNave y agregando algunos
\r
150 atributos (aArmaSelect, aDisparando y aLockeado) y algunos métodos (mIntentarDisparo,
\r
151 mSeleccionarArma, mSeleccionarArmaSig, mGetArmaSelect, mSetLockeado, mGetLockeado).
\r
152 Se cambiaron las dimensiones de la nave para que los disparos sean mas "jugables".
\r
153 Se cambia el orden de los argumentos de mDisparar para aprovechar los argumentos por defecto.
\r
154 Se arreglaron un par de BUGs con punteros que apuntaba a objetos destruidos (aLockeado).
\r
155 08/12/00: Se arregló una falla en el constructor que permitia crear la nave con una velocidad superior
\r
157 09/12/00: Se cambia el atributo disparando por un puntero a un arma que se disparara en el proximo turno.
\r
158 También se cambia los métodos que lo utilizan y en particular se convierte el método
\r
159 mIntentarDisparo en una función que devuelve dicho puntero para implementar la cámara en el arma.
\r
161 <dt><li><A HREF=NavesEnemigas.html>NavesEnemigas</A></dt>
\r
162 <dd>Distintos tipos de Naves Enemigas<br>
\r
165 27/11/00: Se realizan algunos cambios para adaptarse a la nueva implementacion de cNave con disparos.
\r
166 01/12/00: Se cambiaron las dimensiones de la nave para que los disparos sean mas "jugables".
\r
167 Se cambia el orden de los argumentos de mDisparar para aprovechar los argumentos por defecto.
\r
169 <dt><li><A HREF=Objeto.html>Objeto</A></dt>
\r
170 <dd>Es una clase abstracta para agregar algunos métodos generales útiles
\r
171 para el resto de las clases que implementemos. Podría considerarse una
\r
172 extensión a la funcionalidad básica dada por TObject.</dd>
\r
173 <dt><li><A HREF=ObjetoPersistente.html>ObjetoPersistente</A></dt>
\r
174 <dd>Es una clase abstracta para hacer persistente un objeto.
\r
175 Básicamente provee métodos para serialización.<br>
\r
178 Es importante que el ID del objeto sea el primer atributo en la
\r
179 serialización, de otra manera puede ser malinterpretado al des-
\r
181 El orden del resto de los atributos deben ser respetados también.
\r
182 Aunque es bastante probable que fucione si están en otro órden,
\r
183 no está 100% asegurado y si se hace en otro orden los resultados
\r
184 pueden ser inesperados o pueden surgir errores.
\r
186 <dt><li><A HREF=ObjetoVolador.html>ObjetoVolador</A></dt>
\r
187 <dd>Clase abstracta, implementa todas las funcionalidades básicas de los objetos voladores.
\r
188 De esta van a derivar la mayor parte del resto de las clases.<br>
\r
191 05/10/00: Se agregaron los métodos mGetDistancia y mColisiono. De esta manera se deja
\r
192 a los objetos voladores manejar las colisiones mas intuitivamente.
\r
193 30/10/00: Se agregó un atributo <b>aCoordenadas</b> para que se pueda orientar al objeto volador.
\r
194 02/11/00: Se agregaron métodos para cambiar solamente el modulo de la velocidad, para cambiar solo
\r
195 la direccion de la velocidad y para extraer directamente copias de los versores i, j, k y
\r
196 para rotar el objeto volador en todas direcciones.
\r
197 Los nuevos métodos son: mSetVelModulo, mSetVelDir, mGetVelModulo,
\r
198 mGetI, mGetJ, mGetK, mRotarEnI,
\r
199 mRotarEnJ, mRotarEnK
\r
200 07/11/00: Se agrega un nuevo método (mSetPosicion) y se hace a público otro (mSetVelocidad) para
\r
201 que se pueda cambiar la configuración (es temporal, se planea cambiar el sistema de
\r
202 configuración del juego para que esto no sea necesario)
\r
203 29/11/00: Se arregla un BUG en mSetVelModulo que no modificaba el modulo si la velocidad pasada
\r
204 como argumento era menor que cero. En este caso el modulo de la velocidad se setea en 0.
\r
205 02/12/00: Se cambio el dato que devuelve el método mDibujar. Ahora devuelve un tipo de dato enumerado
\r
206 tObjetosVoladores. Todas sus subclases fueron actualizadas también.
\r
207 08/12/00: Se agregan menúes para manejar la nueva vistas con varias camaras. Se agrega la opcion de
\r
208 alta calidad en el menú vista. Se carga un escenario por defecto (si existe) al iniciar el
\r
209 juego, el nombre de dicho escenario debe ser 'comun.eaw'.
\r
210 Se agrega una nueva tecla para cambiar de cámara ('C'), además de las que se provee con las
\r
213 <dt><li><A HREF=RegExpr.html>RegExpr</A></dt>
\r
214 <dd>Implementación de expresiones regulares para Delphi</dd>
\r
215 <dt><li><A HREF=SerializacionUtils.html>SerializacionUtils</A></dt>
\r
216 <dd>Funciones útiles para complementar la utilización de la serialización en
\r
217 este modelo en particular</dd>
\r
218 <dt><li><A HREF=Tipos.html>Tipos</A></dt>
\r
219 <dd>En esta unidad se definen todos los tipos que usaremos en el proyecto
\r
220 Decidimos mantener los tipos por separado por el caso de que sea
\r
221 necesario un cambio de implementacion.</dd>
\r
222 <dt><li><A HREF=Vectores.html>Vectores</A></dt>
\r
223 <dd>Es la implementación de un vector físico. Esta clase es el esqueleto de
\r
224 la aplicación ya que todas las velocidades y posiciones son del tipo cVector.
\r
225 Todos los calculos de movimientos, distancias, etc. se manejan con los metodos de esta clase<br>
\r
228 05/10/00: Se corrigió el método mAddModulo para que al verificar el signo del modulo resultante,
\r
229 si es negativo, setee el modulo a cero.
\r
230 28/10/00: Se cambiaron todos los metodos en los que se realizan operaciones con el vector para
\r
231 que devulvan un puntero a si mismo (para poder hacer asignaciones luego de la operacion).
\r
232 Ahora todos los métodos son funciones
\r
234 <dt><li><A HREF=Vista.html>Vista</A></dt>
\r
235 <dd>Interpreta y dibuja los datos del modelo en un formulario<br>
\r
238 10/11/00: Se maneja la excepción para evitar usar la camara cuando el cameraman fue destruido (ECameramanDestruido).
\r
239 Esta es propagada (por ahora) para que el controlador (formulario) frene el timer
\r
240 02/12/00: Se mejoran los graficos usando transparencias en los bitmaps y se da la opcion de presentar
\r
241 los graficos con transparencias (alta calidad) o no (a través del atributo aAltaCalidad y
\r
242 los métodos mSetAltaCalidad, mSetBajaCalidad y mCambiarCalidad).
\r
243 Se mejora la performance gracias a la nueva implementación de mDibujar, ya que los
\r
244 bitmas se cargan una sola vez en memoria (en un array aBitmaps) en vez de cargarse
\r
245 y liberarse cada vez que se actualiza la pantalla como sucedía anteriormente.
\r
246 Se implementa el soporte de visualización de un objeto volador lockeado (utilizando
\r
247 otra lista de bitmaps con los gráficos de los objetos lockeados, aBitmapsLockeados).
\r
248 08/12/00: Se agregan múltiples cámaras: Derecha, Izquierda, Arriba, Abajo, Atrás, Del Misil. Para hacerlo
\r
249 se agragega un array de camaras y un atributo que indica la camara actual. Tambien se agregan
\r
250 métodos para cambiar la cámara actual, etc.
\r
251 Se arregla el destructor que no liberaba todos los objetos.
\r
252 09/12/00: Se reemplaza la vista del misil por una mas general (vista del arma) que permite ver a traves de
\r
253 cualquier arma disparada. Se implementa correctamente esta vista.
\r
254 Se agrega una vista tipo mapa.
\r