Aller au contenu principal

Démarrage rapide

Ce guide vous montre comment créer une roue d'actions 4 secteurs fonctionnelle dans un script ScriptHookVDotNet.


Exemple Minimal

Créez une classe héritant de Script :

using System;
using System.Drawing;
using System.Windows.Forms;
using GTA;
using RadialMenuUI;

public class MonModRadial : Script
{
private readonly RadialMenuController _controller;
private readonly RadialMenuTheme _theme;

public MonModRadial()
{
// 1. Initialise le thème pointant vers les skins par défaut
_theme = new RadialMenuTheme("default")
{
BaseDirectory = @"RadialMenuUI\",
AssetRoot = @"skins\default",
IconRoot = @"skins\default\icons",
WheelTint = Color.White,
HoverTint = Color.FromArgb(255, 215, 0) // Surbrillance dorée
};

// Associe des clés stables d'icônes aux PNG fournis avec le thème par défaut.
_theme.RegisterIcon("repair", "wheel_support_backup.png");
_theme.RegisterIcon("heal", "wheel_category_support.png");
_theme.RegisterIcon("police", "wheel_police_routine_check.png");

// 2. Initialise l'adaptateur de contrôle (stick droit + souris)
var input = new GtaRadialMenuInput();

// 3. Crée le contrôleur
_controller = new RadialMenuController(input);
_controller.ResultConfirmed += OnActionConfirmed;

// 4. Préchauffage des textures en tâche de fond pour une première ouverture instantanée
_controller.QueueWarmup(_theme);

Tick += OnTick;
KeyUp += OnKeyUp;
}

private void OnKeyUp(object sender, KeyEventArgs e)
{
// Ouvre ou ferme la roue avec la touche F5
if (e.KeyCode == Keys.F5)
{
if (_controller.IsOpen)
{
_controller.CancelAndClose();
}
else
{
_controller.Open(CreateMainMenu());
}
}
}

private void OnTick(object sender, EventArgs e)
{
// Fait avancer le contrôleur à chaque frame
_controller.WarmupOneTexture();

if (_controller.IsOpen)
{
_controller.Update();

// Si la touche de confirmation (R2 / Clic / Entrée) est pressée
if (_controller.PressedThisFrame)
{
_controller.ConfirmAndClose();
}
}
}

private RadialMenuDef CreateMainMenu()
{
var menu = new RadialMenuDef("main", 4).WithTheme(_theme);

menu.AddEntry(new RadialEntryDef("repair", 0) { Label = "Réparer Véhicule" }.WithIcon("repair"));
menu.AddEntry(new RadialEntryDef("heal", 1) { Label = "Soigner Joueur" }.WithIcon("heal"));
menu.AddEntry(new RadialEntryDef("police", 2) { Label = "Effacer Police" }.WithIcon("police"));
// Slot 3 (en bas / 18h) laissé vide pour permettre d'annuler naturellement

return menu;
}

private void OnActionConfirmed(RadialMenuResult result)
{
Ped player = Game.Player.Character;

switch (result.EntryId)
{
case "repair":
player.CurrentVehicle?.Repair();
GTA.UI.Notification.PostTicker("~g~Véhicule réparé !", false, false);
break;

case "heal":
player.Health = player.MaxHealth;
player.Armor = 100;
GTA.UI.Notification.PostTicker("~g~Santé restaurée !", false, false);
break;

case "police":
Game.Player.Wanted.SetWantedLevel(0, false);
GTA.UI.Notification.PostTicker("~b~Indices de recherche effacés !", false, false);
break;
}
}
}

Explications

  1. RadialMenuTheme : Définit les couleurs, chemins de textures et transparences.
  2. GtaRadialMenuInput : Lit les commandes GTA (stick droit, curseur souris et boutons).
  3. RadialMenuController : Gère l'ouverture, les survols, les sons frontend et déclenche ResultConfirmed.
  4. RadialMenuDef : Déclare le nombre de secteurs (ex. 4 tranches) et les entrées.
  5. WarmupOneTexture() : Enregistre progressivement au démarrage une texture par frame pour éviter tout freeze à la première ouverture.