Salut, je voudrais en fait passer les événements de différentes librairies à une interface commune.

Alors, j'ai deux solution pour passer les types de événements et les paramètres des événements, cependant je ne sais pas pour laquelle opter.

1ère solution :

Je fais un if sur le type de l'événement et en fonction du type de l'événement j'affecte les bons paramètres un exemple :

Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
SystemEvent popEvent () {
           sf::Event event;
           if (window.pollEvent(event)) {
               if (event.type == sf::Event::Closed) {
                   SystemEvent sysevent;
                   sysevent.eventID = sf::Event::Closed;
                   sysevent.info.origin = SystemEvent::Origin::Window;
                   sysevent.info.type = SystemEvent::Type::NO_TYPE;
                   sysevent.paramID = SystemEvent::Type::NO_TYPE;
                   return sysevent;
                   //Nothing.
               } else if (event.type == sf::Event::Resized) {
                   //....
               }
           }
}

La seconde solution est de parcourir tout les états (fenêtre, clavier, souris, etc...) et de générer un événement si il y a un changement d'état. (Ce qui serait plus long si il y a beaucoup d'état à vérifier comme par exemple pour vérifier l'était de chaque touche du clavier. (Mais il y aura moins de if)

Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
//Exécuter à chaque tout de boucle.
void produceEvents () {
       for (unsigned int i = 0; i < sf::Keyboard::Key::Count, i++) {
            if (sf::Keyboard::isKeyPressed(i) || keyStates[i] !=(sf::Keyboard::isKeyPressed(i))  {
                keyStates[i] = !keyStates[i];
                //On créer l'événement et ou l'ajoute dans la pile.
            }
       }
}
//Et on fait la même chose pour la fenêtre, la souris, etc...
Faut voir avec la complexité maintenant mais, je n'ai jamais très bien compris comment la mesurer.

Merci d'avance pour votre aide.