Hola a todos,
En el capítulo anterior nos centramos en implementar TDD, así pues, lo lógico es que el capítulo de hoy se aproveche de TDD para refactorizar todo el código.
Si recordáis todo el código del motor estaba en un fichero (PakEngine.c); la gracia ahora está que con la única premisa de eliminar duplicaciones, todo ese código se puede ir modularizando y exportando a otros ficheros.
Concretamente el diseño que me ha surgido es este :
PakEngine
|-> Render: Módulo que tiene las funcionalidades de pintado.
|-> RenderList : Módulo que tiene la funcionalidad de almacenar tareas de pintado.
|-> SpriteList : Módulo que se encarga de almacenar recursos gráficos.
Si os queréis bajar el código lo podéis hacer desde aquí
Para los incredulos, aquí teneis el código del PakEngine.cpp:
#include <stdlib.h>
#include <GL/glfw.h>
#include "PakEngine.h"
#include "RenderList.h"
#include "Render.h"
#include "SpriteList.h"
#include <iostream> //Usada para imprimir por consola
using namespace std;
#pragma comment(lib, "corona.lib")
//Funciones de pintado
DLLEXPORT void PAKENGINE_DrawGraf(int x, int y, int z, int id )
{
RENDERLIST_Insert(x,y,z,id);
}
//Inicialización, renderizado y deInit
DLLEXPORT void PAKENGINE_Init(char *cad,int w,int h)
{
if (glfwInit() != GL_TRUE)
exit(0);
// 800 x 600, 16 bit color, no depth, alpha or stencil buffers, windowed
if (glfwOpenWindow(w, h, 8, 8, 8, 0, 0, 0, GLFW_WINDOW) != GL_TRUE)
exit(0);
glfwSetWindowTitle(cad);
// set the projection matrix to a normal frustum with a max depth of 50
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(.5 * w, -.5 * w, -.5 * h, .5 * h, 1, 50);
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity(); // Reset The Modelview Matrix
glEnable(GL_TEXTURE_2D); // Enable Texture Mapping ( NEW )
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background
}
//Nos devuelve si el loop de juego ha de seguir o no
DLLEXPORT int PAKENGINE_Render(void)
{
// escape to quit, arrow keys to rotate view
if (glfwGetKey(GLFW_KEY_ESC) == GLFW_PRESS)
return 0;
// Limpiamos la pantalla para preparala para el siguiente pintado
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0,0, -30);
//Renderizamos la escena.
RENDER_Run();
// swap back and front buffers
glfwSwapBuffers();
return 1;
}
DLLEXPORT void PAKENGINE_DeInit(void)
{
glfwTerminate();
exit(0);
}
DLLEXPORT int PAKENGINE_LoadGraph(char cad[])
{
return SPRITELIST_Insert(cad);
}
Que hemos conseguido con TDD??? Un código modular, simple y mantenible y sobretodo, seguro. Si en el futuro queremos mejorar el rendimiento del motor nos será muy fácil ya que tendremos la protección de TDD por si nos equivocamos.
Resumiendo, un proyecto en el que se disfruta trabajar.
Espero que os haya gustado.
Nos vemos,

<< capitulo anterior siguiente capitulo >>
0 comentarios :
Publicar un comentario