diff --git a/src/quadtree.cpp b/src/quadtree.cpp new file mode 100644 index 0000000..0b9c686 --- /dev/null +++ b/src/quadtree.cpp @@ -0,0 +1,49 @@ +#include "../includes/quadtree.hpp" + +QuadTree::QuadTree(SDL_Surface * image, short niveau_p): niveau(niveau_p), couleur(calculeCouleur(image)), dimensions(image->w, image->h), + nord_ouest(nullptr), nord_est(nullptr), sud_ouest(nullptr), sud_est(nullptr) { + if(!verificationEgalitee(image)) { + std::array image_coupe = coupeEnQuatre(image); + + final = false; + nord_ouest = new QuadTree(image_coupe.at(0), niveau + 1); + nord_est = new QuadTree(image_coupe.at(1), niveau + 1); + sud_ouest = new QuadTree(image_coupe.at(2), niveau + 1); + sud_est = new QuadTree(image_coupe.at(3), niveau + 1); + } +} + +QuadTree::~QuadTree(void) { + if(nord_ouest != nullptr) { + delete nord_ouest; + } + if(nord_est != nullptr) { + delete nord_est; + } + if(sud_ouest != nullptr) { + delete sud_ouest; + } + if(sud_est != nullptr) { + delete sud_est; + } +} + +SDL_Surface * QuadTree::image(short niveau_p) { + // Temporaire, créer une image noire + (void)niveau_p; + SDL_Surface * nouvelle_image = SDL_CreateRGBSurface(0, dimensions.first, dimensions.second, 32, 0, 0, 0, 0); + if(SDL_LockSurface(nouvelle_image) == 0) { + SDL_memset(nouvelle_image->pixels, static_cast(SDL_MapRGB(nouvelle_image->format, 0, 0, 0)), static_cast(nouvelle_image->h * nouvelle_image->pitch)); + SDL_UnlockSurface(nouvelle_image); + } else { + exit(1); + } + + return nouvelle_image; +} + +SDL_Color QuadTree::calculeCouleur(SDL_Surface *) { /* return SDL_Color(); */ } + +bool QuadTree::verificationEgalitee(SDL_Surface *) { /* return true; */ } + +std::array QuadTree::coupeEnQuatre(SDL_Surface *) { /* return std::array(); */ }