AP1 et AP2

Sinon je continue mon investigation, cela semble être un problème avec Air Manager et FS2020. Il y a avec la nouvelle v4.2 possibilité d'utiliser des scripts RPN directement, je vais voir si ça résout mon problème.
 
Bon j'ai essayé le script suivant, ça ne fonctionne toujours pas.
Lua:
fs2020_rpn("1 (>L:S_FCU_EFIS1_LS, Number) (SLEEP:100) 2 (>L:S_FCU_EFIS1_LS, Number)")
 
Enfin!
C'était dû à une particularité de la fonction d'Air manager qui gère les boutons des joystick s: elle est en fait appelée deux fois à l'appui du bouton ET lorsqu'il est relâché. Donc ici pas besoin de timer, j'envoie la valeur 1 quand le bouton est appuyé, et la valeur 2 quand il est relâché, comme l'indique le script RPN.


Lua:
function callback_joystick_0 (type, index, value) -- type (joystick, bouton), index (numéro du bouton), value (pressé : true, relâché: false)

    if index == 13 then -- button index 13
       if value == true then -- button pressed
              fs2020_variable_write("L:S_FCU_EFIS1_LS", "Number", 1)
       else -- button released
              fs2020_variable_write("L:S_FCU_EFIS1_LS", "Number",2)
       end -- if
  end --if

end -- function

list = game_controller_list()
game_controller_add(list[0], callback_joystick_0)
 
Dernière édition:
Mais on peut aussi définir la fonction appelée directement sans lui donner de nom (inline) comme cela:
Lua:
timer_start(100, function ()
blabla....
end -- fonction
)
La parenthèse fermante après le end (de la fonction inline) sert à fermer la fonction timer_start

Cette technique fait du code plus compact.
Alors, voila une structure que je ne connaissais pas!...:giggle::giggle::giggle:

En fait, je viens de la trouver dans leur doc lua.org :
Chapitre

6 – More about Functions​

...

Je l'ai comprise... Mais, je ne suis pas prêt de l'utiliser!...:love::love::love:
Cela rends le code peu lisible...:(
Bonjour, la maintenance applicative derrière...:love::love::love:


Lua:
function callback_joystick_0 (type, index, value) -- type (joystick, bouton), index (numéro du bouton), value (pressé : true, relâché: false)

if index == 13 then -- button index 13
if value == true then -- button pressed
fs2020_variable_write("L:S_FCU_EFIS1_LS", "Number", 1)
else -- button released
fs2020_variable_write("L:S_FCU_EFIS1_LS", "Number",2)
end
end

list = game_controller_list()
game_controller_add(list[0], callback_joystick_0)
Par contre ton nouveau code, je l'ai compris en une fraction de seconde!...;)
C'est la copie conforme de mes structures de développement.(y)


Je peux même te proposer la petite amélioration suivante afin d'accélérer l'exécution de celui-ci...:)

-----
if index == 13 then -- button index 13
if value == true then -- button pressed
fs2020_variable_write("L:S_FCU_EFIS1_LS", "Number", 1)
do return end

else -- button released
fs2020_variable_write("L:S_FCU_EFIS1_LS", "Number",2)
do return end

end
end
-----

Le do return end va te permettre de sortir directement de la fonction sans avoir à évaluer le reste... COOL, n'est il pas!...;G)


P.S. :
Vérifie, j'ai l'impression qu'il te manque un "end"...

Tu as deux "if" => Donc 2 "end"
+
La fermeture de "function" => Donc un autre "end"



The statement

function f () body end
 
Dernière édition:
Alors, voila une structure que je ne connaissais pas!...:giggle::giggle::giggle:

En fait, je viens de la trouver dans leur doc lua.org :
Chapitre

6 – More about Functions​

...

Je l'ai comprise... Mais, je ne suis pas prêt de l'utiliser!...:love::love::love:
Cela rends le code peu lisible...:(
Bonjour, la maintenance applicative derrière...:love::love::love:



Par contre ton nouveau code, je l'ai compris en une fraction de seconde!...;)
C'est la copie conforme de mes structures de développement.(y)


Je peux même te proposer la petite amélioration suivante afin d'accélérer l'exécution de celui-ci...:)

-----
if index == 13 then -- button index 13
if value == true then -- button pressed
fs2020_variable_write("L:S_FCU_EFIS1_LS", "Number", 1)
do return end

else -- button released
fs2020_variable_write("L:S_FCU_EFIS1_LS", "Number",2)
do return end

end
end
-----

Le do return end va te permettre de sortir directement de la fonction sans avoir à évaluer le reste... COOL, n'est il pas!...;G)


P.S. :
Vérifie, j'ai l'impression qu'il te manque un "end"...

Tu as deux "if" => Donc 2 "end"
+
La fermeture de "function" => Donc un autre "end"



The statement

function f () body end
T'inquiètes Alain (comme dirait mon fils), c'est juste un extrait de mon code qui est bien plus long, donc il est possible qu'il manque un end dans l'extrait publié, mais le compilateur Lua JIT me l'aurait dit!
[edit] effectivement, il manquait un end pour fermer la fonction dans l'extrait publié, bien vu, c'est corrigé)

Merci pour le "do return end", je ne connaissais pas, mais dans ce cas précis, j'utilise elseif, ce qui veut dire que normalement le reste n'est pas évalué dès qu'un if est testé VRAI

Pour l'inline, assez d'accord sur la lisibilité du code, mais c'est comme tout, au bout d'un moment on s'habitue...
Ceci dit l'utilisation de l'inline est obligatoire pour certaines fonctions Air Manager en particulier les graphiques vectoriels (canvas draw), ou la lecture de fichiers JSON.
 
Dernière édition:
D'ailleurs, si ça intéresse du monde, je peux publier ici l'instrument Air Manager "hardware" (sans graphisme), qui permet d'affecter des fonctions du Fenix (ou tout autre simu MSFS) aux boutons du TCA quadrant et Joystick.

Je pense séparer les affectations des Lvars dans un fichier JSON (ou même mieux CSV), ça sera plus facile à modifier avec un simple éditeur de texte, sans avoir à bidouiller le code Lua.

Ca fera à peu près les même fonctions que Lorby, SPAD Next ou FSUIPC que je ne possède pas.
Laissez moi quelques jours.
 
Dernière édition:
j'utilise elseif, ce qui veut dire que normalement le reste n'est pas évalué dès qu'un if est testé VRAI
Juste de la structure de contrôle... Pas de la fonction!...;)

Là, le "do return end" te fait sortir de la fonction directement. Sans évaluer le reste!...

Donc, comme tu viens de dire que tu n'avais pas mis tout ton code dans le message, ma proposition peut ne pas te convenir et planter la logique de ta fonction.:(:(:(
 
Juste de la structure de contrôle... Pas de la fonction!...;)

Là, le "do return end" te fait sortir de la fonction directement. Sans évaluer le reste!...

Donc, comme tu viens de dire que tu n'avais pas mis tout ton code dans le message, ma proposition peut ne pas te convenir et planter la logique de ta fonction.:(:(:(
j'essaierai à l'occasion, merci pour le tuyau
 
Retour
Haut