cześć :)
mam coś na modłę kompozytu (wzorzec), który wygląda mniej więcej tak:
class CompositeView : public sf::Drawable, public ComponentView {
private:
std::vector<CompositeView> composites;
public:
CompositeView();
virtual ~CompositeView();
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const override;
void addComposite(CompositeView compositeView);
std::string getName();
};
i implementacja:
//...
void CompositeView::draw(sf::RenderTarget &target, sf::RenderStates states) const {
for (CompositeView compositeView : this->composites) {
compositeView.draw(target, states);
}
}
void CompositeView::addComposite(CompositeView compositeView) {
this->composites.push_back(compositeView);
}
//...
Buduję w ten sposób używając addComposite
zagnieżdżoną 'strukturę' następnie chciałbym na takiej strukturze wywołać draw
więc kod powinien powoli schodzić w głąb tej struktury i wykonywać draw
, jak np. tutaj:
class InitView : public CompositeView {
public:
InitView();
virtual ~InitView();
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const override;
};
i...
void drawText(sf::RenderTarget &target, sf::RenderStates states) {
sf::Font font;
if (!font.loadFromFile("C:\\Users\\janec\\Downloads\\Consolas.ttf")) {
std::cout << "Can't read font!" << std::endl;
exit(-1);
}
sf::Text text;
text.setFont(font);
text.setCharacterSize(48);
text.setFillColor(sf::Color::Black);
text.setString("GeoFly");
target.draw(text, states);
}
void InitView::draw(sf::RenderTarget &target, sf::RenderStates states) const {
drawText(target, states);
}
i gdzieś tam w kodzie dodanie kompozytu:
this->compositeView.addComposite(initView);
Problem w tym, o tyle o ile w pętli mam poprawny w tym przypadku InitView
jako CompositeView
to metoda draw
z InitView
nie jest wołana - why?