Razón Artificial

La ciencia y el arte de crear videojuegos

[BGE] Espacio de nombre, tipos y cabeceras

Escrito por adrigm el 26 de septiembre de 2011 en Programación | 0 Comentarios.

Antes de entrar en materia con las clases del sistema base surgen algunas cosas que hacer y decir, recordemos nuestra distribución del directorio src.

|- src/
   |- BGE/
      |- BGE.h
      |- types.h
      |- app.h
      |- app.cpp
      |- scene.h
      |- scene.cpp
      |- ...
   |- main.cpp
   |- scene_start.h
   |- scene_start.cpp
   |- ...

Es decir, metemos los ficheros del engine propiamente dichos dentro de la carpeta src/BGE y los archivos de prueba que usamos para ir probando nuestro engine quedan en la carpeta src/.

Esta es la estructura que tendría un juego que use el engine, simplemente añadir la carpeta con los archivos del engine y utilizarlos. Más adelante veremos como convertirlo en bibliotecas para que el Engine no se esté compilando cada vez.

Espacio de nombre BGE

He decidido que toda las clases del engine se encuentren dentro del namespace BGE, la razón de esto es que vamos a trabajar con bibliotecas de desarrollo de videojuegos y estamos haciendo un engine para hacer juegos esto hace que sea muy probable tener nombres iguales en diferentes bibliotecas, por ejemplo, en SFML hay una clase llamada Clock y el engine también tendrá una clase llamada Clock y probablemente cuando se haga un juego con el engine el programador quiera tener su propia clase Clock. Con los espacios de nombre solucionamos el problema de saber a que clase nos estamos refiriendo.

El archivo de encabezado

Basándome en SFML he decidido hacer un archivo de encabezado genérico por módulo, es decir un header que incluya lo necesario para hacer funcionar cada parte del engine. esto sería el ejemplo de como estaría actualmente.

#ifndef BGE_H
#define BGE_H

#include "types.h"

#include "app.h"
#include "scene.h"

#include "clock.h"

#endif // BGE_H

Como vemos incluye las clases de las que hemos hablado y que son básicas para hacer funcionar el engine. No os preocupéis se que aún no hemos entrado en materia con ninguna, en próximos artículos lo haremos.

Tipos propios del engine

En el código anterior verás un archivo del que no hemos hablado el types.h. Este archivo contendrán los tipos específicos creados para el engine. He declarado algunos básicos.

/**
 * Definición de tipos del espacio de nombre BGE
 *
 * @file types.h
 * @author Adrián Guerra Marrero
 * @date 20110422 - Initial Release
 */

#ifndef TYPES_H
#define TYPES_H

#include <string>

namespace BGE
{
	
// Tipo de dato que representa el ID de una Escena
typedef std::string SceneID;

/// Status Enumeration for Status Return values
enum StatusType
{
	// Values from -99 to 99 are common Error and Good status responses
	StatusAppMissingAsset = -4, ///< Application failed due to missing asset file
	StatusAppStackEmpty   = -3,  ///< Application States stack is empty
	StatusAppInitFailed   = -2,  ///< Application initialization failed
	StatusError           = -1,  ///< General error status response
	StatusAppOK           =  0,  ///< Application quit without error
	StatusNoError         =  0,  ///< General no error status response
	StatusFalse           =  0,  ///< False status response
	StatusTrue            =  1,  ///< True status response
	StatusOK              =  1   ///< OK status response

	// Values from +-100 to +-199 are reserved for File status responses
};

// Forwards Declarations
class App;
class SceneManager;
class Scene;

} // Namespace BGE

#endif // TYPES_H

En primer lugar he declarado el tipo SceneID que no es más que una string que se usará para identificar las escenas, ya lo veremos mejor cuando expliquemos la clase Scene.

Luego tenemos un enumerado con una lista de estados del proyecto, por ahora solo hay definidos algunos básicos. Esto se usa para el return de la aplicación y evitar los números mágicos.

por último tenemos los Fowards Declarations, si no sabes lo que son puedes mirar este artículo en concreto es el problema 2, pero recomiendo leer todo el artículo.

Deja un comentario