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 :
- Maintien de touche (maintenir
L1 / TABouvre la roue, relâcher valide le choix). - Ralenti cinématique (
Game.TimeScale = 0.2f). - Blocage des commandes (empêcher le tir ou les coups au corps à corps pendant la visée de tranche).
- 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_WHEELetHUD_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 champsRadialMenuConfig.BlockFire,BlockCamera,BlockWeaponWheel,SlowMotionetSlowMotionScalesont hérités de l'ancienne API et actuellement non lus par la librairie (le ralenti est géré par les paramètresuseSlowMotion/slowMotionScaledu constructeur du host).
2. Gestion du TimeScale (Ralenti)
- À l'ouverture, le host mémorise le
Game.TimeScaleactuel 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é.