Ha, ok, je comprend mieux ce que tu veux faire maintenant. ^^
Bah moi en fait moi ce que je voulais faire c'est quelque chose comme ceci : (A part que je ne dessine que avec le state courant car je ne vois pas l'intérêt de dessiner plusieurs states, je sais pas, je trouve que ça complique un peu les choses)
void Application::render() {
Map *currentMap = World::getCurrentMap();
View view = getContext().window.getView();
Vector2f v2 (view.getCenter().x - view.getSize().x * 0.5f, view.getCenter().y - view.getSize().y * 0.5f);
if (getContext().renderShadows) {
renderTextShadows.setView(view);
renderTextShadows.clear(Color::White);
RectangleShape rect;
rect.setPosition(Vector2f(v2.x, v2.y));
rect.setFillColor((Color(100, 100, 100, 128)));
rect.setSize(Vector2f (view.getSize().x, view.getSize().y));
vector<Shadow*> visibleShadows = currentMap->getVisibleShadows();
for (unsigned int i = 0; i < visibleShadows.size(); i++) {
renderTextShadows.draw(*visibleShadows[i]);
}
renderTextShadows.draw(rect, RenderStates(BlendAdd));
renderTextShadows.display();
}
if (getContext().renderLights) {
vector<DrawableEntity*> visibleLights = currentMap->getVisibleEntities("E_LIGHT");
for (unsigned int i = 0; i < visibleLights.size(); i++) {
renderTextLights.draw(*visibleLights[i], RenderStates(BlendAdd));
}
renderTextLights.display();
}
vector<DrawableEntity*> visibleTilesGround = currentMap->getVisibleEntities("E_GROUND");
for (unsigned int i = 0; i < visibleTilesGround.size(); i++) {
getContext().window.draw(*visibleTilesGround[i]);
}
if (getContext().renderShadows) {
Sprite shadows (renderTextShadows.getTexture());
shadows.setPosition(v2.x, v2.y);
getContext().window.draw (shadows, RenderStates(BlendMultiply));
}
vector<DrawableEntity*> visibleTilesDecor = currentMap->getVisibleEntities("E_DECOR");
for (unsigned int i = 0; i < visibleTilesGround.size(); i++) {
getContext().window.draw(*visibleTilesGround[i]);
}
if (getContext().renderLights) {
Sprite lights (renderTextLights.getTexture());
lights.setPosition(v2.x, v2.y);
getContext().window.draw (lights, RenderStates(BlendMultiply));
}
}
En gros dans la fonction render on récupère le state courant et en fonction des paramètres du state courant, on affiche ce qu'on veut. dans la renderwindow de l'application.
On pourra à tout moment changer le state courant avec pushState et popState du statemanager.
Bref, je ne sais pas pour toi mais moi je trouve ça, plus simple.
PS : ou alors encore plus simple on ne fait qu'un seul state qu'on modifie en fonction de ce qu'on veut chargé, par exemple, le states contient un vector de variable booléennes qui définisse si il faut afficher une gui ou pas.
Bon, maintenant, définir toutes les guis dans la classe application n'est peut être pas top non plus, mais bon..., au final peut être que je vais opter pour ton système avec un state dans lequel on rajoute les guis à dessiner pour ce state.
Ouais non oublie ce que j'ai dis je crois que je vais opter pour ton système.