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
InputCodes,InputeInputMap: códigos propios del motor, estado de teclado/ratón y actions configurables. - 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::IsKeyHeld,Input::IsKeyJustPressedoInput::IsKeyJustReleasedconKeyCode. Para ratón usaMouseButtonconInput::IsMouseButtonHeldy sus variantesJustPressed/JustReleased. -
Usa
InputMappara crear acciones configurables:inputMap.Bind("Jump", EntityEngine::KeyCode::Space); inputMap.Bind("Attack", EntityEngine::MouseButton::Left);
-
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.