#include #include "Engine.h" #include "Game.h" #include "input/Controller.h" #include "rendering/Shader.h" #include "rendering/Window.h" static Window window; static Shader shader; static bool parseArgs(int argAmount, char* const* args, WindowOptions& options) { while(true) { switch(getopt(argAmount, args, "fv")) { case '?': return true; case 'f': options.fullscreen = true; break; case 'v': options.vsync = true; break; case -1: return false; } } } bool Engine::init(int argAmount, char* const* args) { WindowOptions options(3, 0, {800, 480}, true, "Pigine"); if(parseArgs(argAmount, args, options)) { return true; } Error error = window.open(options); if(error.has()) { error.message.printLine(); return true; } error = shader.compile("resources/shader/vertex.vs", "resources/shader/fragment.fs"); if(error.has()) { error.message.printLine(); return true; } Controller::init(window.buttons); return false; } struct Loop { Renderer renderer{shader}; void tick() { Game::tick(); } void render(float lag) { GL::clear(); const Size& size = window.getSize(); GL::setViewport(size.width, size.height); Matrix view; view.scale(Vector3(2.0f / size.width, -2.0f / size.height, 1.0f)); view.translate(Vector3(-1.0f, 1.0f, 0.0f)); shader.setMatrix("view", view.getValues()); Game::render(lag, renderer); GL::printError("GL-Error"); } bool isRunning() const { return Game::isRunning(); } }; void Engine::start() { Loop loop; window.run(loop, 10'000'000); } const Size& Engine::getSize() { return window.getSize(); }