Définir des commandes pour des interrupteurs à 2 ou 3 positions
-
C’est un sujet qui a été abordé aujourd’hui par Perka. Je capitalise sur l’explication que je lui ai donné, et je vous transmets ici le résultat de mes recherches.
Situation
Sur nos manettes de bourgeois, il y a souvent, en plus de boutons poussoirs simples ou sous forme de “hats” (chapeaux, comme le trim par exemple), des interrupteurs qui peuvent prendre plusieurs positions maintenues.
Par exemple, sur la manette des gaz du Warthog, il y a un interrupteur “Flaps” (1) qui peut prendre trois positions, et un interrupteur “EAC” (2) qui peut en prendre 2.
On constate que, quand souhaite utiliser un de ces interrupteurs pour mapper une commande double de DCS (par exemple, Master Arm ON et OFF), cela ne fonctionne pas comme prévu
Explication
La raison est que toutes les positions de ces interrupteurs ne génèrent pas une commande dans DCS.
Globalement, un joystick complexe comme la manette des gaz du Warthog est vu dans Windows (par la librairie DirectX, qui sert à l’interfaçage direct du matériel pour les jeux) comme un ensemble d’axes et de boutons qui sont soit pressés (ON), soit non (OFF).
Par exemple, le bouton qui vous sert à larguer des bombes sur votre joystick est un simple poussoir, dont la position pressée déclenche un signal électrique qui va être reconnu par Windows comme le fait que le bouton DirectX est pressé (ON). Quand on le lache physiquement, le signal se coupe, et Windows cesse de voir ce bouton comme ON ; mécaniquement, il est considéré comme OFF (le seul autre état).
Dans le cas d’un bouton à plusieurs positions (comme l’interrupteur “EAC”), une seule des deux positions déclenchera un signal électrique (la position “vers l’avant” dans le cas de l’EAC. Et donc seule cette position correspond à un bouton DirectX pour Windows. L’autre est simplement neutre.
Si vous voulez mapper dans DCS la position basse de cet interrupteur, vous constaterez que c’est impossible.Pour un interrupteur à trois positions (comme l’interrupteur “FLAPS”) c’est pareil : seules 2 des 3 positions possibles seront actives, la troisième correspondra simplement à une absence de signal.
Solution
Il est possible de créer des commandes dans DCS, en éditant les fichiers .lua qui sont dans les répertoires Input des modules comme par exemple le fichier Mods\aircraft\FA-18C\Input\FA-18C\joystick\default.lua
On peut créer un contrôle qui exécute une action spécifique quand un bouton DirectX est enfoncé, et une autre quand il ne l’est plus.
Par exemple, on peut créer un contrôle qui déclenche le Master Arm (ON) quand le bouton DirectX correspondant à l’interrupteur “EAC” en position haute est enfoncé (et maintenu, donc) et qui déclenche le Master Arm (OFF) quand il n’est plus enfoncé (donc, quand on déplace l’interrupteur dans l’autre position).
Voici le contrôle correspondant :{down = SMS_commands.MasterArmSw, up = SMS_commands.MasterArmSw, cockpit_device_id = devices.SMS, value_down = 1.0, value_up = 0.0, name = _('Master Arm Switch 2-Pos ARM/SAFE'), category = {_('Toggle Switches'), _('Master Arm Panel')}},
Je vous l’explique rapidement.
- down= correspond à la commande qui est actionnée quand le bouton est enfoncé (en l’occurence, SMS_commands.MasterArmSw)
- up= correspond à la commande qui est actionnée quand le bouton cesse d’être enfoncé (en l’occurence, SMS_commands.MasterArmSw ; oui, vous avez bien lu, c’est la même que pour down ! C’est la valeur qui va être différente - voir plus bas)
- value_down= est la valeur (le paramètre) envoyé à la commande décrite dans down= quand le bouton est enfoncé (ici, 1.0 qui correspond à la montée de l’interrupteur Master Arm dans le cockpit)
- value_up= est la valeur (le paramètre) envoyé à la commande décrite dans up= quand le bouton est enfoncé (ici, 0.0 qui correspond à la descente de l’interrupteur Master Arm dans le cockpit)
- cockpit_device_id= va de paire avec up= et down= pour définir l’instrument qui reçoit la commande.
- category= est la liste des catégories dans lesquelles le contrôle sera rangé (qu’on voit dans la liste déroulante catégories dans le dialogue Controls Options)
- name= est le nom que le contrôle aura dans le dialogue Controls Options
En pratique, ici on crée un contrôle (unique) qu’on pourra assigner à la position active d’un interrupteur (comme EAC par exemple), et qui appellera la commande SMS_commands.MasterArmSw dans l’instrument devices.SMS avec la valeur 1.0 quand l’interrupteur est dans cette position, et la valeur 0.0 quand il n’y est plus.
Concrètement, cela permet de mettre le Master Arm sur ON quand l’interrupteur physique est dans une position, et sur OFF quand il est dans une autre.
Aller plus loin
C’est un domaine bien compliqué, heureusement bien décrit et documenté par l’excellent LeCuvier sur le forum d’Eagle Dynamics (en anglais).
Vous pouvez voir ce que j’ai choisi de mettre dans mes mods “Config - Keys - XXXX”
qui sont à votre disposition sur mon Google Drive (compatibles OvGME, voir mon tutoriel sur OvGME)[Edit du 14.05.2020]
Depuis, on a mis en place les bibliothèques OvGME de la VEAF que vous pouvez découvrir dans un tutoriel que je vous propose.
Si vous vous demandez ce qu’est OvGME, lisez cet autre tutoriel qui vous l’explique en détail.N’hésitez pas à me demander si vous avez des questions !
-
Bien joué … et surtout bien expliqué
-
Merci ZIP vais étudier ça avec une tablette de Doliprane à coté et un cerveau de rechange lol
-
Je crois que j’ai compris le principe
Je regarde un inter 2 positions pour commencer et ensuite je me met sur un trois comme les volets. Je crois avoir une info sur les codes commandes dcs avec le tuto de Stream deck
Affaire à suivre, merci pour le tuyau @Zip -
J’ai mis à jour mon post en modifiant les références à mes mods qui sont désormais dans la bibliothèque OvGME DCS game files de la VEAF.
Je t’invite à y jeter un coup d’oeil. -
Excellent! Merci @Zip!
Je vais essayer ça au plus vite.
Ca passe l’integrity check? -
@griffin non malheureusement.
Globalement, les mods user files passent l’IC, les game files non. Il y a des exceptions. -
Pour tous, voici le code pour faire le 3 Way Switch avec les Flaps du F18
{down = ctrl_commands.FlapSw, up = ctrl_commands.FlapSw, cockpit_device_id = devices.CONTROL_INTERFACE, value_down = 1.0, value_up = 0.0, name = _('FLAP 3 way Switch - Up'), category = {_('Toggle Switches'),_('Left Vertical Panel')}}, {down = ctrl_commands.FlapSw, up = ctrl_commands.FlapSw, cockpit_device_id = devices.CONTROL_INTERFACE, value_down = -1.0, value_up = 0.0, name = _('FLAP 3 way Switch - Down'), category = {_('Toggle Switches'),_('Left Vertical Panel')}},
Merci professeur @ZIp !
-
merci @griffin
-
@griffin pour info c’est déjà dans le mod
Config - Keys - FA-18C Keybinds
du repository VEAF -
@Zip oui, c’était pour donner un exemple de switch avec 3 pos.
-
@Zip le fichier mod FA-18C ne peut être télécharger
-
@phebus mais si, je viens de tester.
Tu utilises bien OvGME ? Tu as lu le tutoriel ? -
Système stream deck fonctionne en bi-directionnel avec DCS
Les retours d’infos du jeu remonte sur le stream deck comme, train rentré ou sorti avec un vrai retour d’information de dcs, les rotatifs peuvent être utilisés avec la souris ou sur le stream deck le retour d’information est le même partout.
Exemple affichage en temps réel des canaux radio comm1 et comm2, affichage du canal et de la fréquence dans l’ufc.
Retour visuel des 5 boutons pour les fonctions AP IFF TCN D/T…chaque bouton est fonctionnel et un retour d’information visuel sur l’état est instantané sur le jeu et sur le clavier, le rafraichissement est fait toute les 0.05 seconde.
Je continue à creuser… -
Merci Zip !
-
info
@zip Lien HS : “découvrir le tutoriel” en bas du premier message
-
@kervinou merci !
-
Bien vu @Zip , je viens de retrouver le sujet !
Et j’en ai profité pour me créer une commande deux positions pour le OFF/ARM du Laser sur le F-16C
Je partage
-- LASER ARM Switch {down = sms_commands.LaserSw, up = sms_commands.LaserSw, cockpit_device_id = devices.SMS, value_down = 1.0, value_up = 0.0, name = _('LASER ARM Switch - OFF else ARM'), category = {_('Instrument Panel'), _('Quaggles Custom')}},
Et je viens aussi de me faire le switch 3 positions pour les lumières de la roulette de nez du Mirage F1
-- Landing light control ARRET-LAND-ROUL {down = devCmds.Cmd310, up = devCmds.Cmd310, cockpit_device_id = devices.MAIN, value_down = 0.0, value_up = 0.5, name = _('Landing light control - OFF else LAND'), category = {_('Left wall'), _('Exterior lighting'), _('Quaggles Custom')}}, {down = devCmds.Cmd310, up = devCmds.Cmd310, cockpit_device_id = devices.MAIN, value_down = 1.0, value_up = 0.5, name = _('Landing light control - LAND else TAXI'), category = {_('Left wall'), _('Exterior lighting'), _('Quaggles Custom')}},
-
MAJ nécessaire suite dernière version de DCS OB
https://github.com/Quaggles/dcs-input-command-injector/releases -
Merci, bon à savoir.
Je mets à jour le mod sur OvGME dès que possible