Accueil
Accueil

Bienvenue invité ( Connexion | Inscription )

9 Pages V « < 2 3 4 5 6 > »   
Reply to this topicStart new topic
> T.A.R.G.E.T., Advanced User dans la place ?
Galevsky
post 28 Sep 2013, 18:05
Message #31




Born to fly, fly to feel alive !

Messages : 3,001
Inscrit : 26/10/05
Lieu : Antibes
Membre n° 282

wavetowel2.gif wavetowel2.gif wavetowel2.gif

Impec' !

Merci russieflag.gif

--------------------
Image IPB Image IPB

User is offlineProfile CardPM
Go to the top of the page
+Quote Post
PiedDroit
post 28 Sep 2013, 18:55
Message #32






Indicatif : B-26
Messages : 925
Inscrit : 13/12/10
Membre n° 3,711

CITATION(Galevsky @ 28 Sep 2013, 18:05) *

wavetowel2.gif wavetowel2.gif wavetowel2.gif

Impec' !

Merci russieflag.gif

Voila les fichiers
.ttm : macros
.tmh : code
.tmc : exemple d'utilisation
Fichier joint  TeamspeakChannels.zip ( 2,06 Ko ) Nombre de téléchargements: 244

Faudrait ajouter ça dans un Wiki quelque part detective.gif
EDIT :
les touches de changement de sous canal utilisées sont : LCTL+SHIFT+'<' et LALT+'<'
à redéfinir dans le .ttm si besoin wink.gif


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);
MapKey(&Throttle, APENG, CHAIN(PULSE+L_SHIFT+'x',D(),PULSE+'y'));
Dans event viewer :
Image attachée

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 :
Image attachée

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 gap.gif

Ce message a été modifié par PiedDroit - 28 Sep 2013, 19:04.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Galevsky
post 28 Sep 2013, 19:07
Message #33




Born to fly, fly to feel alive !

Messages : 3,001
Inscrit : 26/10/05
Lieu : Antibes
Membre n° 282

CITATION(PiedDroit @ 28 Sep 2013, 19:55) *

Faudrait ajouter ça dans un Wiki quelque part detective.gif


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

--------------------
Image IPB Image IPB

User is offlineProfile CardPM
Go to the top of the page
+Quote Post
PiedDroit
post 12 Dec 2013, 23:10
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 : Fichier joint  _DefaultMap.tmh.txt ( 1,07 Ko ) Nombre de téléchargements: 264

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.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Galevsky
post 13 Dec 2013, 00:31
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 ?

--------------------
Image IPB Image IPB

User is offlineProfile CardPM
Go to the top of the page
+Quote Post
PiedDroit
post 13 Dec 2013, 04:25
Message #36






Indicatif : B-26
Messages : 925
Inscrit : 13/12/10
Membre n° 3,711

CITATION(Galevsky @ 13 Dec 2013, 00:31) *

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) :
Image attachée

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 :
Image attachée

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.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
PiedDroit
post 20 Jan 2014, 01:23
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.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Postal2
post 20 Jan 2014, 10:20
Message #38




EXTREMEeeeeeeee!!!!!!!!!!

Indicatif : TH-41
Messages : 6,130
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 !!! saianlol.gif )


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!!!

User is offlineProfile CardPM
Go to the top of the page
+Quote Post
PiedDroit
post 22 Jan 2014, 16:28
Message #39






Indicatif : B-26
Messages : 925
Inscrit : 13/12/10
Membre n° 3,711

CITATION(Postal2 @ 20 Jan 2014, 10: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 !!! saianlol.gif )
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).
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Postal2
post 22 Jan 2014, 16:53
Message #40




EXTREMEeeeeeeee!!!!!!!!!!

Indicatif : TH-41
Messages : 6,130
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!!!

User is offlineProfile CardPM
Go to the top of the page
+Quote Post

9 Pages V « < 2 3 4 5 6 > » 
Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :
 

Haut de page · Retour à l'accueil · Contacter le Webmestre Nous sommes le : 27/04/24 - 12:43