Aller au contenu principal

Intégration Gameplay

Si vous souhaitez que votre roue d'actions se comporte comme une roue officielle Rockstar (telle que la roue d'armes native de GTA V ou d'inventaire de RDR2), vous aurez besoin de :

  1. Maintien de touche (maintenir L1 / TAB ouvre la roue, relâcher valide le choix).
  2. Ralenti cinématique (Game.TimeScale = 0.2f).
  3. Blocage des commandes (empêcher le tir ou les coups au corps à corps pendant la visée de tranche).
  4. Garde-fous de sécurité (fermeture instantanée en cas de pause, cinématique, mort ou ragdoll).

RadialMenuUI fournit RadialMenuGameplayHost pour gérer tout cela en deux lignes de code.


Utilisation de RadialMenuGameplayHost

using GTA;
using RadialMenuUI;
using RadialMenuUI.Gameplay;

public class MonModScript : Script
{
private readonly RadialMenuController _controller;
private readonly RadialMenuGameplayHost _host;

public MonModScript()
{
var input = new GtaRadialMenuInput();
_controller = new RadialMenuController(input);

// Crée le host gameplay
_host = new RadialMenuGameplayHost(
controller: _controller,
input: input,
openControl: Control.SelectWeapon, // Maintenir L1 / TAB pour ouvrir
useSlowMotion: true, // Active le ralenti
slowMotionScale: 0.25f // Vitesse ralentie par 4
);

_controller.ResultConfirmed += OnResultConfirmed;
Tick += OnTick;
}

private void OnTick(object sender, EventArgs e)
{
// Appelez simplement Process à chaque tick !
_host.Process(
canOpen: () => Game.Player.CanControlCharacter && !Game.Player.Character.IsDead,
buildMenu: BuildMainMenu
);
}
}

Fonctionnement Interne

1. Blocage des Contrôles Perturbateurs

Pendant l'ouverture, RadialMenuGameplayHost appelle DISABLE_CONTROL_ACTION sur :

  • Toutes les commandes de sélection et changement d'arme (SelectWeapon, NextWeapon, PrevWeapon, etc.).
  • Les commandes d'attaque (Attack, Attack2, MeleeAttack1, MeleeAttack2).
  • Le masquage de l'ATH natif de roue d'armes (HUD_FORCE_WEAPON_WHEEL et HUD_SUPPRESS_WEAPON_WHEEL_RESULTS_THIS_FRAME).

Non configurable : cette liste est codée en dur dans RadialMenuGameplayHost. Vous ne pouvez pas choisir quels contrôles il bloque — on active ou désactive le blocage dans son ensemble en utilisant ou non le host. Les champs RadialMenuConfig.BlockFire, BlockCamera, BlockWeaponWheel, SlowMotion et SlowMotionScale sont hérités de l'ancienne API et actuellement non lus par la librairie (le ralenti est géré par les paramètres useSlowMotion / slowMotionScale du constructeur du host).

2. Gestion du TimeScale (Ralenti)

  • À l'ouverture, le host mémorise le Game.TimeScale actuel et applique le ralenti.
  • Pour empêcher les trainers tiers ou les resets natifs du jeu d'annuler le ralenti, il le ré-émet à chaque frame tant que la roue est ouverte.
  • À la fermeture (sélection, annulation, pause, mort), le time scale d'origine est immédiatement restauré.