Préambule
Jusqu’à maintenant, mon programme AssettoCorsaWindSim devait être exécuté depuis une console (un terminal Windows) ou carrément depuis Visual Studio Code. Si je veux construire une solution complète destinée à un utilisateur final lambda, je dois pouvoir mettre au point une IHM qui permettent de contrôler facilement AssettoCorsaWindSim et ce de manière intuitive.
C’est une de mes faiblesses principales : la création d’une IHM intuitif. Je n’ai aucune formation et très peu d’expérience dans le domaine du UI/UX. Mes IHM ont tendance contenir trop d’informations et de contrôles, pas assez intuitives. Cela me rappelle la vidéo du créateur du Gestionnaire des Tâches de Windows, qui faisait part de difficultés similaires lors de la création de ses IHM.
Les objectifs
Pour la première version, je me suis donné trois principaux objectifs :
- Fonctionnement en arrière-plan : le programme doit pouvoir fonctionner même si aucune fenêtre n’est affiché
- Monitoring de l’état : l’interface doit pouvoir rapidement donné des informations sur l’état de la connexion au jeu et à la carte de contrôle des ventilateurs, ainsi que des informations sur les ventilateurs eux-même
- Configuration de chaque ventilateur : l’interface doit pouvoir donner la possibilité de changer la configuration des ventilateurs (vitesse max, angle, gamma, choix de la fonction de calcul)
Pour pouvoir facilement concevoir l’interface, j’ai téléchargé Visual Studio 2022 Community pour avoir accès au concepteur de vue. Cela permet de placer directement sur la fenêtre façon drag-and-drop les différents éléments de l’interface (bouton, champs de texte, etc).
Fonctionnement en arrière-plan et icône de notification
Lorsque un programme fonctionne en arrière-plan, la convention veut que celui-ci affiche une icone dans la barre des tâches en bas à gauche. Notre icône affichera l’état du programme.
Cette icône permet d’envoyer une notification à l’utilisateur. Dans le cas de AssettoCorsaWindSim, on enverra une notification lorsque la connexion à l’appareil USB est perdue.
De manière conventionnelle, double-cliquer sur l’icône permet d’afficher la fenêtre, et faire un clic-droit permet d’ouvrir le menu contextuel.
Lorsque l’on ferme la fenêtre, on ne veut pas que le programme se termine SAUF si l’on a expressément demandé. Par contre, si il y a un problème on veut que le programme se ferme, on va donc demander à ce que le programme ne se ferme pas si une certaine condition est remplie.
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
acws.AssettoCorsaDataReceived -= Acws_AssettoCorsaDataReceived;
acws.HardwareDataSent -= Acws_HardwareDataSent;
if (e.CloseReason == CloseReason.UserClosing && !allowClose)
{
e.Cancel = true;
this.Hide();
return;
}
acws.AssettoCorsaConnectionChanged -= Acws_AssettoCorsaConnectionChanged;
acws.HardwareConnectionChanged -= Acws_HardwareConnectionChanged;
notifyIcon.Visible = false;
acws.Stop();
}
Il reste plus qu’à intégrer le reste du programme d’AssettoCorsaWindSim.
Disposition générale de la fenêtre
La fenêtre du programme consiste en trois onglets : un premier onglet sert de page d’accueil pour des informations générales sur le programme et l’état de la connexion, tandis que les deux autres onglets sont utilisées pour gérer les paramètres des deux ventilateurs.
- Visualisation de la puissance des ventilateurs côté hardware, de la vitesse et de l’orientation de la voiture côté software
- Monitoring des différents états de l’USB (connecté ou non)
- Monitoring des différents états de AssettoCorsaSharedMemory : inconnu, détecté, pause, en jeu
Pour chaque ventilateur via le deuxième et troisième onglet, on peut gérer les paramètres Vitesse Max, Gamma, Angle Ventilateur et Méthode de Calcul (voir l’article précédent sur ces paramètres)
Par convention, on met également en place un menu d’en-tête pour gérer l’application et l’arrêter si besoin, un futur menu de paramètres et le fameux sous-menu ‘Aide‘ et son ‘A propos‘.
En aparté, ChatGPT et Dall-E m’ont aidé à créer une petite icône sans prétention pour le logiciel AssettoCorsaWindSim. Le site icons8.com m’a permis de customiser des icônes pour pouvoir donner visuellement l’état du système d’un coup d’oeil. Merci à eux.
Démonstration
Vidéo de démonstration de la fenêtre :
L’Arduino est détectée dès son branchement et le jeu est détecté également dès son démarrage. Les paramètres peuvent être ajustés en direct pour s’adapter à la vitesse max de la voiture par exemple.
Il reste encore du travail sur les calculs. En effet, dans la vidéo on voit qu’après la mise en marche du mode permettant de prendre en compte les angles, la puissance maximale envoyée aux ventilateurs n’est plus qu’à environ 50% de la puissance disponible.
Conclusion
Liste d’améliorations possibles :
- Enregistrement des paramètres dans un fichier, imaginer la détection de la voiture et du circuit pour charger automatiquement les paramètres
- Affichage d’une courbe pour avoir un aperçu de la puissance du ventilo en fonction de la vitesse et de l’orientation
- Une fonction personnalisée pour avoir encore plus de liberté, à charger en fonction du type de ventilateur
- D’autres paramètres pour le démarrage automatique de l’appli avec Windows, etc