genbetadev / Genbeta-Dev-Engine

Desarrollo de un Game Engine básico sobre C++ y SFML 2.1
MIT License
63 stars 32 forks source link

Organización del código #57

Closed rickyah closed 10 years ago

rickyah commented 10 years ago

Quería comentar un poco la organización de los ficheros de código en el filesystem, que la veo muy limitada, al parecer es la que usa por defecto Visual Studio.

Para empezar, dividir en dos directorios por headers y fuentes no me parece la mejor opción. Si la más cómoda a la hora de distribuir (copias el compilado, y luego el directorio de headers) pero a mi criterio lo lógico sería agrupaciones que tengan más sentido (después de todo si queremos distribuir los headers podemos hacer un script que los copie a otro directorio)

Por ejemplo, para los dos proyectos, el engine en si y el test, duplicamos la estructura de directorios:

/src/GDE/
/src/test/
/include/GDE
/include/test

Lo que propongo inicialmente es lo siguiente:

/GDE/src/
/GDE/include/

/test/src/
/test/include/

Así cada proyecto tendría sus propios ficheros, y sólo esos.

Incluso iría un paso más allá y organizaría los datos en el proyecto por modulos que tengan sentido juntos, por ejemplo, para el sistema de lob

/GDE/Core/Log/include/log.hpp
/GDE/Core/Log/src/log.cpp

Esto permitiría una navegación más sencilla en el momento en el que las cosas empiecen a crecer, que lo harán. También creo que, de hacerlo, lo mejor es hacerlo ahora que hay pocos ficheros.

adrigm commented 10 years ago

@rickyah Cmake crea bastante bien las soluciones para Visual Studio.

Ok pon la lista así tenemos todos una guía. ;)

rickyah commented 10 years ago

Aquí está el listado de cosas a cambiar

Cambios en directorios

Esto nos permitirá que al generar la librería simplemente tengamos que copiar el folder src/GDE/include y tengamos todos los headers de la librería.

Cambios en ficheros:

Cambios en namespaces:

rickyah commented 10 years ago

Otros cambios importantes respecto a la organización del código:

Log

Los tipos de datos que sólo tienen que ver con el log, están ahora en el header del log, por ejemplo los LogLevel. También hay una función global defaultLogHandler que habría que ver dónde meterlo. Hay una variable global static std::ofstream logFile; definida en App.cpp:8, a ver si podemos quitarla de ahí y meterla como parte de la clase App, al menos no estará en el namespace global.

Recomendaría renombrar la clase Log a Loggerya que al estar metida en el namespace Log, cuando hacemos referencia a ella hay que escribir: GDE::Log::Log Creo que usar GDE::Log::Logger es más descriptivo.

rickyah commented 10 years ago

Ya está el PR en #76

He tenido que hacer un merge con lo último de master por que como hemos tenido unos cuantos PRs que no he podido revisar hacer un rebase era la muerte. Si es necesario hacer un rebase nos juntamos para revisar el código y se hace, pero si lo hago yo por mi cuenta fijo que fastidio algo.

adrigm commented 10 years ago

@rickyah El push request que has solicitado rompe el proyecto tal como está?

rickyah commented 10 years ago

No, no lo rompe, como digo está actualizado desde master. Si es necesario píllate mi rama para probar en tu local.

O puedes pillarte el Pull Request, que son como unas ramas especiales: https://gist.github.com/piscisaureus/3342247

rickyah commented 10 years ago

Cierro entonces este issue