[DCS World] Personnaliser ses commandes (pitbuilders)
Publié : ven. août 31, 2012 3:39 pm
Problématique
Avec les interrupteurs 3 positions un problème de taille réside dans le fait que la position central ne correspond à rien.
Avant tout regardons comment est faire un interrupteur 3 positions. Ils sont généralement composé de 3 pattes AC, A1 et A2.
[/align]
En position "haute", AC et A1 sont reliées, en position basse AC et A2 sont reliées et en position médiane AC, A1 et A2 sont ouverts.
Comment faire alors pour "câbler" une commande sur la position médiane de l'interrupteur 3 positions alors que l'on a aucun signal ?
De même, dans le cas des interrupteurs stable (le levier reste en position) le circuit 1 ou 2 est actionné en continu, il ne faudrait pas que le simulateur interprète ça comme une répétition.
Ils existent milles façons de s'y prendre, mais je vais m'intéresser à la solution LeoBodnar et au simulateur DCS World.
Avec La carte LeoBodnar, les circuits sont simplement relier à la carte, et l'ordinateur ne connait que l'état d'un bouton, rien de plus.
Ici, je cherche à m'affranchir d'un logiciel de programmation supplémentaire, je souhaite exploiter directement les entrées de la carte. Ce que permet DCS, alors profitons en.
La théorie
En théorie, la solution est de détecter le changement d'état d'un circuit (d'ailleurs le circuit s'appel un "bouton" au sens de directX ... donc je parlerai de bouton). On parle alors d'activation sur front. le front montant c'est quand le bouton passe de l'état "non-pressé" à l'état "pressé" et inversement pour le front descendant.
Et sur DCS World il est possible de lancer une action sur front (montant ou descendant).
Il suffit donc de considérer l'action "Haut", "Milieu" et "Bas" de mon interrupteur 3 positions, puis de dire :
Sur front montant du bouton 1, j'actionne "Haut", sur front descendant, j'action "Milieu"
Sur front montant du bouton 2, j'actionne "Bas", sur front descendant, j'action "Milieu"
C'est simple, non ?
Et le tour est joué. Regardons en Pratique :
La pratique
Dans DCS, il faut utiliser les configurations des "inputs", il y a un fichier par périphérique, et un dossier "inputs" par module.
Prenons ici le module A-10C et concentrons nous sur le Master-Arm. (ARM-SAFE-SIMU)
J'ai branché ma carte LeoBodnar de façon à avoir : Bouton 1 de DirectX pour la position ARM et le Bouton 2 de DirectX pour la position SIMU.
Je vais créer un nouveau profil input. Pour ca, je vais dans le répertoire :
DCS World\Mods\aircrafts\A-10C\Input\A-10C\joystick\ (on change A-10C par le nom du module ... bien entendu)
et je crée un nouveau fichier texte, que je renomme Panel_Demo_C6.lua
Par défaut dans le fichier on va avoir :
Rapidement,
La gestion du retour de force, ne nous sert à rien, mais on laisse par defaut, pour éviter d'avoir une erreur de script (si le bloc n'est pas présent DCS pourrait ne pas aimer, dans le doute)
"fullSync" permet de définir si le periphérique prend en compte la synchronisation des positions au début du jeu. Lors que vous lachez la pause, et que vous avez activé l'option dans les paramètres de DCS, les périphériques qui ont le fullSync à true seront synchronisé. (les interrupteurs dans la simulation prendront la position des interrupteurs de vos panels).
Enfin "keyCommands" est LE bloc qui nous intéresse ici. Chaque ligne va définir l'action associé à un bouton. Pour ce faire, la ligne est de type :
vous pouvez répéter autant de fois que désiré le coupe "key = value". Sachant que certaine clé sont obligatoire et d'autre non.
name (obligatoire) : définie le nom de la commande, si ce nom n'existe pas par défaut, il est créé dans DCS au chargement du profil
categorie (obligatoire) : définie le nom de la catégorie associé à la commande, si ce nom n'existe pas par défaut, il est créé dans DCS au chargement du profil
combos : défini la combinaison de boutons/touches à détecter
up : action a déclencher au moment ou l'on relâche le bouton (front descendant)
down : action a déclencher au moment ou l'on appuie sur le bouton (front montant)
pressed : action a déclencher quand le bouton est en position basse (appuyé)
La liste des actions se retrouve dans le fichier de profil par défaut (qui est utilisé pour générer le tableau d'option de DCS) :
\DCS World\Mods\aircrafts\A-10C\Input\A-10C\joystick\default.lua
Il faut fouiller un peu dedans, mais on retrouve tous.
La liste des boutons c'est assez simple :
JOY_BTN1 à JOY_BTN32 pour les 32 boutons
JOY_BTN_POV1_L, JOY_BTN_POV1_R, JOY_BTN_POV1_U, JOY_BTN_POV1_D, JOY_BTN_POV1_UL, JOY_BTN_POV1_DL, JOY_BTN_POV1_UR, JOY_BTN_POV1_DR pour le controleur de point de vue (U : haut, D : bas, L : gauche, R : droite)
Ce qui donne pour mon interrupteur :
J'obtiens alors ce fichier là :
Il me reste à le charger dans DCS World, pour ca :
Je branche son périphérique avant de lancer DCS,
Je lance DCS
Je vais dans OPTIONS, puis CONTROLS.
Je me place dans la colonne qui correspond à mon périphérique (ici "BU....") puis je fais "LOAD PROFILE"
[/align]
Je sélectionne mon profil ... ca charge. [/align]
Et là j'ai mon profil, bien chargé que je peux retrouver rapidement dans la liste : [/align]
Bonne et longue configuration
Ergo.
Avec les interrupteurs 3 positions un problème de taille réside dans le fait que la position central ne correspond à rien.
Avant tout regardons comment est faire un interrupteur 3 positions. Ils sont généralement composé de 3 pattes AC, A1 et A2.
[/align]
En position "haute", AC et A1 sont reliées, en position basse AC et A2 sont reliées et en position médiane AC, A1 et A2 sont ouverts.
Comment faire alors pour "câbler" une commande sur la position médiane de l'interrupteur 3 positions alors que l'on a aucun signal ?
De même, dans le cas des interrupteurs stable (le levier reste en position) le circuit 1 ou 2 est actionné en continu, il ne faudrait pas que le simulateur interprète ça comme une répétition.
Ils existent milles façons de s'y prendre, mais je vais m'intéresser à la solution LeoBodnar et au simulateur DCS World.
Avec La carte LeoBodnar, les circuits sont simplement relier à la carte, et l'ordinateur ne connait que l'état d'un bouton, rien de plus.
Ici, je cherche à m'affranchir d'un logiciel de programmation supplémentaire, je souhaite exploiter directement les entrées de la carte. Ce que permet DCS, alors profitons en.
La théorie
En théorie, la solution est de détecter le changement d'état d'un circuit (d'ailleurs le circuit s'appel un "bouton" au sens de directX ... donc je parlerai de bouton). On parle alors d'activation sur front. le front montant c'est quand le bouton passe de l'état "non-pressé" à l'état "pressé" et inversement pour le front descendant.
Et sur DCS World il est possible de lancer une action sur front (montant ou descendant).
Il suffit donc de considérer l'action "Haut", "Milieu" et "Bas" de mon interrupteur 3 positions, puis de dire :
Sur front montant du bouton 1, j'actionne "Haut", sur front descendant, j'action "Milieu"
Sur front montant du bouton 2, j'actionne "Bas", sur front descendant, j'action "Milieu"
C'est simple, non ?
Et le tour est joué. Regardons en Pratique :
La pratique
Dans DCS, il faut utiliser les configurations des "inputs", il y a un fichier par périphérique, et un dossier "inputs" par module.
Prenons ici le module A-10C et concentrons nous sur le Master-Arm. (ARM-SAFE-SIMU)
J'ai branché ma carte LeoBodnar de façon à avoir : Bouton 1 de DirectX pour la position ARM et le Bouton 2 de DirectX pour la position SIMU.
Je vais créer un nouveau profil input. Pour ca, je vais dans le répertoire :
DCS World\Mods\aircrafts\A-10C\Input\A-10C\joystick\ (on change A-10C par le nom du module ... bien entendu)
et je crée un nouveau fichier texte, que je renomme Panel_Demo_C6.lua
Par défaut dans le fichier on va avoir :
Code : Tout sélectionner
function layout()
return {
-- Gestion du retour de force
forceFeedback = {
trimmer = 1.0,
shake = 0.5,
swapAxes = false,
},
-- Synchronisation des interrupteur
fullSync = true,
-- Les commandes
keyCommands = {
},
-- Les axes
axisCommands = {
},
}
end
La gestion du retour de force, ne nous sert à rien, mais on laisse par defaut, pour éviter d'avoir une erreur de script (si le bloc n'est pas présent DCS pourrait ne pas aimer, dans le doute)
"fullSync" permet de définir si le periphérique prend en compte la synchronisation des positions au début du jeu. Lors que vous lachez la pause, et que vous avez activé l'option dans les paramètres de DCS, les périphériques qui ont le fullSync à true seront synchronisé. (les interrupteurs dans la simulation prendront la position des interrupteurs de vos panels).
Enfin "keyCommands" est LE bloc qui nous intéresse ici. Chaque ligne va définir l'action associé à un bouton. Pour ce faire, la ligne est de type :
Code : Tout sélectionner
{key1 = value1 , key2 = value2 },
name (obligatoire) : définie le nom de la commande, si ce nom n'existe pas par défaut, il est créé dans DCS au chargement du profil
categorie (obligatoire) : définie le nom de la catégorie associé à la commande, si ce nom n'existe pas par défaut, il est créé dans DCS au chargement du profil
combos : défini la combinaison de boutons/touches à détecter
up : action a déclencher au moment ou l'on relâche le bouton (front descendant)
down : action a déclencher au moment ou l'on appuie sur le bouton (front montant)
pressed : action a déclencher quand le bouton est en position basse (appuyé)
La liste des actions se retrouve dans le fichier de profil par défaut (qui est utilisé pour générer le tableau d'option de DCS) :
\DCS World\Mods\aircrafts\A-10C\Input\A-10C\joystick\default.lua
Il faut fouiller un peu dedans, mais on retrouve tous.
La liste des boutons c'est assez simple :
JOY_BTN1 à JOY_BTN32 pour les 32 boutons
JOY_BTN_POV1_L, JOY_BTN_POV1_R, JOY_BTN_POV1_U, JOY_BTN_POV1_D, JOY_BTN_POV1_UL, JOY_BTN_POV1_DL, JOY_BTN_POV1_UR, JOY_BTN_POV1_DR pour le controleur de point de vue (U : haut, D : bas, L : gauche, R : droite)
Ce qui donne pour mon interrupteur :
Code : Tout sélectionner
-- Position Master ARM
{
combos = {{key = 'JOY_BTN1'}} ,
down = iCommandPlaneAHCPMasterArm,
up = iCommandPlaneAHCPMasterSafe,
name = 'Master switch ARM/SAFE',
category = 'Panel Demo C6'
},
-- Position Master SIMU
{
combos = {{key = 'JOY_BTN2'}} ,
down = iCommandPlaneAHCPMasterTrain,
up = iCommandPlaneAHCPMasterSafe,
name = 'Master switch TRAIN/SAFE',
category = 'Panel Demo C6'
},
Code : Tout sélectionner
function layout()
return {
-- Gestion du retour de force
forceFeedback = {
trimmer = 1.0,
shake = 0.5,
swapAxes = false,
},
-- Synchronisation des interrupteur
fullSync = true,
-- Les commandes
keyCommands = {
-- Position Master ARM
{
combos = {{key = 'JOY_BTN1'}} ,
down = iCommandPlaneAHCPMasterArm,
up = iCommandPlaneAHCPMasterSafe,
name = 'Master switch ARM/SAFE',
category = 'Panel Demo C6'
},
-- Position Master SIMU
{
combos = {{key = 'JOY_BTN2'}} ,
down = iCommandPlaneAHCPMasterTrain,
up = iCommandPlaneAHCPMasterSafe,
name = 'Master switch TRAIN/SAFE',
category = 'Panel Demo C6'
},
},
-- Les axes
axisCommands = {
},
}
end
Je branche son périphérique avant de lancer DCS,
Je lance DCS
Je vais dans OPTIONS, puis CONTROLS.
Je me place dans la colonne qui correspond à mon périphérique (ici "BU....") puis je fais "LOAD PROFILE"
[/align]
Je sélectionne mon profil ... ca charge. [/align]
Et là j'ai mon profil, bien chargé que je peux retrouver rapidement dans la liste : [/align]
Bonne et longue configuration
Ergo.