Avoid copying around a CircleShape with each Chromosome
This commit is contained in:
parent
ac8354c686
commit
92f1876aa2
2 changed files with 12 additions and 8 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<Gene> genes;
|
||||
|
||||
float maxRadius();
|
||||
|
||||
Gene randomGene();
|
||||
|
|
@ -43,7 +47,4 @@ protected:
|
|||
selectSegment(std::vector<Gene>& genes);
|
||||
|
||||
std::vector<Gene>::iterator selectGene(std::vector<Gene>& genes);
|
||||
|
||||
mutable sf::CircleShape circle; // drawing the chromosome, one draw call at a time
|
||||
std::vector<Gene> genes;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue