sábado, 16 de febrero de 2013

PakEngine. Capitulo 4. Pintado con z's y otros temas.


Artículo perteneciente a la sección del PakEngine

Antes que nada , el código de este capítulo lo podéis bajar de aqui

En esta entrega he implementado la gestión de z's, a fin de que se puedan pintar diferentes capas de gráficos.

Lo he implementado "mal" (poco eficiente y poco mantenible) a ver si alguien se apunta a proponer una solución mejor.

Este es el código en cuestión, os lo dejo en vuestras manos:


DLLEXPORT void PAKENGINE_DrawGraf(int x, int y, int z, int id )
{
int i,j;

//Si no se ha insertado ningun gráfico hasta el momento, ponemos el primero
if(!max_draw_list)
{
DrawList[0].type = TYPE_GRAF;
DrawList[0].x = x;
DrawList[0].y = y;
DrawList[0].z = z;
DrawList[0].id = id;
max_draw_list = 1;
return;
}

for ( i = 0 ; i < max_draw_list ; ++i)
{
if(DrawList[i].z <= z)
{
//Desplazamos todos los elementos que van a ir despues
for ( j = i ; j < max_draw_list; ++j )
{
DrawList[j+1].type = DrawList[j].type;
DrawList[j+1].x = DrawList[j].x;
DrawList[j+1].y = DrawList[j].y;
DrawList[j+1].z = DrawList[j].z;              
DrawList[j+1].id = DrawList[j].id;
}

DrawList[i].type = TYPE_GRAF;
DrawList[i].x = x;
DrawList[i].y = y;
DrawList[i].z = z;              
DrawList[i].id = id;

max_draw_list++;

return;
}
}

DrawList[max_draw_list].type = TYPE_GRAF;
DrawList[max_draw_list].x = x;
DrawList[max_draw_list].y = y;
DrawList[max_draw_list].z = z;
DrawList[max_draw_list].id = id;
max_draw_list++;

}


En cuanto a las cosas que quedan por hacer, vamos a repasar la lista (he ido incluyendo nuevos items):

En cuanto a funcionamiento:
- Se debería implementar el sistema de Z's -> YA ESTA HECHO (solo falta mejorarlo)
- Se debería hacer que el 0,0 fuese una esquina de la pantalla, ahora está por el medio.
- Se debería buscar la manera de implementar el audio de manera más amigable que en los otros motores.
- Se debería implementar XML

En cuanto a calidad de código:
- Se debería diseñar un sistema TDD que nos pruebe automáticamente el código. IMPRESCINDIBLE.
- La interficie de trabajo debería ser una clase(singleton): Más que nada por el autocompletar funciones. Podríamos tener un puntero al motor y llamar a sus funciones de clase, de forma que todo quedase un poco más limpio de lo que tenemos ahora. Se aceptan sugerencias.
- Los vectores internos de pintado podrían ser vectors de stl y se podría acceder a los diferentes elementos mediante iterators. Quedaría más limpio el acceso a los datos.
- Se debería hacer un refactor general para purificar el código.

Otros:
- Se debería subir el código a un svn para controlar mejor las versiones

Espero vuestras propuestas para el tema de las z. En breve os iré informando de más avances.

Nos vemos,

LordPakusBlog

<< capitulo anterior                                                                                         siguiente capitulo >>

0 comentarios :

Publicar un comentario

Entradas populares