I'm following the tutorials on SFML, and everything's clear except why this example is actually working.
When creating our own entity, we're suggested to derive a class from Drawable (and possibly from Transformable), and override the pure virtual function sf::Drawable::draw.
The reason for that is so that we can call the draw function through window. Since window is a RenderWindow, and it inherits its draw function form its base class RenderTarget, this will call sf::RenderTarget::draw.
As far as I know sf::RenderTarget::draw does nothing else but call sf::Drawable::draw, so:
void RenderTarget::draw(const Drawable& drawable, const RenderStates& states)
{
drawable.draw(*this, states);
}
Now here's the problem: sf::Drawable::draw (our overriden version of it has to make a call to sf::RenderTarget::draw as well! According to the tutorial:
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
{
// apply the entity's transform -- combine it with the one that was passed by the caller
states.transform *= getTransform(); // getTransform() is defined by sf::Transformable
// apply the texture
states.texture = &m_texture;
// you may also override states.shader or states.blendMode if you want
// draw the vertex array
target.draw(m_vertices, states);
}
How does it not go into an infinite loop? I've been trying to figure out this for a while and I just can't understand.
Sorry if this has been asked before, I haven't found an answer for it.