Merci, cette solution me parait pas mal, c'est plutôt simple et efficace.
J'ai tout de même une petite question pour ceux qui l'ont lu : pourquoi passer par ses structures pour retenir la touche au lieu de stocker directement un Event ?
Sa map pourrait être un std::map<std::String, sf::Event> (ou une clé plus rapide mais la string a l'avantage d'être claire) et son Test deviendrait juste
if(Event==Keys["Shoot"])
{
shoot();
}
ou bien si l'opérateur == n'est pas implémenté, ou s'il veut être plus rigoureux, on compare champs par champs.
bool TestEvent(sf::Event k, sf::Event e)
{
if(e.type == k.type)
{
switch(e.type)
{
case sf::Event::MouseButtonPressed:
case sf::Event::MouseButtonReleased:
if(k.mouseButton.button==e.mouseButton.button) return true;
break;
case sf::Event::KeyPressed:
case sf::Event::KeyReleased:
if(k.key.code == e.key.code) return true;
break;
default:
break;
}
}
return false;
}
On tombe sur une fonction à peu près similaire, certes, mais on a plus de structure différente, on peut pleinement profiter des nuances que propose la classe sf::Event et on a un Event de stocké que l'on pourrait utiliser à d'autre fin (on sait jamais, j'ai pas d'application qui vienne en tête mais je suis sur que ça peut être utile de donner un event qui s'est pas réellement produit).