EntityEngine es un prototipo ligero de motor 2D escrito en C++ que utiliza SDL3 para gestionar la ventana y la entrada. Incluye utilidades básicas de tiempo y logging para facilitar el desarrollo de pequeños juegos o demos técnicas.
- Bucle principal listo para usar mediante
EntityEngine::Application, responsable de inicializar SDL, crear la ventana y despachar eventos. - Gestión de entrada con la clase estática
Input, que expone el estado de teclado y ratón. - Utilidades de tiempo (
Time) para medir delta time, FPS y tiempo total desde el arranque de la aplicación. - Sistema de logging sencillo con niveles de severidad configurables.
- Renderizado 2D a través de una interfaz
IRenderer2Dy una implementación de referencia basada en SDL.
engine/contiene el motor como biblioteca:include/headers públicos organizados por módulo (Core,Render,Platform).src/implementación de cada módulo.
game/ejecutable de ejemplo que consume el motor.external/dependencias externas (si aplica).CMakeLists.txtarchivos de configuración de CMake para compilar la biblioteca y el juego.
- Compilador C++17 o superior.
- CMake 3.16+ para la configuración del proyecto.
- Cabeceras y librerías de desarrollo de SDL3 disponibles en el sistema.
- Crear el directorio de compilación:
cmake -S . -B build - Generar los binarios:
cmake --build build
Esto produce la biblioteca del motor y el ejecutable de ejemplo en build/.
Después de compilar, ejecuta el ejemplo desde la raíz del proyecto:
./build/game/gameSi SDL no encuentra los backends de vídeo del sistema, revisa la instalación de
las dependencias (drivers, paquetes de desarrollo o variables de entorno como
SDL_VIDEODRIVER).
- Incluye
engine/include/Core/Application.hy crea una instancia deEntityEngine::Applicationcon el título y dimensiones deseadas. - Llama a
Run()para entrar en el bucle principal. - Consulta
Input::IsKeyPressedoInput::IsMouseButtonPressedpara reaccionar a la entrada del usuario, yInput::GetMouseX/GetMouseYpara la posición del cursor. - Utiliza
Time::GetDeltaTime()para que tu lógica sea independiente de la velocidad de fotogramas yTime::GetFPS()para mostrar diagnósticos. - Ajusta el nivel mínimo de logs con
Log::SetLevely emite mensajes usando las macrosEE_LOG_*.
- La interfaz
IRenderer2Dpermite añadir nuevos backends (por ejemplo, OpenGL o Vulkan) implementandoBeginFrame,ClearyEndFrame. WindowexponeGetNativeWindow()yGetRenderer()para integrar otras APIs de renderizado o librerías de UI.Application::OnUpdatees el punto pensado para conectar sistemas de escena, entidades y lógica específica del juego.
Las contribuciones son bienvenidas. Si encuentras problemas o tienes sugerencias para nuevas características, abre un issue o envía un pull request describiendo los cambios propuestos.