taton a écrit:
Tout d'abord, le function Callback_time(s,m,h)
d'ou viennenet ces arguments s m et h ?
ils sont réutilisés dnas les calculs ci-dessous via image rotate.
Si je prend par exemple : img_rotate(img_seconds, s*6)
je sais qu'il doit me faire tourner mon image "img_seconde de 6° par secondes, d'où le *6, mais je ne comprend pas d'où viens ce s et ce qu'il "contient".
Bonjour Nathan
Dans la fin du code, tu as une section
fsx_variable_subscribe("LOCAL TIME", "Seconds",
"LOCAL TIME", "Minutes",
"LOCAL TIME", "Hours",Callback_time)
C'est cette ligne qui appelle la fonction définie plus haut
Callback_time, en lui passant comme paramètres les variables précédemment souscrites auprès de FSX via le plugin d'Air Manager.
Les variables sont transmises dans l'ordre de leur déclaration, à savoir d'abord LOCAL TIME en secondes (et c'est stocké dans la variable s locale à la fonction), LOCAL TIME en Minutes (variable m) et LOCAL TIME en heures (le h).
En clair avec la ligne
fsx_variable subscribe, tu demandes au plugin d'Air Manager d'envoyer à chaque modification de la variable Simconnect LOCAL TIME par FSX, l'heure locale en secondes, en minutes et en heures à la fonction Callback_time, ces paramètres sont stockés dans les variables temporaires s,m et h.
Attention les variables s,m et h ne sont "visibles" (utilisables) que dans le cadre de la fonction appelée, ici
Callback_time, c'est pour cela qu'elles sont temporaires...
Je reconnais que le mode de fonctionnement de la fonction fsx_variable subscribe n'est pas clair de ce côté là.
Il faut veiller à toujours insérer les souscriptions de variables (FSX et/ou XPlane) APRES la ou les fonctions appelées, c'est une contrainte du langage Lua.
Pour le reste tu as compris le fonctionnement du code, bravo.
On associe dans la fonction Callback_time la rotation de chaque élément graphique (les aiguilles) aux variables s (rotation de 6 degrés toutes les secondes,) m et h, etc...
Enfin pour terminer, du coup j'ai regardé le code original de l'horloge du Baron 58 , et effectivement il ya un bug:
- Code: Tout sélectionner
xpl_dataref_subscribe("sim/cockpit2/clock_timer/local_time_seconds", "INT",
"sim/cockpit2/clock_timer/local_time_minutes", "INT",
"sim/cockpit2/clock_timer/local_time_hours", "INT", PT_time)
fsx_variable_subscribe("ZULU TIME", "Seconds",
"ZULU TIME", "Minutes",
"ZULU TIME", "Hours",
"TIME ZONE OFFSET", "Seconds",
"TIME ZONE OFFSET", "Minutes",
"TIME ZONE OFFSET", "Hours", PT_time)
Avec Xplane, on récupère bien l'heure locale soit trois paramètres, alors que avec FSX on récupère d'abord l'heure GMT en secondes, minutes et heures (ZULU TIME), puis le décalage avec l'heure locale (TIME ZONE OFFSET) soit 6 paramètres en tout.
Comme la fonction appelée
Pt_Time ne reçoit au final que trois paramètres (s,m,h), elle ne prendra en compte que les trois premiers paramètres souscrits et n'affichera donc que l'heure ZULU (en tous les cas lorsque l'horloge est utilisée avec FSX).
Tu as donc bien fait de supprimer les trois derniers paramètres qui ne sont pas utilisés, et de remplacer ZULU TIME par LOCAL TIME pour obtenir l'heure locale.
Petit ajustement esthétique:
Comme tu l'as deviné, l'ordre d'affichage des éléments graphiques dépend effectivement de l'ordre de leur déclaration dans le code, en partant de l'arrière vers l'avant-plan, aussi je te conseille de mettre la ligne
- Code: Tout sélectionner
img_seconds = img_add_fullscreen("watch_second_hand.png")
APRES les deux lignes
- Code: Tout sélectionner
img_small = img_add_fullscreen("watch_small_hand.png")
img_big = img_add_fullscreen("watch_big_hand.png")
pour que l'aiguille des secondes s'affiche en avant plan comme cela devrait être normalement.
Jacques