Ce soir, je vais parler de l’utilisation de la Wiimote dans un homebrew, car il y a quelques pièges à éviter pour gagner du temps.
Il faut distinguer deux parties dans la Wiimote, la partie Bluetooth qui transmet des informations et la partie récepteur infra-rouges qui calcule sa position par rapport à la sensor-bar.
1 - Sans infra-rouge
Dans ce cas, un code basique ressemblerait à :
// Header contenant les fonctions pour utiliser la Wiimote #include <wiiuse/wpad.h> ... // Initialisation WPAD_Init(); ... // Dans la boucle principale WPAD_ScanPads(); // On scanne toutes les Wiimotes pour regarder les évenements qui ont eu lieu if (WPAD_ButtonsDown(0) & WPAD_BUTTON_HOME) exit(0); // Si le bouton Home a été appuyé, //quitter l'application
Ce code détecte simplement un appui sur la touche Home à chaque passage dans la boucle principale du programme. C’est bien, mais ça n’exploite pas grand chose de la manette. Voyons donc comment activer et utiliser l’infra-rouge.
2 - Avec infra-rouge
Voici un extrait de code plus évolué :
// Header contenant les fonctions pour utiliser la Wiimote #include <wiiuse/wpad.h> ... // Initialisation WPAD_Init(); // Utilisation de l'infra-rouge WPAD_SetDataFormat(0, WPAD_FMT_BTNS_ACC_IR); ... s32 res; // Résultat de la détection de la Wiimote WPADData *wd = NULL; // Données retournée par la Wiimote // Dans la boucle principale WPAD_ReadPending(WPAD_CHAN_ALL, NULL); // On lit les informations en attente sur toutes // les Wiimotes connectées. Le deuxième argument est un pointeur de fonction, // pouvant être appelé en même temps. res = WPAD_Probe(WPAD_CHAN_0, NULL); // On vérifie que la Wiimote n°1 est bien présente. // Le deuxième argument permet de récupérer l'extension branchée sur la Wiimote // (comme le nunchuck) if (res == WPAD_ERR_NONE) { // Si la manette est bien présente wd = WPAD_Data(WPAD_CHAN_0); // On récupère un pointeur vers la structure // contenant toutes les informations sur l'état de la manette. if (wd->btns_h & WPAD_BUTTON_HOME) exit(0); // Si le bouton Home est appuyé, // quitter vers le menu }
Ce code fait exactement la même chose que le précedent. Mais alors, pourquoi compliquer les choses, me direz-vous ? Tout simplement parce-que l’activation de l’infra-rouge oblige ce genre de contrôle. Sans quoi, dès que la Wiimote perdra la sensor bar de vue, l’application se bloquera.
Pour un exemple plus complet utilisant toutes les possibilités de la Wiimote, essayez d’exécuter ce code. Il donne un excellent aperçu des valeurs récupérables.
Conclusion
L’utilisation de la Wiimote est assez simple, grace aux fonctions de la libogc.
La prochaine fois, nous aborderons la partie graphique.
Note personnelle : j’ai ouvert un compte sur le Wiki de Wiibrew, afin de pouvoir contribuer en traduisant et en améliorant des articles. N’hésitez pas à contribuer également ;)
Tags: C, Homebrew, Wii, Wiibrew, wiimote
Bulletins (RSS)