
Bienvenue invité ( Connexion | Inscription )
![]() ![]() |
Galevsky |
![]()
Message
#31
|
![]() ![]() ![]() ![]() Born to fly, fly to feel alive ! Messages : 3,001 Inscrit : 26/10/05 Lieu : Antibes Membre n° 282 ![]() |
![]() ![]() ![]() Impec' ! Merci ![]() --------------------
![]() ![]() |
PiedDroit |
![]()
Message
#32
|
![]() ![]() ![]() ![]() Indicatif : B-26 Messages : 925 Inscrit : 13/12/10 Membre n° 3,711 ![]() |
![]() ![]() ![]() Impec' ! Merci ![]() Voila les fichiers .ttm : macros .tmh : code .tmc : exemple d'utilisation ![]() Faudrait ajouter ça dans un Wiki quelque part ![]() EDIT : les touches de changement de sous canal utilisées sont : LCTL+SHIFT+'<' et LALT+'<' à redéfinir dans le .ttm si besoin ![]() Sinon j'ai remarqué un comportement bizarre des commandes CHAIN avec le délai. Le temps de pulse n'est pas pris en compte dans la séquence' Du coup si on utilise un pulse supérieur au delai : CODE SetKBRate(60, 50); Dans event viewer :MapKey(&Throttle, APENG, CHAIN(PULSE+L_SHIFT+'x',D(),PULSE+'y')); ![]() Avec un delai supérieur au pulse ça fonctionnera mais le temps effectif entre les 2 commandes sera en fait de tdelai-tpulse (donc potentiellement tres court). Du coup la solution consiste à ajouter le temps de pulse apres chaque commande PULSE : CODE SetKBRate(TPULS, DELAY); MapKey(&Throttle, APENG, CHAIN(PULSE+L_SHIFT+'x',D(TPULS),D(),PULSE+'y',D(TPULS))); avec les defines : CODE define TPULS 60 define DELAY 50 Resultat : ![]() EDIT: Disregard la touche "ALT" sur les screenshots, c'est parceque je pressais Alt+PrntScrn et j'ai oublié de l'enlever sur les images ![]() Ce message a été modifié par PiedDroit - 28 Sep 2013, 19:04. |
Galevsky |
![]()
Message
#33
|
![]() ![]() ![]() ![]() Born to fly, fly to feel alive ! Messages : 3,001 Inscrit : 26/10/05 Lieu : Antibes Membre n° 282 ![]() |
Faudrait ajouter ça dans un Wiki quelque part ![]() Yes je finis mes articles "Lua pour les nuls", puis i faudrait faire un truc sur Target vu le nombre de gens qui ont le Warthog, afin qu'ils puissent profiter de la pleine puissance du truc --------------------
![]() ![]() |
PiedDroit |
![]()
Message
#34
|
![]() ![]() ![]() ![]() Indicatif : B-26 Messages : 925 Inscrit : 13/12/10 Membre n° 3,711 ![]() |
Salut, je me suis mis au A-10C récemment, s'il y en a que ça intéresse, j'ai trouvé un moyen assez simple de bénéficier du mapping par défaut de DCS (y compris la synchro des switchs) tout en pouvant ajouter des fonctions personnalisées sur un des contrôleurs avec TARGET.
Par exemple, pour le throttle, avec seulement le bouton "Mic" modifié : L'astuce consiste à copier le contenu de "Throttle - HOTAS Warthog {...}.lua" dans "Thrustmaster Combined {...}.lua" (ces fichiers sont dans %USER%\Saved Games\DCS\Config\Input\A-10C\joystick). À partir de là, il faut que le combined réagisse de la même façon que le Throttle pour que ça colle. Pour ça, utiliser une table similaire à ThrottleMap[] (qui se trouve dans target.h) mais qui réplique le mapping directX du Throttle seul. J'ai nommé cette table ThrottleMap1, dans ce fichier : ![]() Ensuite créer un profil TARGET qui n'utilise que le Throttle : CODE include "target.tmh" include "_DefaultMap.tmh" define TPULSE 60 define TDELAY 50 define Eject L_CTL+'e' int main() { /////////////////// Setup and initialisation /////////////////// Configure(&HCougar, MODE_EXCLUDED); Configure(&T16000, MODE_EXCLUDED); Configure(&LMFD, MODE_EXCLUDED); Configure(&RMFD, MODE_EXCLUDED); Configure(&Joystick, MODE_EXCLUDED); // Configure(&Throttle, MODE_EXCLUDED); if(Init(&EventHandle)) return 1; SetKBRate(TPULSE, TDELAY); // Keyboard pulse and delay times in ms SetKBLayout(KB_ENG); // 0 to 42 is OFF // 43 to 85 is level 1 // 86 to 128 is level 2 // 129 to 171 is level 3 // 172 to 214 is level 4 // 215 to 255 is level 5 ActKey(PULSE+KEYON+LED(&Throttle, LED_INTENSITY, 43)); // set Throttle backlight power to low //////////////////////// // Standalone mapping // //////////////////////// MapList(&Throttle,&ThrottleMap1); // _DefaultMap.tmh /////////////////// Throttle axes setup /////////////////// // Axes are already tuned in the DCS profile MapAxis(&Throttle, SCX, DX_X_AXIS, AXIS_NORMAL, MAP_ABSOLUTE); // DX_XROT_AXIS with Throttle+Joystiock SetSCurve(&Throttle, SCX, 0, 0, 0, 0, 0); MapAxis(&Throttle, SCY, DX_Y_AXIS, AXIS_NORMAL, MAP_ABSOLUTE); // DX_YROT_AXIS with Throttle+Joystiock SetSCurve(&Throttle, SCY, 0, 0, 0, 0, 0); MapAxis(&Throttle, THR_RIGHT, DX_Z_AXIS, AXIS_NORMAL, MAP_ABSOLUTE); SetSCurve(&Throttle, THR_RIGHT, 0, 0, 0, 0, 0); MapAxis(&Throttle, THR_LEFT, DX_ZROT_AXIS, AXIS_NORMAL, MAP_ABSOLUTE); SetSCurve(&Throttle, THR_LEFT, 0, 0, 0, 0, 0); MapAxis(&Throttle, THR_FC, DX_THROTTLE_AXIS, AXIS_NORMAL, MAP_ABSOLUTE); // was DX_SLIDER_AXIS SetSCurve(&Throttle, THR_FC, 0, 0, 0, 0, 0); /////////////////// Throttle button mapping /////////////////// // VOTRE CONFIG ICI (exemple): // Moteurs MapKey(&Throttle, EOLIGN, TEMPO(0,EXEC("if (Throttle[APUON]) ActKey(KEYON+PULSE+R_ALT+HOME);"),1500)); MapKey(&Throttle, EORIGN, TEMPO(0,EXEC("if (Throttle[APUON]) ActKey(KEYON+PULSE+R_CTL+HOME);"),1500)); MapKey(&Throttle, EOLMOTOR, EXEC("ActKey(KEYON+PULSE+R_ALT+END);")); MapKey(&Throttle, EORMOTOR, EXEC("ActKey(KEYON+PULSE+R_CTL+END);")); // Ejection MapKey(&Throttle, LDGH, TEMPO(0,CHAIN(PULSE+Eject,D(TPULSE),D(),PULSE+Eject,D(TPULSE),D(),PULSE+Eject,D(TPULSE)),1000)); } int EventHandle(int type, alias o, int x) { DefaultMapping(&o, x); } Ce message a été modifié par PiedDroit - 25 Jan 2014, 20:59. |
Galevsky |
![]()
Message
#35
|
![]() ![]() ![]() ![]() Born to fly, fly to feel alive ! Messages : 3,001 Inscrit : 26/10/05 Lieu : Antibes Membre n° 282 ![]() |
J'ai du mal a te suivre: comment tu assures la synchro des boutons ?
--------------------
![]() ![]() |
PiedDroit |
![]()
Message
#36
|
![]() ![]() ![]() ![]() Indicatif : B-26 Messages : 925 Inscrit : 13/12/10 Membre n° 3,711 ![]() |
J'ai du mal a te suivre: comment tu assures la synchro des boutons ? C'est fait dans le .lua en fait. Un petit exemple dans le .lua du Throttle : CODE {combos = {{key = "JOY_BTN20"}, }, down = iCommandPlane_APU_Start, up = iCommandPlane_APU_Off, name = "APU Start/Off", category = "Engine Control Panel"}, Dans le fichier de configuration par défaut du combined, il y a à la place : CODE {down = iCommandPlane_APU_Off, name = "APU Off", category = "Engine Control Panel"}, {down = iCommandPlane_APU_Start, name = "APU Start", category = "Engine Control Panel"}, Ce qui fait que si on essaie de configurer la touche dans les settings de DCS, on doit setter un bouton pour le "Start" et un bouton pour le "Off", séparément. Pour mapper switch sur une seule fonction "Start/Off", il faut modifier le .lua (moi jhe ne m'embête pas je recopie tout). La deuxième étape consiste à faire en sorte que du point de vue DirectX, le "Combined" (Throttle seul) et le Throttle soient identiques. Ceci est accompli par les lignes suivantes dans le script TARGET : CODE //////////////////////// // Standalone mapping // //////////////////////// MapList(&Throttle,&ThrottleMap1); // _DefaultMap.tmh /////////////////// Throttle axes setup /////////////////// // Axes are already tuned in the DCS profile MapAxis(&Throttle, SCX, DX_X_AXIS, AXIS_NORMAL, MAP_ABSOLUTE); // DX_XROT_AXIS with Throttle+Joystiock SetSCurve(&Throttle, SCX, 0, 0, 0, 0, 0); MapAxis(&Throttle, SCY, DX_Y_AXIS, AXIS_NORMAL, MAP_ABSOLUTE); // DX_YROT_AXIS with Throttle+Joystiock SetSCurve(&Throttle, SCY, 0, 0, 0, 0, 0); MapAxis(&Throttle, THR_RIGHT, DX_Z_AXIS, AXIS_NORMAL, MAP_ABSOLUTE); SetSCurve(&Throttle, THR_RIGHT, 0, 0, 0, 0, 0); MapAxis(&Throttle, THR_LEFT, DX_ZROT_AXIS, AXIS_NORMAL, MAP_ABSOLUTE); SetSCurve(&Throttle, THR_LEFT, 0, 0, 0, 0, 0); MapAxis(&Throttle, THR_FC, DX_SLIDER_AXIS, AXIS_NORMAL, MAP_ABSOLUTE); SetSCurve(&Throttle, THR_FC, 0, 0, 0, 0, 0); MapList() configure tous les boutons, il n'y a plus qu'a mapper les axes. C'est facile à vérifier à l'aide dans le panneau de configuration Windows - Périphériques et Imprimantes (il y a des axes en plus sur le combined mais ils ne sont pas mappés) : ![]() Il faut bien vérifier que tous les boutons répondent bien, ainsi que les axes. Par exemple, le mapping pour SCX/SCY correspond aux axes rotationX/rotationY dans les scripts TARGET type Joystick+Throttle alors qu'en fait ces axes sont les X/Y du Throttle. Normalement il ne faut pas modifier les courbes des axes pour que la réponse soit identique entre le "Combined" et le Throttle sans logiciel, par exemple dans DCS les courbes pour le slew sont déjà faites : ![]() Avec tout ça on a un périphérique "combined" qui est identique au Throttle d'un point de vue DirectX et qui est configuré pareil dans DCS (le .lua), il ne reste plus qu'a ajouter ses petites touches personnelles dans TARGET. Ce message a été modifié par PiedDroit - 13 Dec 2013, 04:38. |
PiedDroit |
![]()
Message
#37
|
![]() ![]() ![]() ![]() Indicatif : B-26 Messages : 925 Inscrit : 13/12/10 Membre n° 3,711 ![]() |
Un petit bout de code fait pour gérer les programmes de contremesures dans FC3, que je met ici pour garder une trace.
Les touches du MFD servent à sélectionner le programme actif et la touche MSP du Throttle sert à exécuter le programme sélectionné. Exemple avec deux programmes de contre mesures : CODE ///////////// Throttle LED /////////////// int led_on (int n) { int led_list_on = SEQ( LED(&Throttle, LED_ONOFF, LED_CURRENT+LED1), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED2), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED3), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED4), LED(&Throttle, LED_ONOFF, LED_CURRENT+LED5)); ActKey(PULSE+KEYON+X(led_list_on , n-1)); } int led_off(int n) { int led_list_off = SEQ( LED(&Throttle, LED_ONOFF, LED_CURRENT-LED1), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED2), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED3), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED4), LED(&Throttle, LED_ONOFF, LED_CURRENT-LED5)); ActKey(PULSE+KEYON+X(led_list_off, n-1)); } int led(int n) { int i; i = 1; while (i <= 5) { if (i != n) { led_off(i); } else { led_on (i); } i = i + 1; } } //////////////// CM ////////////////// define Chaff INS define Flare DEL define ChaffFlare 'q' define ChaffFlareInterval 100 // attention cette valeur doit être > TPULSE int map_CM_program(int prognum, alias dev, int btnidx) { if (prognum == 1) { MapKey(&dev, btnidx, EXEC("exec_CM_program(1);")); led(1); } if (prognum == 2) { MapKey(&dev, btnidx, EXEC("exec_CM_program(2);")); led(2); } //if (prognum == 3) { MapKey(&dev, btnidx, EXEC("exec_CM_program(3);")); led(3); } //if (prognum == 4) { MapKey(&dev, btnidx, EXEC("exec_CM_program(4);")); led(4); } //if (prognum == 5) { MapKey(&dev, btnidx, EXEC("exec_CM_program(5);")); led(5); } } int exec_CM_program(int prognum) { int CM_cf = PULSE+ChaffFlare; int CM_ff = CHAIN( PULSE+Flare ,D(ChaffFlareInterval), PULSE+Flare ); int CM_fff = CHAIN( PULSE+Flare ,D(ChaffFlareInterval), PULSE+Flare ,D(ChaffFlareInterval), PULSE+Flare ); if (prognum == 1) { DeferCall( 0, &ActKey, KEYON+CM_ff); DeferCall(1000, &ActKey, KEYON+CM_fff); DeferCall(2000, &ActKey, KEYON+CM_ff); } if (prognum == 2) { DeferCall( 0, &ActKey, KEYON+CM_cf); DeferCall(1000, &ActKey, KEYON+CM_ff); DeferCall(2000, &ActKey, KEYON+CM_cf); } if (prognum == 3) { //TODO } if (prognum == 4) { //TODO } if (prognum == 5) { //TODO } } CODE // Countermeasure map_CM_program(1, &Throttle, MSD); // Default CM program MapKey(&LMFD, OSB06, EXEC("map_CM_program(1, &Throttle, MSD);")); MapKey(&LMFD, OSB07, EXEC("map_CM_program(2, &Throttle, MSD);")); MapKey(&LMFD, OSB08, EXEC("map_CM_program(3, &Throttle, MSD);")); MapKey(&LMFD, OSB09, EXEC("map_CM_program(4, &Throttle, MSD);")); MapKey(&LMFD, OSB10, EXEC("map_CM_program(5, &Throttle, MSD);")); Ce message a été modifié par PiedDroit - 22 Jan 2014, 16:24. |
Postal2 |
![]()
Message
#38
|
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() EXTREMEeeeeeeee!!!!!!!!!! Indicatif : TH-41 Messages : 6,197 Inscrit : 6/12/04 Lieu : A coter de dijon LFSD (21) Membre n° 20 ![]() |
Tout sa sur demande de grand malade ^^ ! j'adore !
Merci à toi pour tout ce taf accomplie (Exploitation du russe sa n'a pas de prix !!! ![]() Non vraiment merci . j'ai recup les MP ! je vais tenter d'integrer différentes séquences sur un bouton désirer) . Et configurer les autres boutons comme convenu , les keybin TS ! avec le mapping des menu comms ! . Extrême ! . --------------------
Extrêmmmmmmmmmmmmmmmmmmmmmmmmmeeeeeeeeeeee!!! |
PiedDroit |
![]()
Message
#39
|
![]() ![]() ![]() ![]() Indicatif : B-26 Messages : 925 Inscrit : 13/12/10 Membre n° 3,711 ![]() |
Tout sa sur demande de grand malade ^^ ! j'adore ! Merci à toi pour tout ce taf accomplie (Exploitation du russe sa n'a pas de prix !!! ![]() Non vraiment merci . j'ai recup les MP ! je vais tenter d'integrer différentes séquences sur un bouton désirer) . Et configurer les autres boutons comme convenu , les keybin TS ! avec le mapping des menu comms ! . Extrême ! . On s'est aperçu également que si l'intensité des LEDs n'est pas settée ça cause des problèmes, que les leds soient utilisées ou non... CODE // 0 to 42 is OFF // 43 to 85 is level 1 // 86 to 128 is level 2 // 129 to 171 is level 3 // 172 to 214 is level 4 // 215 to 255 is level 5 ActKey(PULSE+KEYON+LED(&Throttle, LED_INTENSITY, 43)); // set Throttle backlight power to low J'ai aussi ajouté le code des programmes de flares avec l'allumage des leds en fonction du programme selectionné (edité dans le post précédent). |
Postal2 |
![]()
Message
#40
|
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() EXTREMEeeeeeeee!!!!!!!!!! Indicatif : TH-41 Messages : 6,197 Inscrit : 6/12/04 Lieu : A coter de dijon LFSD (21) Membre n° 20 ![]() |
Oki , je vais modifier le CMH et tester ça !
Merki . --------------------
Extrêmmmmmmmmmmmmmmmmmmmmmmmmmeeeeeeeeeeee!!! |
![]() ![]() |
Haut de page · Retour à l'accueil · Contacter le Webmestre | Nous sommes le : 13/05/25 - 03:56 |