Logique.
Tu passes dans tes premiers if, quand tu arrives au second :
if((event->type == sf::Event::MouseButtonReleased) && (event->mouseButton.button == sf::Mouse::Left))
est encore vrai
(box_GB.contains(worldPos->x, worldPos->y)
est encore vrai
et
activate == true
est vrai puisque tu viens de le mettre à true.
Donc ouais tes 2 blocs s'executent.
Pas la peine de vérifier 2 fois qu'une même chose est vraie, surtout si tu veux pas que le contenu du if se répète :
if((event->type == sf::Event::MouseButtonReleased) && (event->mouseButton.button == sf::Mouse::Left))
{
if (box_GB.contains(worldPos->x, worldPos->y)
{
if (activate == false)
{
activate = true;
cout << "true" << endl;
}
else
{
activate = false;
cout << "false" << endl;
}
}
}
Et tu peux aussi raccourcir un if (activate == false) en if (!activate)
Et si tu veux juste inverser un booléen, tu peux le faire rapidement sans if comme ça :
activate = !activate;