sábado, 23 de febrero de 2013

PakEngine. Capitulo 6. Refactorizando

Artículo perteneciente a la sección del PakEngine

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,

LordPakusBlog

<< capitulo anterior                                                                                     siguiente capitulo >>

0 comentarios :

Publicar un comentario

Entradas populares