Je ne joue pas beaucoup en ce moment, mais je trifouille du script target à tout va, aussi je me permets de poster l’avancée de mes trouvailles si ça peut servir à quelqu’un. Le premier exemple de valeurs dans le SetSCurve est tiré de cet excellent guide, déjà cité ici http://www.checksix-fr.com/Files/matos/TMWarthog/Docs/Doc_warthog_Script_FR.pdf
1er Objectif : changer la sensibilité du manche à la volée
Le changement des courbes peut se faire en cours de jeu via les commandes SetSCurve (courbe en S pour le manche), SetJCurve (Courbe en J pour les gaz) ou SetCustomCurve (courbe en S personnalisée)
Ainsi, la commande suivante effectue des réglages sur l’axe des X (roulis) du joystick
SetSCurve(&Joystick, JOYX,
5, //Zone neutre de 5% sur la gauche
2, //Zone neutre de 2% au centre
5, //Zone neutre de 5% sur la droite
3, //Réglage de la courbe à 3
0 //Scale/zoom à 0
);
Les valeurs peuvent être prélevées grâce à l’interface GUI en créant sa courbe, puis en utilisant le bouton « View Script »
Cette fonction peut être affectée à un bouton, et on peut donc facilement basculer entre deux configurations d’axes. Il faut par contre utiliser la commande EXEC et mettre les commandes suivantes entre guillemets, ce qui complique la syntaxe.
Exemple en utilisant le switch EAC :
MapKey(&Throttle, EACON, //enclenchement du switch EAC vers le haut
EXEC( // ouverture de la fonction EXEC. La suite des commandes doit être mise entre guillemets
"SetSCurve(&Joystick, JOYX,5,2,5,3,0);" // Affectation de la courbe sur l'axe X
) // fin de la fonction EXEC
)
;
MapKey(&Throttle, EACOFF, // affectation d'une courbe différente quand le switch EAC est vers le bas
EXEC(
"SetSCurve(&Joystick, JOYX,0,0,0,0,0);"
)
)
;
Si on veut utiliser l’appui sur un bouton, on utilisera la fonction SEQ qui lance l’action suivante de la liste à chaque nouvel appui sur le bouton. Ainsi, par exemple avec le bouton de l’autopilote :
MapKey(&Joystick, APENG,
SEQ(
EXEC("SetSCurve(&Joystick, JOYX,5,2,5,3,0);")
,
EXEC("SetSCurve(&Joystick, JOYX,0,0,0,0,0);")
)
)
;
On notera par contre que l’on ne modifie ici que l’axe des X (roulis) du joystick. Si on veut aussi modifier l’axe des Y (tangage), on rajoute juste une ligne. Bien sûr, rien n’empêche d’utiliser des réglages différents pour X et Y.
MapKey(&Throttle, EACON, //enclenchement du switch EAC vers le haut
EXEC( // ouverture de la fonction EXEC. La suite des commandes doit être mise entre guillemets
"SetSCurve(&Joystick, JOYX,0,0,0,0,0);" // Affectation de la courbe sur l'axe X
"SetSCurve(&Joystick, JOYY,0,0,0,4,0);" // Affectation d'une courbe différente sur l'axe Y
) // fin de la fonction EXEC
)
;
MapKey(&Throttle, EACOFF, // affectation d'une courbe différente quand le switch EAC est vers le bas
EXEC(
"SetSCurve(&Joystick, JOYX,5,2,5,0,0);"
"SetSCurve(&Joystick, JOYY,5,2,5,0,0);"
)
)
;
Rien qu’avec ça, on définit donc deux comportement différents du manche. Mais on peut s’amuser beaucoup plus
2ème objectif : utiliser des courbes personnalisées
Intéressons nous tout d’abord à la fonction SetCustomCurve
Elle débute par l’énonciation du périphérique (&Throttle ou &Joystick), puis l’axe (JOYX ou JOYY) puis une liste de coordonnées relative à un graphique allant de 0 à 100 en abscisses et en ordonnées. La syntaxe est de ce type
SetCustomCurve(&Joystick, JOYX, LIST(0,0, 50,50, 100,100)) qui correspond alors à une courbe linéaire formée de trois points.
L’important est d’abord de créer une liste de points correspondant à la courbe voulue. Le plus simple étant encore de se servir d’un papier et d’un crayon.
Graphique correspondant à la liste de points LIST(0,0, 50,50, 100,100)

Graphique correspondant à la liste de points LIST(0,0, 10,30, 50,50, 90,70, 100,100)

Problème : la fonction EXEC ne permet pas d’utiliser une liste, et donc on ne peut pas directement utiliser la fonction SetCustomCurve comme on l’avait fait précédemment avec la fonction SetSCurve. Il faut alors ruser :
– 1 : déclarer une variable qui contiendra notre liste au début du script principal
int axe_lineaire;
– 2 : peupler cette variable avec notre liste de coordonnées
axe_lineaire=LIST(0,0, 50,50, 100,100);
– 3 : utiliser cette variable lors de l’appel à la fonction SetCustomCurve
SetCustomCurve(&Joystick, JOYX, axe_lineaire);
On obtient alors
include "target.tmh"
// déclaration des variables
// -------------------------
int axe_lineaire;
int axe_courbeS;
// -------------------------
//program startup
int main()
{
if(Init(&EventHandle)) return 1; // declare the event handler, return on error
//add initialization code here
// peuplement des variables
// ------------------------
axe_lineaire=LIST(0,0, 50,50, 100,100);
axe_courbeS=LIST(0,0, 10,30, 50,50, 90,70, 100,100);
// ------------------------
// Affectation des axes du joystick au dispositif virtuel crée par target
// ------------------------
MapAxis(&Joystick, JOYX, DX_X_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
MapAxis(&Joystick, JOYY, DX_Y_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
// ------------------------
// affectation des touches
// ------------------------
MapKey(&Throttle, EACON,
EXEC(
"SetCustomCurve(&Joystick, JOYX, axe_lineaire);"
"SetCustomCurve(&Joystick, JOYY, axe_lineaire);"
)
)
;
MapKey(&Throttle, EACOFF,
EXEC(
"SetCustomCurve(&Joystick, JOYX, axe_courbeS);"
"SetCustomCurve(&Joystick, JOYY, axe_courbeS);"
)
)
;
// ------------------------
}
//event handler
int EventHandle(int type, alias o, int x)
{
DefaultMapping(&o, x);
//add event handling code here
}
3eme objectif : alterner entre 3 configurations d’axes personnalisés en utilisant un switch 3 positions
On commence d’abord par créer ses courbes. Pour exemple:
courbes correspondant à une sensibilité faible:
en bleu: LIST(0,36, 10,40, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,60, 100,64)
en orange: LIST(0,30, 10,37, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,63, 100,70)
en jaune: LIST(0,20, 10,35, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,65, 100,80)

Pour pouvoir utiliser ces listes dans une fonctions EXEC, il faut qu’elles aient préalablement été stockées dans des variables, et que ces variables aient elles-mêmes été déclarées. De plus, pour permettre ultérieurement une dissociation des courbes pour l’axe des X (roulis) et pour l’axe des Y (tangage), nous allons déclarer deux variables pour chaque courbe. En tout, nous aurons donc 6 variables à déclarer et à peupler.
// déclaration des variables
// code à insérer en début de script, juste après les include et avant la fonction main
//-------------------------------------------------------------
int axeX_sensibilite_faible_1; // courbe faible niveau 1 --> courbe bleue, axe des X
int axeX_sensibilite_faible_2; // courbe faible niveau 2 --> courbe orange, axe des X
int axeX_sensibilite_faible_3; // courbe faible niveau 3 --> courbe jaune, axe des X
int axeY_sensibilite_faible_1;
int axeY_sensibilite_faible_2;
int axeY_sensibilite_faible_3;
//-------------------------------------------------------------
On peuple ensuite ces variables, dans la boucle main (mais j’imagine qu’il est possible de les décentrer dans un autre fichier). Dans cet exemple, les courbes X et Y sont identiques.
// peuplement des variables avec les valeurs de LIST
// à insérer dans la fonction principale (main)
//-------------------------------------------------------------
axeX_sensibilite_faible_1=LIST(0,36, 10,40, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,60, 100,64);
axeY_sensibilite_faible_1=LIST(0,36, 10,40, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,60, 100,64);
axeX_sensibilite_faible_2=LIST(0,30, 10,36, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,64, 100,70);
axeY_sensibilite_faible_2=LIST(0,30, 10,36, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,64, 100,70);
axeX_sensibilite_faible_3=LIST(0,20, 10,36, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,64, 100,80);
axeY_sensibilite_faible_3=LIST(0,20, 10,36, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,64, 100,80);
//-------------------------------------------------------------
La déclaration d’une courbe sur un switch se ferait alors de la façon suivante, par exemple en utilisant le Pinky Switch
// affectation des touches
// ----------------------------------------------------
//PINKY SWITCH (gauche)
{
//PSB (Off/down/back)
MapKey(&Throttle, PSB,
EXEC(
"SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_1);"
"SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_1);"
)
)
;
//PSM (middle/center)
MapKey(&Throttle, PSM,
EXEC(
"SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_2);"
"SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_2);"
)
)
;
//PSF (on/up/front)
MapKey(&Throttle, PSF,
EXEC(
"SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_3);"
"SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_3);"
)
)
;
}
// ----------------------------------------------------
Et le code complet
include "target.tmh"
// déclaration des variables
// code à insérer en début de script, juste après les include et avant la fonction main
//-------------------------------------------------------------
int axeX_sensibilite_faible_1; // courbe faible niveau 1 --> courbe bleu, premier schema, axe des X
int axeX_sensibilite_faible_2; // courbe faible niveau 2 --> courbe orange, premier schema, axe des X
int axeX_sensibilite_faible_3; // courbe faible niveau 3 --> courbe jaune, premier schema, axe des X
int axeY_sensibilite_faible_1;
int axeY_sensibilite_faible_2;
int axeY_sensibilite_faible_3;
//------------------------------------------------------------
//program startup
int main()
{
if(Init(&EventHandle)) return 1; // declare the event handler, return on error
//add initialization code here
MapAxis(&Joystick, JOYX, DX_X_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
MapAxis(&Joystick, JOYY, DX_Y_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
// peuplement des variables avec les valeurs de LIST
// à insérer dans la fonction principale (main)
//-------------------------------------------------------------
axeX_sensibilite_faible_1=LIST(0,36, 10,40, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,60, 100,64);
axeY_sensibilite_faible_1=LIST(0,36, 10,40, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,60, 100,64);
axeX_sensibilite_faible_2=LIST(0,30, 10,36, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,64, 100,70);
axeY_sensibilite_faible_2=LIST(0,30, 10,36, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,64, 100,70);
axeX_sensibilite_faible_3=LIST(0,20, 10,36, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,64, 100,80);
axeY_sensibilite_faible_3=LIST(0,20, 10,36, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,64, 100,80);
//-------------------------------------------------------------
// affectation des touches
// ------------------------
//PINKY SWITCH (gauche)
{
//PSB (Off/down/back)
MapKey(&Throttle, PSB,
EXEC(
"SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_1);"
"SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_1);"
)
)
;
//PSM (middle/center)
MapKey(&Throttle, PSM,
EXEC(
"SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_2);"
"SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_2);"
)
)
;
//PSF (on/up/front)
MapKey(&Throttle, PSF,
EXEC(
"SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_3);"
"SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_3);"
)
)
;
}
// ------------------------
}
//event handler
int EventHandle(int type, alias o, int x)
{
DefaultMapping(&o, x);
//add event handling code here
}
4eme objectif : alterner entre 6 configurations d’axes personnalisés différentes en utilisant deux switchs
(oui, je sais, c’est inutile, mais c’est rigolo et ça permet de mieux comprendre le fonctionnement de T.A.R.G.E.T. script)
Puisqu’on veut 6 courbes, il nous faudra d’abord créer 3 nouvelles courbes, et donc 3 nouvelles listes de points.
courbes correspondant à une sensibilité moyenne
en bleu: LIST(0,20, 10,30, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,70, 100,80)
en orange : LIST(0,10, 10,35, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,75, 100,90)
en jaune : LIST(0,0, 10,35, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,75, 100,100)

Si on veut garder la possibilité de différencier l’axe des X et des Y, on aura alors 12 variables à déclarer et à peupler.
// déclaration des variables
// code à insérer en début de script, juste après les include et avant la fonction main
//-------------------------------------------------------------
int axeX_sensibilite_faible_1; // courbe faible niveau 1 --> courbe bleu, premier schema, axe des X
int axeX_sensibilite_faible_2; // courbe faible niveau 2 --> courbe orange, premier schema, axe des X
int axeX_sensibilite_faible_3; // courbe faible niveau 3 --> courbe jaune, premier schema, axe des X
int axeX_sensibilite_moyenne_1; // courbe moyenne niveau 1 --> courbe bleu, deuxième schema, axe des X
int axeX_sensibilite_moyenne_2; // courbe moyenne niveau 2 --> courbe orange, deuxième schema, axe des X
int axeX_sensibilite_moyenne_3; // courbe moyenne niveau 3 --> courbe jaune, deuxième schema, axe des X
int axeY_sensibilite_faible_1;
int axeY_sensibilite_faible_2;
int axeY_sensibilite_faible_3;
int axeY_sensibilite_moyenne_1;
int axeY_sensibilite_moyenne_2;
int axeY_sensibilite_moyenne_3;
//-------------------------------------------------------------
On peuple ensuite ces variables.
// peuplement des variables avec les valeurs de LIST
// à insérer dans la fonction principale (main)
//-------------------------------------------------------------
axeX_sensibilite_faible_1=LIST(0,36, 10,40, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,60, 100,64);
axeY_sensibilite_faible_1=LIST(0,36, 10,40, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,60, 100,64);
axeX_sensibilite_faible_2=LIST(0,30, 10,36, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,64, 100,70);
axeY_sensibilite_faible_2=LIST(0,30, 10,36, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,64, 100,70);
axeX_sensibilite_faible_3=LIST(0,20, 10,36, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,64, 100,80);
axeY_sensibilite_faible_3=LIST(0,20, 10,36, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,64, 100,80);
axeX_sensibilite_moyenne_1=LIST(0,20, 10,30, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,70, 100,80);
axeY_sensibilite_moyenne_1=LIST(0,20, 10,30, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,70, 100,80);
axeX_sensibilite_moyenne_2=LIST(0,10, 10,25, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,75, 100,90);
axeY_sensibilite_moyenne_2=LIST(0,10, 10,25, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,75, 100,90);
axeX_sensibilite_moyenne_3=LIST(0,0, 10,25, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,75, 100,100);
axeY_sensibilite_moyenne_3=LIST(0,0, 10,25, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,75, 100,100);
//-------------------------------------------------------------
Mais, comme vous l’aurez deviné, il nous faut alors 2 switchs ayant chacun 3 positions pour pouvoir affecter les 6 courbes. On va donc procéder autrement en utilisant 1 switch 2 positions (pour choisir le niveau faible ou moyen) et 1 switch 3 positions (pour affecter les niveaux 1, 2 et 3 des courbes). Et là, les choses se compliquent puisqu’il va falloir utiliser des conditions if … else et des drapeaux (flags).
Mon code ici pourrait certainement être plus propre, mais l’utilisation des fonctions de T.A.R.G.E.T. entraîne une interaction avec le langage C qui est semble-t-il particulière. Il faudrait pour faire mieux passer entièrement en programmation C, ce qui est possible, mais bien au delà de mes capacités. Ceux qui sont intéressés se tourneront vers les explications de ivanwfr sur les forums de checksix
La notion de drapeaux (flags) est assez bien documentée, mais j’ai eu plus de difficulté pour les conditions if…else, en particulier avec leur interaction avec la fonction EXEC de T.A.R.G.E.T.
A propos des drapeaux
Les drapeaux doivent être déclarés comme variables de type char en début de script.
En théorie, elles peuvent prendre n’importe quelle valeur, même de type chaîne de caractères, mais je n’ai pas réussi ensuite à faire des tests logiques avec. Je me contenterai donc de leur donner des valeurs numériques.
Pour la première étape, nous considérerons une variable appelée sensibilité qui prendra pour valeur 0 quand on veut les courbes de sensibilité faible, et comme valeur 1 quand on veut les courbes de sensibilité moyenne. Le switch FUEL NORM RIGHT (EFRNORM / EFROVER) sera utilisé pour basculer la valeur de la variable.
On déclare le drapeau en début de script
char sensibilite;
Dès lors qu’on utilise des conditions et des drapeaux, il peut être utile d’avoir un message visible pour le débogage. On utilise la fonction printf, mais la syntaxe en est compliquée puisqu’elle se situe à l’intérieur de guillemets.
La déclaration des touches EFROVER et EFRNORM devient alors
//EFROVER (Off/down/back)
MapKey(&Throttle, EFROVER,
EXEC(
"sensibilite=0;"
"printf(\"\\xa sensibilite=faible\");"
)
)
;
//EFRNORM (On/up/front)
MapKey(&Throttle, EFRNORM,
EXEC(
"sensibilite=1;"
"printf(\"\\xa sensibilite=moyenne\");"
)
)
;
A propos des conditions if … else
Le but étant que, selon la position du switch FUEL NORM RIGHT(et donc selon la valeur du drapeau), le switch PINKIE SWITCH nous assigne la valeur de la courbe demandée
– EFROVER → drapeau sensibilite = 0 → sensibilité faible
→ PSB (pinkie switch back) = sensibilité faible niveau 1
→ PSM (pinkie switch middle) = sensibilité faible niveau 2
→ PSF (pinkie switch front) = sensibilité faible niveau 3
– EFRNORM → drapeau sensibilite = 1 → sensibilité moyenne
→ PSB (pinkie switch back) = sensibilité moyenne niveau 1
→ PSM (pinkie switch middle) = sensibilité moyenne niveau 2
→ PSF (pinkie switch front) = sensibilité moyenne niveau 3
Basiquement, pour le premier cas, on a la syntaxe suivante sur PSB
//PSB (Off/down/back)
MapKey(&Throttle, PSB,
EXEC(
"if(sensibilite==1) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_moyenne_1);"
"else if(sensibilite==0) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_1);"
)
)
;
Le principal souci que j’ai rencontré avec ces boucles if, c’est que je n’ai pas trouvé comment effectuer deux actions distinctes avec la même condition. Je dois donc, pour chaque axe, créer une condition, ce qui complique la syntaxe et oblige à utiliser la fonction CHAIN (qui permet d’effectuer plusieurs actions)
L’exemple devient alors, avec une autre syntaxe pour le test logique et pour chaque valeur du pinkie switch
//PSB (Off/down/back)
MapKey(&Throttle, PSB,
CHAIN(
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_moyenne_1);"
"else SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_1);"
),
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_moyenne_1);"
"else SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_1);"
),
EXEC(
"if(sensibilite) printf(\"\\xa sensibilite reglee sur moyen niveau 1\");"
"else printf(\"\\xa sensibilite reglee sur faible niveau 1\");"
)
)
)
;
//PSM (Middle/center)
MapKey(&Throttle, PSM,
CHAIN(
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_moyenne_2);"
"else SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_2);"
),
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_moyenne_2);"
"else SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_2);"
),
EXEC(
"if(sensibilite) printf(\"\\xa sensibilite reglee sur moyen niveau 2\");"
"else printf(\"\\xa sensibilite reglee sur faible niveau 2\");"
)
)
)
;
//PSF (On/up/front)
MapKey(&Throttle, PSF,
CHAIN(
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_moyenne_3);"
"else SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_3);"
),
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_moyenne_3);"
"else SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_3);"
),
EXEC(
"if(sensibilite) printf(\"\\xa sensibilite reglee sur moyen niveau 3\");"
"else printf(\"\\xa sensibilite reglee sur faible niveau 3\");"
)
)
)
;
5ème objectif : switcher automatiquement dans la bonne courbe selon la position de chaque switch
Si je ne vous ai pas trop perdus, vous aurez remarqué que mes commandes précédentes occasionnaient le problème suivant :
Si je suis dans une courbe faible niveau 1 et que je veux utiliser une courbe moyenne niveau 1, il faut:
- basculer le switch EFROVER vers EFRNORM (pour changer le drapeau sensibilite de 0 vers 1)
- basculer le switch PSB vers PSM (ce qui a pour effet de nous mettre en courbe moyen niveau 2, alors que ce n’est pas souhaité)
- basculer le switch PSM vers PSB (pour enfin affecter la courbe moyen niveau 1)
On va ici essayer de rendre cela automatique, et donc faire en sorte que n’importe quel changement dans la position d’un des switchs nous mette automatiquement la courbe désirée. Il nous faudra pour cela utiliser un autre drapeau appelé sensibilite_niveau qui prendra comme valeur 1, 2 ou 3 selon le niveau de sensibilité désiré. Elle sera affectée selon les positions respectives PSB, PSM et PSF.
Pour schématiser, le comportement de chacun des switchs sera le suivant :
– bascule sur EFROVER
→ affectation du drapeau sensibilite à la valeur 0
→ test de la valeur du drapeau sensibilite_niveau et affectation de la courbe faible de niveau correspondante
– bascule sur EFRNORM
→ affectation du drapeau sensibilite à la valeur 1
→ test de la valeur du drapeau sensibilite_niveau et affectation de la courbe moyenne de niveau correspondante
– bascule sur PSB
→ affectation du drapeau sensibilite_valeur à la valeur 1
→ test de la valeur du drapeau sensibilite et affectation de la courbe correspondante de niveau 1 (faible ou moyenne)
– bascule sur PSM
→ affectation du drapeau sensibilite_valeur à la valeur 2
→ test de la valeur du drapeau sensibilite et affectation de la courbe correspondante de niveau 2 (faible ou moyenne)
– bascule sur PSF
→ affectation du drapeau sensibilite_valeur à la valeur 3
→ test de la valeur du drapeau sensibilite et affectation de la courbe correspondante de niveau 3 (faible ou moyenne)
En code, ça donne ça :
On déclare les variables et les drapeaux dans le début du script
int axeX_sensibilite_faible_1;
int axeX_sensibilite_faible_2;
int axeX_sensibilite_faible_3;
int axeX_sensibilite_moyenne_1;
int axeX_sensibilite_moyenne_2;
int axeX_sensibilite_moyenne_3;
int axeY_sensibilite_faible_1;
int axeY_sensibilite_faible_2;
int axeY_sensibilite_faible_3;
int axeY_sensibilite_moyenne_1;
int axeY_sensibilite_moyenne_2;
int axeY_sensibilite_moyenne_3;
char sensibilite;
char sensibilite_niveau;
On affecte les valeurs des listes aux variables correspondantes
axeX_sensibilite_faible_1=LIST(0,37, 10,40, 20,43, 30,45, 40,47, 50,50, 60,53, 70,55, 80,57, 90,60, 100,63);
axeY_sensibilite_faible_1=LIST(0,37, 10,40, 20,43, 30,45, 40,47, 50,50, 60,53, 70,55, 80,57, 90,60, 100,63);
axeX_sensibilite_faible_2=LIST(0,30, 10,37, 20,43, 30,45, 40,47, 50,50, 60,53, 70,55, 80,57, 90,63, 100,70);
axeY_sensibilite_faible_2=LIST(0,30, 10,37, 20,43, 30,45, 40,47, 50,50, 60,53, 70,55, 80,57, 90,63, 100,70);
axeX_sensibilite_faible_3=LIST(0,20, 10,35, 20,43, 30,45, 40,47, 50,50, 60,53, 70,55, 80,57, 90,65, 100,80);
axeY_sensibilite_faible_3=LIST(0,20, 10,35, 20,43, 30,45, 40,47, 50,50, 60,53, 70,55, 80,57, 90,65, 100,80);
axeX_sensibilite_moyenne_1=LIST(0,20, 10,30, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,70, 100,80);
axeY_sensibilite_moyenne_1=LIST(0,20, 10,30, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,70, 100,80);
axeX_sensibilite_moyenne_2=LIST(0,10, 10,25, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,75, 100,90);
axeY_sensibilite_moyenne_2=LIST(0,10, 10,25, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,75, 100,90);
axeX_sensibilite_moyenne_3=LIST(0,0, 10,25, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,75, 100,100);
axeY_sensibilite_moyenne_3=LIST(0,0, 10,25, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,75, 100,100);
On déclare les actions pour chaque bouton.
D’abord EFROVER et EFRNORM
// FUEL NORM RIGHT
{
//EFROVER (Off/down/back)
MapKey(&Throttle, EFROVER,
CHAIN(
EXEC(
"sensibilite=0;"
"printf(\"\\xa sensibilite=faible\");"
),
EXEC(
"if (sensibilite_niveau==1) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_1);"
"else if (sensibilite_niveau==2) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_2);"
"else if (sensibilite_niveau==3) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_3);"
),
EXEC(
"if (sensibilite_niveau==1) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_1);"
"else if (sensibilite_niveau==2) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_2);"
"else if (sensibilite_niveau==3) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_3);"
),
EXEC(
"if (sensibilite_niveau==1) printf(\"\\xa sensibilite reglee sur faible niveau 1\");"
"else if (sensibilite_niveau==2) printf(\"\\xa sensibilite reglee sur faible niveau 2\");"
"else if (sensibilite_niveau==3) printf(\"\\xa sensibilite reglee sur faible niveau 3\");"
)
)
)
;
//EFRNORM (On/up/front)
MapKey(&Throttle, EFRNORM,
CHAIN(
EXEC(
"sensibilite=1;printf(\"\\xa sensibilite=moyenne\");"
),
EXEC(
"if (sensibilite_niveau==1) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_moyenne_1);"
"else if (sensibilite_niveau==2) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_moyenne_2);"
"else if (sensibilite_niveau==3) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_moyenne_3);"
),
EXEC(
"if (sensibilite_niveau==1) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_moyenne_1);"
"else if (sensibilite_niveau==2) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_moyenne_2);"
"else if (sensibilite_niveau==3) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_moyenne_3);"
),
EXEC(
"if (sensibilite_niveau==1) printf(\"\\xa sensibilite reglee sur moyenne niveau 1\");"
"else if (sensibilite_niveau==2) printf(\"\\xa sensibilite reglee sur moyenne niveau 2\");"
"else if (sensibilite_niveau==3) printf(\"\\xa sensibilite reglee sur moyenne niveau 3\");"
)
)
)
;
}
Puis PSB, PSM et PSF
//PINKY SWITCH (gauche)
{
//PSB (Off/down/back)
MapKey(&Throttle, PSB,
CHAIN(
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_moyenne_1);"
"else SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_1);"
),
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_moyenne_1);"
"else SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_1);"
),
EXEC(
"sensibilite_niveau=1;"
),
EXEC(
"if(sensibilite) printf(\"\\xa sensibilite reglee sur moyen niveau 1\");"
"else printf(\"\\xa sensibilite reglee sur faible niveau 1\");"
)
)
)
;
//PSM (middle/center)
MapKey(&Throttle, PSM,
CHAIN(
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_moyenne_2);"
"else SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_2);"
),
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_moyenne_2);"
"else SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_2);"
),
EXEC(
"sensibilite_niveau=2;"
),
EXEC(
"if(sensibilite) printf(\"\\xa sensibilite reglee sur moyen niveau 2\");"
"else printf(\"\\xa sensibilite reglee sur faible niveau 2\");"
)
)
)
;
//PSF (On/up/front)
MapKey(&Throttle, PSF,
CHAIN(
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_moyenne_3);"
"else SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_3);"
),
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_moyenne_3);"
"else SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_3);"
),
EXEC(
"sensibilite_niveau=3;"
),
EXEC(
"if(sensibilite) printf(\"\\xa sensibilite reglee sur moyen niveau 3\");"
"else printf(\"\\xa sensibilite reglee sur faible niveau 3\");"
)
)
)
;
}
Et finalement un code complet à copier/coller
include "target.tmh"
// déclaration des variables
// code à insérer en début de script, juste après les include et avant la fonction main
//-------------------------------------------------------------
int axeX_sensibilite_faible_1; // courbe faible niveau 1 --> courbe bleu, premier schema, axe des X
int axeX_sensibilite_faible_2; // courbe faible niveau 2 --> courbe orange, premier schema, axe des X
int axeX_sensibilite_faible_3; // courbe faible niveau 3 --> courbe jaune, premier schema, axe des X
int axeX_sensibilite_moyenne_1;
int axeX_sensibilite_moyenne_2;
int axeX_sensibilite_moyenne_3;
int axeY_sensibilite_faible_1;
int axeY_sensibilite_faible_2;
int axeY_sensibilite_faible_3;
int axeY_sensibilite_moyenne_1;
int axeY_sensibilite_moyenne_2;
int axeY_sensibilite_moyenne_3;
//------------------------------------------------------------
char sensibilite;
char sensibilite_niveau;
//program startup
int main()
{
if(Init(&EventHandle)) return 1; // declare the event handler, return on error
//add initialization code here
MapAxis(&Joystick, JOYX, DX_X_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
MapAxis(&Joystick, JOYY, DX_Y_AXIS, AXIS_NORMAL, MAP_ABSOLUTE);
// peuplement des variables avec les valeurs de LIST
// à insérer dans la fonction principale (main)
//-------------------------------------------------------------
axeX_sensibilite_faible_1=LIST(0,36, 10,40, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,60, 100,64);
axeY_sensibilite_faible_1=LIST(0,36, 10,40, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,60, 100,64);
axeX_sensibilite_faible_2=LIST(0,30, 10,36, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,64, 100,70);
axeY_sensibilite_faible_2=LIST(0,30, 10,36, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,64, 100,70);
axeX_sensibilite_faible_3=LIST(0,20, 10,36, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,64, 100,80);
axeY_sensibilite_faible_3=LIST(0,20, 10,36, 20,43, 30,46, 40,48, 50,50, 60,52, 70,54, 80,57, 90,64, 100,80);
axeX_sensibilite_moyenne_1=LIST(0,20, 10,30, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,70, 100,80);
axeY_sensibilite_moyenne_1=LIST(0,20, 10,30, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,70, 100,80);
axeX_sensibilite_moyenne_2=LIST(0,10, 10,25, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,75, 100,90);
axeY_sensibilite_moyenne_2=LIST(0,10, 10,25, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,75, 100,90);
axeX_sensibilite_moyenne_3=LIST(0,0, 10,25, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,75, 100,100);
axeY_sensibilite_moyenne_3=LIST(0,0, 10,25, 20,35, 30,40, 40,45, 50,50, 60,55, 70,60, 80,65, 90,75, 100,100);
//-------------------------------------------------------------
// FUEL NORM RIGHT
{
//EFROVER (Off/down/back)
MapKey(&Throttle, EFROVER,
CHAIN(
EXEC(
"sensibilite=0;"
"printf(\"\\xa sensibilite=faible\");"
),
EXEC(
"if (sensibilite_niveau==1) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_1);"
"else if (sensibilite_niveau==2) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_2);"
"else if (sensibilite_niveau==3) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_3);"
),
EXEC(
"if (sensibilite_niveau==1) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_1);"
"else if (sensibilite_niveau==2) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_2);"
"else if (sensibilite_niveau==3) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_3);"
),
EXEC(
"if (sensibilite_niveau==1) printf(\"\\xa sensibilite reglee sur faible niveau 1\");"
"else if (sensibilite_niveau==2) printf(\"\\xa sensibilite reglee sur faible niveau 2\");"
"else if (sensibilite_niveau==3) printf(\"\\xa sensibilite reglee sur faible niveau 3\");"
)
)
)
;
//EFRNORM (On/up/front)
MapKey(&Throttle, EFRNORM,
CHAIN(
EXEC(
"sensibilite=1;printf(\"\\xa sensibilite=moyenne\");"
),
EXEC(
"if (sensibilite_niveau==1) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_moyenne_1);"
"else if (sensibilite_niveau==2) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_moyenne_2);"
"else if (sensibilite_niveau==3) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_moyenne_3);"
),
EXEC(
"if (sensibilite_niveau==1) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_moyenne_1);"
"else if (sensibilite_niveau==2) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_moyenne_2);"
"else if (sensibilite_niveau==3) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_moyenne_3);"
),
EXEC(
"if (sensibilite_niveau==1) printf(\"\\xa sensibilite reglee sur moyenne niveau 1\");"
"else if (sensibilite_niveau==2) printf(\"\\xa sensibilite reglee sur moyenne niveau 2\");"
"else if (sensibilite_niveau==3) printf(\"\\xa sensibilite reglee sur moyenne niveau 3\");"
)
)
)
;
}
//PINKY SWITCH (gauche)
{
//PSB (Off/down/back)
MapKey(&Throttle, PSB,
CHAIN(
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_moyenne_1);"
"else SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_1);"
),
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_moyenne_1);"
"else SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_1);"
),
EXEC(
"sensibilite_niveau=1;"
),
EXEC(
"if(sensibilite) printf(\"\\xa sensibilite reglee sur moyen niveau 1\");"
"else printf(\"\\xa sensibilite reglee sur faible niveau 1\");"
)
)
)
;
//PSM (middle/center)
MapKey(&Throttle, PSM,
CHAIN(
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_moyenne_2);"
"else SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_2);"
),
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_moyenne_2);"
"else SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_2);"
),
EXEC(
"sensibilite_niveau=2;"
),
EXEC(
"if(sensibilite) printf(\"\\xa sensibilite reglee sur moyen niveau 2\");"
"else printf(\"\\xa sensibilite reglee sur faible niveau 2\");"
)
)
)
;
//PSF (On/up/front)
MapKey(&Throttle, PSF,
CHAIN(
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_moyenne_3);"
"else SetCustomCurve(&Joystick, JOYX, axeX_sensibilite_faible_3);"
),
EXEC(
"if(sensibilite) SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_moyenne_3);"
"else SetCustomCurve(&Joystick, JOYY, axeY_sensibilite_faible_3);"
),
EXEC(
"sensibilite_niveau=3;"
),
EXEC(
"if(sensibilite) printf(\"\\xa sensibilite reglee sur moyen niveau 3\");"
"else printf(\"\\xa sensibilite reglee sur faible niveau 3\");"
)
)
)
;
}
}
//event handler
int EventHandle(int type, alias o, int x)
{
DefaultMapping(&o, x);
//add event handling code here
}
Voilà voilà, je sais que cela n’est guère utile in-game, mais, sait-on jamais, cela pourra tout de même servir à quelqu’un. Si quelqu’un souhaite utiliser / modifier / distribuer ceci, grand bien lui fasse, tout est libre de droit 