From 86feca99437fadbbba24f330bccd8757fb56254e Mon Sep 17 00:00:00 2001 From: Mathias Wagner Date: Mon, 2 Dec 2024 09:38:36 +0100 Subject: [PATCH] Create Renderer#drawCircle --- src/Renderer.cpp | 37 +++++++++++++++++++++++++++++++++++-- src/Renderer.h | 3 ++- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/src/Renderer.cpp b/src/Renderer.cpp index 41bd87e..4c48269 100644 --- a/src/Renderer.cpp +++ b/src/Renderer.cpp @@ -1,5 +1,38 @@ #include "Renderer.h" +void drawCircle(SDL_Renderer *renderer, int32_t centreX, int32_t centreY, int32_t radius) { + const int32_t diameter = (radius * 2); + + int32_t x = (radius - 1); + int32_t y = 0; + int32_t tx = 1; + int32_t ty = 1; + int32_t error = (tx - diameter); + + while (x >= y) { + SDL_RenderDrawPoint(renderer, centreX + x, centreY - y); + SDL_RenderDrawPoint(renderer, centreX + x, centreY + y); + SDL_RenderDrawPoint(renderer, centreX - x, centreY - y); + SDL_RenderDrawPoint(renderer, centreX - x, centreY + y); + SDL_RenderDrawPoint(renderer, centreX + y, centreY - x); + SDL_RenderDrawPoint(renderer, centreX + y, centreY + x); + SDL_RenderDrawPoint(renderer, centreX - y, centreY - x); + SDL_RenderDrawPoint(renderer, centreX - y, centreY + x); + + if (error <= 0) { + y++; + error += ty; + ty += 2; + } + + if (error > 0) { + x--; + tx += 2; + error += (tx - diameter); + } + } +} + void drawTexture(SDL_Renderer *renderer, SDL_Texture *texture, int x, int y, int w, int h) { SDL_Rect src; src.x = 0; @@ -15,8 +48,8 @@ void drawTexture(SDL_Renderer *renderer, SDL_Texture *texture, int x, int y, int SDL_RenderCopy(renderer, texture, &src, &dist); } -void drawText(SDL_Renderer *renderer, TTF_Font *font, const std::string text, int x, int y) { - SDL_Surface *surface = TTF_RenderText_Solid(font, text.c_str(), {255, 255, 255}); +void drawText(SDL_Renderer *renderer, TTF_Font *font, const std::string text, int x, int y, SDL_Color color) { + SDL_Surface *surface = TTF_RenderText_Solid(font, text.c_str(), color); SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, surface); SDL_Rect src; diff --git a/src/Renderer.h b/src/Renderer.h index ca12e04..cbb32a2 100644 --- a/src/Renderer.h +++ b/src/Renderer.h @@ -8,6 +8,7 @@ #define WINDOW_HEIGHT 500 void drawTexture(SDL_Renderer *renderer, SDL_Texture *texture, int x, int y, int w, int h); -void drawText(SDL_Renderer *renderer, TTF_Font *font, const std::string text, int x, int y); +void drawText(SDL_Renderer *renderer, TTF_Font *font, std::string text, int x, int y, SDL_Color color); +void drawCircle(SDL_Renderer *renderer, int32_t centreX, int32_t centreY, int32_t radius); #endif \ No newline at end of file