diff --git a/src/Chromosome.cpp b/src/Chromosome.cpp index 531d0c3..59b3fde 100644 --- a/src/Chromosome.cpp +++ b/src/Chromosome.cpp @@ -23,6 +23,8 @@ float Chromosome::stddev_radius = .1; float Chromosome::stddev_color = 20; std::minstd_rand* Chromosome::re; +sf::CircleShape Chromosome::circle; + Chromosome::Chromosome() { @@ -115,12 +117,13 @@ void Chromosome::draw(sf::RenderTarget& target, sf::RenderStates states) const this->circle.setOrigin(Chromosome::size); this->circle.setFillColor(sf::Color::White); target.draw(this->circle, states); + for (auto gene : this->genes) { - this->circle.setPosition(gene.position); - this->circle.setRadius(gene.radius); - this->circle.setOrigin(sf::Vector2f(gene.radius, gene.radius)); - this->circle.setFillColor(gene.color); - target.draw(this->circle, states); + Chromosome::circle.setPosition(gene.position); + Chromosome::circle.setRadius(gene.radius); + Chromosome::circle.setOrigin(sf::Vector2f(gene.radius, gene.radius)); + Chromosome::circle.setFillColor(gene.color); + target.draw(Chromosome::circle, states); } } diff --git a/src/Chromosome.hpp b/src/Chromosome.hpp index b72ab57..2366eb3 100644 --- a/src/Chromosome.hpp +++ b/src/Chromosome.hpp @@ -27,6 +27,8 @@ public: size_t length(); protected: + static sf::CircleShape circle; + struct Gene { sf::Vector2f position; @@ -34,6 +36,8 @@ protected: sf::Color color; }; + std::vector genes; + float maxRadius(); Gene randomGene(); @@ -43,7 +47,4 @@ protected: selectSegment(std::vector& genes); std::vector::iterator selectGene(std::vector& genes); - - mutable sf::CircleShape circle; // drawing the chromosome, one draw call at a time - std::vector genes; };