#include "renderer.h" #include #include "renderer.h" #include "simulation.h" #include "level.h" #include "editor.h" int main(int argc, char** argv) { std::random_device randomEngine; std::mt19937 rng(randomEngine()); sdl_wrapper sdl; img_wrapper img; window_ptr win( SDL_CreateWindow( "dispatcher", 100, 100, WINDOW_SIZE.w(), WINDOW_SIZE.h(), SDL_WINDOW_SHOWN)); if (!win) { throw sdl_error(); } renderer_ptr ren( SDL_CreateRenderer( win.get(), -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC)); if (!ren) { throw sdl_error(); } Level level(ren.get()); std::unique_ptr state; if (argc == 2 && !strcmp(argv[1], "--editor")) { state.reset(new Editor(ren.get())); } else { state.reset(new Simulation(level)); } bool quit = false; SDL_Event e; size_t lastTime = SDL_GetTicks(); while (!quit) { size_t currentTime = SDL_GetTicks(); size_t frameTime = currentTime - lastTime; lastTime = currentTime; while (SDL_PollEvent(&e)) { if (e.type == SDL_QUIT || (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE)) { quit = true; break; } } const Uint8* keystate = SDL_GetKeyboardState(NULL); state->tick(frameTime / 1000.0, keystate); SDL_SetRenderTarget(ren.get(), nullptr); SDL_RenderClear(ren.get()); state->render(ren.get()); SDL_RenderPresent(ren.get()); } }