#include "Window.h" #include "ErrorHandler.h" #include #include #include #include #include #include void Window::Draw(std::function setup, std::function draw){ setup(this); while(Running){ SDL_SetRenderDrawColor(ren, 0x00,0x00,0x00,0xff); SDL_RenderClear(ren); Events(draw); draw(this); SDL_RenderPresent(ren); } } void Window::Events(std::function draw){ while(SDL_PollEvent(&e)){ if(e.type == SDL_QUIT){ Running = false; } if(e.type == SDL_KEYDOWN){ switch(e.key.keysym.sym){ case SDLK_a: Running = false; break; case SDLK_s: step = true; break; } } } } Window::Window(std::string title, int width, int height) : Running(true) { if(SDL_Init(SDL_INIT_VIDEO) != 0){ ErrorHandler::send(ErrorType::SDL_ERROR, "SDL_Init"); } win = SDL_CreateWindow("test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_SHOWN | SDL_WINDOW_FULLSCREEN_DESKTOP); if(win == NULL){ ErrorHandler::send(ErrorType::SDL_ERROR, "SDL_CreateWindow"); } ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_SOFTWARE); if(ren == NULL){ ErrorHandler::send(ErrorType::SDL_ERROR, "SDL_CreateRenderer"); } } Window::~Window(){ SDL_DestroyWindow(win); SDL_DestroyRenderer(ren); SDL_Quit(); } SDL_Renderer* Window::GetRenderer(){ return ren; } void Window::DrawCircle(SDL_Renderer* ren, int x, int y, int r, bool filled){ std::vector circle; for(int _x = x - r; _x <= x + r; _x++){ for(int _y = y - r; _y <= y + r; _y++){ int dx = _x - x; int dy = _y - y; if (dx*dx + dy*dy <= r*r){ circle.push_back({_x, _y}); } } } SDL_RenderDrawPoints(ren, circle.data(), circle.size()); }