Unit Index

  • Armas
  • Contiene las armas que pueden ser usadas por las diferentes naves.
    Cambios:
        10/11/00: Se agrega el manejo de excepciones para evitar un BUG en cMisilDirigido. Si el objetivo del misil
                  dirigido es destruido, la velocidad permanece constante y en mGetDebugInfo se informa que esta destruido.
        27/11/00: Se le agrega el manejo de la velocidad maxima a la clase cArma y se agrega el Alcance del arma, cambiando
                  el anterior por la Duracion.
        01/12/00: Se cambiaron las dimensiones de las armas para que los disparos sean mas "jugables".
        
  • Camara
  • Implementa una cámara que se encarga de representar los objetos en 2D.
    Cambios:
        10/11/00: Se agrega el manejo de excepciones para evitar usar la camara cuando el cameraman fue destruido.
                  Para lograr esto se crea una excepcion (ECameramanDestruido) que se lanza cuando hay una excepcion
                  de violacion de acceso a memoria. Esta excepcion debe ser manejada por quien meneje la camara y puede
                  ser lanzada por mGetDebugInfo o mProyectar.
        01/12/00: Se elimina el atributo aApertura porque era absolutamente inecesario.
                  Se cambia la estructura interna para que el filtrado de los objetos los realice un cFiltro.
        07/12/00: Se agregan nuevos métodos (protegidos) para obtener información de la cámara para poder crear subclases,
                  para lo cual tambien se hace virtual el método mProyectar.
        08/12/00: Se quita el método para setear el filtro y se agrega un contructor que admite un filtro para reemplazarlo.
                  Se cambia esta clase para que sea abstracta. Se deja la implementacion del método mProyectar para las
                  subclases exlusivamente ya que ahora es abstracto. La cámara frontal (que antes se implementaba en
                  esta unidad), ahora está implementado la unidad Camaras al igual que el resto.
        
  • Camaras
  • Se implementan varias cámaras en diferentes direcciones.
    Cambios:
        09/12/00: Se agrega la clase cCamaraMapa.
        
  • Coordenadas
  • Implementa un sistema de coordenadas y metodos para rotarlo.
    Cambios:
        28/10/00: Se agregaron métodos para modificar el sistema de coordenadas, asignandole a un versor
                  particular la direccion de un vector arbitrario (mSetI, mSetJ, mSetK).
        
  • Espacio
  • Se encarga de controlar la interacción entre las naves y el responsable de manejar el tiempo.
    Cambios:
        05/10/00: Se corrigió para que utilice los nuevos metodos de cNaveEnemiga y cObjetoVolador
                  Se corrigió el método mComunicarPosicion para que solo se comunique la posicion
                  a las naves que estan en el campo de radar de la nave espia.
        07/10/00: Se agregaron los métodos mDestruir y mActualizarObjetoVolador. Se modificó el
                  método mActualizar (para usar los nuevos) y el método mDetectarColisiones para
                  manejar de forma más eficiente y clara la destrucción de objetos sin energía.
        03/11/00: Se sacan los metodos mIniciay y mParar, ya que el control del tiempo y el encargado
                  de actualizar el espacio sera el Controlador (Controller).
                  Se agregaron métodos para facilitar la manipulación del espacio:
                  mQuitarObjeto, mGetObjetos, mSetObjetos y mSetNavePropia
        05/11/00: Se corrigió un BUG que hacia que siempre el espacio se inicialice con una lista vacia
                  y una nave propia estandar (en el constructor).
        09/11/00: Se corrigió un BUG que hacía que la nave espia no pueda escapar, ya que se avisaba a si misma.
                  Tambien se hace que ignore otras naves espias que esten avisando para evitar problemas similares.
                  (en el método mComunicarPosicion).
        10/11/00: Se reemplaza el método mNavePropiaDestruida por una excepción (ENavePropiaDestruida).
                  Es lanzada por el método mActualizar y otros metodos privados que utilizan la nave propia.
        27/11/00: Se agrega el control de disparos de las naves enemigas en el método mActualizar
        29/11/00: Se elimina el método temporal mActualizarNavePropia.
        01/12/00: Se modifica el método mActualizar para manejar los disparos de la nave propia.
        
  • Filtro
  • Es una clase abstracta que representa filtro que recibe una lista de objetos y devuelve otra filtrada.
    Cambios:
        06/12/00: Se agregan nuevos métodos (protegidos) para obtener información del filtro para poder crear subclases,
                  para lo cual tambien se hace virtual el método mVisible.
        08/12/00: Se cambia esta clase para que sea abstracta. Se deja la implementacion del método mVisible para las
                  subclases exlusivamente ya que ahora es abstracto. El filtro frontal (que antes se implementaba en
                  esta unidad), ahora está implementado la unidad Filtros al igual que el resto.
        
  • Filtros
  • Se implementan varios filtro en diferentes direcciones.
    Cambios:
        09/12/00: Se agrega la clase cFiltroMapa.
        
  • FormConfig
  • Formulario para configurar la aplicación
  • FormMain
  • Formulario principal de la aplicación
    Cambios:
        29/11/00: Se agregan algunos controles gráficos con indicadores de energía y velocidad.
                  No se incluyen en una clase Vista porque son muy pequeños.
        01/12/00: Se modifica levemente la interfaz.
                  Se agregan controles para los disparos y metodos pertinentes.
        06/12/00: Se cambian minimamente los menúes, poniendo la parte del manejo
                  de escenarios en un submenú del menú Archivo.
        08/12/00: Se termina de implementar la funcionalidad de los menúes
                    Archivo -> Abrir ...
                    Archivo -> Guardar ...
                    Archivo -> Escenario -> Abrir ...
                    Archivo -> Escenario -> Guardar ...
                  Se completa el 'destructor', ya que faltaban liberar bastantes
                  objetos.
        
  • Lista
  • Lista exactamente igual a TList, solo que el destructor tambien destruye todos los objetos que contiene
  • Meteorito
  • Representa un objeto volador básico. Tiene una velocidad constante.
    Cambios:
        01/12/00: Se cambiaron las dimensiones por defecto para que los disparos sean mas "jugables".
        
  • Nave
  • Contiene una clase abstracta con elementos comunes a todas las naves.
    Cambios:
        27/11/00: Se agrega toda la parte del manejo de disparos, agregándose los métodos mPuedeDispararLaser,
                  mPuedeDispararMisil, mPuedeDispararMisDir y mDisparar, además de varios atributos para manejar
                  los retardos de las armas. El método mDisparar se hace virtual ya que puede ser modificado por
                  las subclases para que cambie su mecanismo de disparos.
        29/11/00: Se agregan métodos para obtener la cantidad de armamento que le queda a la nave para poder ser
                  mostrados (mGetMisiles y mGetMisilesDirigidos)
        01/12/00: Se modifican levemente los metodos mPuedeDispararXxxx para que permitan disparar si el puntero
                  al Objeto Volador objetivo es nil.
                  Se Agregan los métodos mRetardarLaser, mRetardarMisil, mRetardarMisDir que resetea el contador
                  del retardo, mActualizarRetardos que resta el dT a los retardos, y mCrearLaserDisparado,
                  mCrearMisilDisparado y mCrearMisDirDisparado que crea el arma correspondiente (actualizando
                  retardos y todo lo que sea necesario) para que las subclases puedan escribir su propio mDisparar.
                  Se cambia el orden de los argumentos de mDisparar para aprovechar los argumentos por defecto.
        08/12/00: Se sobreescribieron los métodos para establecer la velocidad y su módulo para evitar que se
                  sobrepase el límite de la velocidad máxima.
        
  • NaveEnemiga
  • La clase cNaveEnemiga esta pensada como una clase abtracta. En ella se encuentran características comunes a todas las naves enemigas.
    Cambios:
        05/10/00: Se cambio el metodo mGetRadar por el metodo mDetectado, que devuelve true
                  si un objeto volador esta destro del campo de radar. De esta manera se logra
                  una abstracción mayor y un manejo mas intuitivo del radar.
        
  • NavePropia
  • Es la nave que será controlada por el jugador.
    Cambios:
        05/10/00: Se corrigió el método mAcelerar porque tenía algunos bugs cuando la velocidad llegaba a cero.
        01/12/00: Se implementan los disparon sobreescribiendo el método mDisparar de cNave y agregando algunos
                  atributos (aArmaSelect, aDisparando y aLockeado) y algunos métodos (mIntentarDisparo,
                  mSeleccionarArma, mSeleccionarArmaSig, mGetArmaSelect, mSetLockeado, mGetLockeado).
                  Se cambiaron las dimensiones de la nave para que los disparos sean mas "jugables".
                  Se cambia el orden de los argumentos de mDisparar para aprovechar los argumentos por defecto.
                  Se arreglaron un par de BUGs con punteros que apuntaba a objetos destruidos (aLockeado).
        08/12/00: Se arregló una falla en el constructor que permitia crear la nave con una velocidad superior
                  a la máxima.
        09/12/00: Se cambia el atributo disparando por un puntero a un arma que se disparara en el proximo turno.
                  También se cambia los métodos que lo utilizan y en particular se convierte el método
                  mIntentarDisparo en una función que devuelve dicho puntero para implementar la cámara en el arma.
        
  • NavesEnemigas
  • Distintos tipos de Naves Enemigas
    Cambios:
        27/11/00: Se realizan algunos cambios para adaptarse a la nueva implementacion de cNave con disparos.
        01/12/00: Se cambiaron las dimensiones de la nave para que los disparos sean mas "jugables".
                  Se cambia el orden de los argumentos de mDisparar para aprovechar los argumentos por defecto.
        
  • Objeto
  • Es una clase abstracta para agregar algunos métodos generales útiles para el resto de las clases que implementemos. Podría considerarse una extensión a la funcionalidad básica dada por TObject.
  • ObjetoPersistente
  • Es una clase abstracta para hacer persistente un objeto. Básicamente provee métodos para serialización.
    NOTA:
          Es importante que el ID del objeto sea el primer atributo en la
          serialización, de otra manera puede ser malinterpretado al des-
          serializarlo.
          El orden del resto de los atributos deben ser respetados también.
          Aunque es bastante probable que fucione si están en otro órden,
          no está 100% asegurado y si se hace en otro orden los resultados
          pueden ser inesperados o pueden surgir errores.
        
  • ObjetoVolador
  • Clase abstracta, implementa todas las funcionalidades básicas de los objetos voladores. De esta van a derivar la mayor parte del resto de las clases.
    Cambios:
        05/10/00: Se agregaron los métodos mGetDistancia y mColisiono. De esta manera se deja
                  a los objetos voladores manejar las colisiones mas intuitivamente.
        30/10/00: Se agregó un atributo aCoordenadas para que se pueda orientar al objeto volador.
        02/11/00: Se agregaron métodos para cambiar solamente el modulo de la velocidad, para cambiar solo
                  la direccion de la velocidad y para extraer directamente copias de los versores i, j, k y
                  para rotar el objeto volador en todas direcciones.
                  Los nuevos métodos son: mSetVelModulo, mSetVelDir, mGetVelModulo,
                                          mGetI, mGetJ, mGetK, mRotarEnI,
                                          mRotarEnJ, mRotarEnK
        07/11/00: Se agrega un nuevo método (mSetPosicion) y se hace a público otro (mSetVelocidad) para
                  que se pueda cambiar la configuración (es temporal, se planea cambiar el sistema de
                  configuración del juego para que esto no sea necesario)
        29/11/00: Se arregla un BUG en mSetVelModulo que no modificaba el modulo si la velocidad pasada
                  como argumento era menor que cero. En este caso el modulo de la velocidad se setea en 0.
        02/12/00: Se cambio el dato que devuelve el método mDibujar. Ahora devuelve un tipo de dato enumerado
                  tObjetosVoladores. Todas sus subclases fueron actualizadas también.
        08/12/00: Se agregan menúes para manejar la nueva vistas con varias camaras. Se agrega la opcion de
                  alta calidad en el menú vista. Se carga un escenario por defecto (si existe) al iniciar el
                  juego, el nombre de dicho escenario debe ser 'comun.eaw'.
                  Se agrega una nueva tecla para cambiar de cámara ('C'), además de las que se provee con las
                  teclas de atajo.
        
  • RegExpr
  • Implementación de expresiones regulares para Delphi
  • SerializacionUtils
  • Funciones útiles para complementar la utilización de la serialización en este modelo en particular
  • Tipos
  • En esta unidad se definen todos los tipos que usaremos en el proyecto Decidimos mantener los tipos por separado por el caso de que sea necesario un cambio de implementacion.
  • Vectores
  • Es la implementación de un vector físico. Esta clase es el esqueleto de la aplicación ya que todas las velocidades y posiciones son del tipo cVector. Todos los calculos de movimientos, distancias, etc. se manejan con los metodos de esta clase
    Cambios:
        05/10/00: Se corrigió el método mAddModulo para que al verificar el signo del modulo resultante,
                  si es negativo, setee el modulo a cero.
        28/10/00: Se cambiaron todos los metodos en los que se realizan operaciones con el vector para
                  que devulvan un puntero a si mismo (para poder hacer asignaciones luego de la operacion).
                  Ahora todos los métodos son funciones
        
  • Vista
  • Interpreta y dibuja los datos del modelo en un formulario
    Cambios:
        10/11/00: Se maneja la excepción para evitar usar la camara cuando el cameraman fue destruido (ECameramanDestruido).
                  Esta es propagada (por ahora) para que el controlador (formulario) frene el timer
        02/12/00: Se mejoran los graficos usando transparencias en los bitmaps y se da la opcion de presentar
                  los graficos con transparencias (alta calidad) o no (a través del atributo aAltaCalidad y
                  los métodos mSetAltaCalidad, mSetBajaCalidad y mCambiarCalidad).
                  Se mejora la performance gracias a la nueva implementación de mDibujar, ya que los
                  bitmas se cargan una sola vez en memoria (en un array aBitmaps) en vez de cargarse
                  y liberarse cada vez que se actualiza la pantalla como sucedía anteriormente.
                  Se implementa el soporte de visualización de un objeto volador lockeado (utilizando
                  otra lista de bitmaps con los gráficos de los objetos lockeados, aBitmapsLockeados).
        08/12/00: Se agregan múltiples cámaras: Derecha, Izquierda, Arriba, Abajo, Atrás, Del Misil. Para hacerlo
                  se agragega un array de camaras y un atributo que indica la camara actual. Tambien se agregan
                  métodos para cambiar la cámara actual, etc.
                  Se arregla el destructor que no liberaba todos los objetos.
        09/12/00: Se reemplaza la vista del misil por una mas general (vista del arma) que permite ver a traves de
                  cualquier arma disparada. Se implementa correctamente esta vista.
                  Se agrega una vista tipo mapa.