Saisie clavier
Le moyen le plus direct de contrôler un mod pendant son développement est le clavier. Tu presses une touche, l'action s'exécute, tu observes le résultat. Mais sous Windows, les événements clavier bruts ont leurs pièges : maintenir une touche enfoncée génère des répétitions en rafale, et relâcher un peu trop vite peut déclencher ton action deux fois de suite.
L'événement KeyDown
ScriptHookVDotNet intercepte directement les messages clavier standards de Windows Forms. Dans le constructeur de ton script, abonne-toi à l'événement KeyDown :
using System;
using System.Windows.Forms;
using GTA;
public sealed class GestionnaireClavier : Script
{
private int _prochainDeclenchementAutorise;
public GestionnaireClavier()
{
KeyDown += OnKeyDown;
}
private void OnKeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F6)
{
ExecuterAction();
}
}
private void ExecuterAction()
{
// Garde anti-rebond (debounce) : au moins 300 ms entre deux frappes
if (Game.GameTime < _prochainDeclenchementAutorise)
{
return;
}
_prochainDeclenchementAutorise = Game.GameTime + 300;
GTA.UI.Notification.PostTicker("Action déclenchée.", false);
}
}
Le motif du debounce (anti-rebond)
Quand tu appuies sur une touche, Windows peut émettre deux ou trois événements dans une fraction de seconde selon la configuration de répétition du clavier. Si ton script fait apparaître un garde du corps ou bascule un gyrophare, tu te retrouves avec deux peds superposés ou une lumière qui s'allume et s'éteint instantanément.
La parade standard est la fenêtre d'anti-rebond avec Game.GameTime (le nombre de millisecondes écoulées depuis le lancement du jeu) :
- Déclare un champ entier :
_prochainDeclenchementAutorise. - À chaque frappe, vérifie si
Game.GameTime < _prochainDeclenchementAutorise. Si oui, sors immédiatement. - Si le délai est respecté, actualise la valeur :
_prochainDeclenchementAutorise = Game.GameTime + 300;(ou 400 ms selon le confort désiré).
Les touches modificatrices : combiner sans encombrer
Pour ne pas monopoliser les touches usuelles du jeu, combine tes raccourcis avec e.Control, e.Shift ou e.Alt :
private void OnKeyDown(object sender, KeyEventArgs e)
{
// Déclenchement uniquement sur Ctrl + Shift + K
if (e.KeyCode == Keys.K && e.Control && e.Shift)
{
ReinitialiserMod();
}
}
Clavier physique contre commandes de jeu
Il y a une nuance capitale à intégrer dès le départ :
- Touches Windows (
KeyDown) : Émises directement par le système d'exploitation dès qu'une touche physique s'abaisse. Elles ne fonctionnent pas sur manette, et continuent de réagir même si le jeu est en pause ou si tu tapes dans un menu de triche. - Commandes de jeu (
Game.IsControlJustPressed) : Mappages natifs de GTA V (sauter, accélérer, viser). Elles fonctionnent indifféremment au clavier et à la manette, et respectent les contextes d'animation du jeu.
Pour le prototypage, le test et les outils de développement, les touches Windows (Keys.F6, Keys.NumPad5) restent le choix le plus rapide et le plus fiable.
Dans la leçon suivante, nous passons au débogage : comment repérer une anomalie, lire un journal de bord et corriger sereinement.