Aller au contenu principal

Types de données

Quand tu conçois un mod, tu passes ton temps à stocker des informations et à tester leur état : le joueur est-il dans un véhicule ? Combien de millisecondes avant la prochaine vérification ? Vers quelle météo basculer ? Le C# met à ta disposition des types précis pour chaque cas d'usage.

Les types primitifs du quotidien

Quatre types fondamentaux constituent le socle de presque tous les mods :

  • bool : Vaut true (vrai) ou false (faux). Parfait pour les drapeaux d'état : private bool _missionActive;.
  • int : Un entier relatif (32 bits). Utilisé pour les compteurs, les index ou les chronomètres en millisecondes : private int _prochaineVerification;.
  • float : Un nombre décimal à virgule flottante (simple précision). Indispensable dans un univers 3D pour les vitesses, les distances et les angles d'orientation. N'oublie jamais le suffixe f en C# : private float _vitesse = 15.5f;.
  • string : Une chaîne de caractères entre guillemets doubles. Utilisée pour les notifications, les noms de modèles ou les chemins de fichiers : string message = "Mission lancée";.

Les types spécifiques au moteur de GTA

SHVDN fournit des types taillés sur mesure pour l'écosystème du jeu :

  • GTA.Math.Vector3 : Représente une position ou une direction dans l'espace 3D avec ses composantes X, Y et Z :
    Vector3 positionJoueur = Game.Player.Character.Position;
  • GTA.Weather : Une énumération (enum) de tous les états météo reconnus par le moteur :
    Weather meteoActuelle = World.Weather;
    World.Weather = Weather.ExtraSunny;

Variables locales contre champs de classe

L'endroit où tu déclares une variable décide de sa durée de vie. C'est ici que la plupart des débutants perdent des heures en débogage :

Variables locales : temporaires au sein d'une méthode

Une variable locale est déclarée à l'intérieur d'une méthode. Elle naît quand la méthode est appelée et disparaît dès que l'exécution quitte ce bloc :

private void OnKeyDown(object sender, KeyEventArgs e)
{
// Créée au moment de la touche, détruite dès la fin de ce bloc
float distance = 10.0f;
}

Champs : l'état persistant d'une image à l'autre

Comme OnTick tourne soixante fois par seconde, toute variable déclarée dans OnTick est réinitialisée à chaque image. Si tu veux mémoriser qu'une mission a commencé ou l'heure à laquelle tu as envoyé un message, déclare un champ au niveau de la classe :

public sealed class SurveillanceMeteo : Script
{
// Ces champs survivent d'une image à l'autre
private bool _messageAffiche;
private int _prochaineVerification;

private void OnTick(object sender, EventArgs e)
{
if (_messageAffiche)
{
return;
}

if (Game.GameTime > _prochaineVerification)
{
_messageAffiche = true;
GTA.UI.Screen.ShowSubtitle("Bienvenue à Los Santos", 3000);
}
}
}

Remarque la convention de nommage : les champs privés d'une classe commencent par un trait de soulignement (_messageAffiche). Cela permet de savoir au premier coup d'œil si l'on manipule un état persistant ou un calcul temporaire.

Dans la leçon suivante, nous abordons le contrôle de flux : prendre des décisions avec les conditions if et les boucles.