Update du développement
Je le mets ici pour mémorisation mais également pour informer Gilles ou d'autre des solutions retenues et éventuellement retenir des suggestions.
Les commandes :J'ai trouvé une façon très simple de faire fonctionner les commandes KamovPit > SIOC > DCS.
Je garde également la compatibilité avec les commandes "type FC3", puisque certaines fonctionnent encore sous BS.
J'ai donc deux canaux d'envoi des commandes :
- Le Chan 1 de SIOC envoie les commandes traditionnelle à DCS avec "LoSetCommand(valeur)"
Par exemple, l'envoi de 71 sur le Canal 1
CODE
LoSetCommand(71)
va fermer la porte de l'hélico
@Etcher .... YOP prépare les bières
Ca marche déjà sur la version 5002 actuellement en ligne
- Le Chan 2 de SIOC envoie les commande type BS2
Le nombre envoyé est un nombre à 8 chiffres type : TDDBBBVV
où
T = Le type (2way/rotary ...)
DD = Le device où se trouve le switch
BBB = Le n° de bouton
VV = l'Argument
Dans le KTZ_Sioc.lua, il y a un examen de la string reçue, puis envoi de la commande :
CODE
if typbouton ==1 then
GetDevice(device):performClickableAction(3000+bouton,val*1000)
La gestion dans html :Sur le KaTZ-Pit chaque voyant est en lecture uniquement, et chaque commande est une commande "toggle" automatique (i.e. le même code est envoyé à chaque fois).
A l'inverse, sous BS2, on a le problème potentiel de synchronisation entre les actions effectuées dans le jeu, et celle sur le Kamov-Pit.
J'ai donc adopté le principe suivant :
Les positions des switchs sont récupérés depuis MainPanel : exemple
CODE
envoyerInfo(110,MainPanel:get_argument_value(200) * 1000)-- Voyant pompe Fuel AV
Elles sont envoyés au KamovPit qui met à jour les voyants associés, mais aussi un code de position.
Ce code est stocké dans l'élément html sous la forme de "data-internal-id"
En fait, le code chargé dans l'élément est de code de commande pour SIOC>DCS, pour l'action opposée
Donc quand on click sur le voyant, il suffit de récupérer ce code et de l'envoyer.
Par exemple, quand le switch de la pompe Fuel AV est manoeuvré, sa nouvelle valeur (0 ou 1000) est transmise à KaTZPit_data["Fuel_M_AVl"]
Puis tous les 10eme de seconde on a le code javascript qui tourne suivant :
CODE
if (KaTZPit_data["Fuel_M_AV"] == 1000) {
$("#F-Pump-AV").attr('src','FV_Pump_M.gif')
$("#F-Pump-AV").data({'internal-id':'10300100'});
}
else {
$("#F-Pump-AV").attr('src','FV_Pump_A.gif')
$("#F-Pump-AV").data({'internal-id':'10300101'})
}
Sur la partie html, il suffit pour chaque bouton d'associer une fonction onclick
onclick="java script:CmdSIOCDCS(element) (ou onmouseover)
et de créer la fonction d'envoi
CODE
function CmdSiocDCS(Element) {
var iddata= $("#Element").data('internal-id')
var commande_DCS = "2="+ iddata
serverws_send(commande_DCS)
console.log("Envoi de la commande ..", commande_DCS);
}
De ce fait, la récupération des positions vient uniquement de mainpanel, et fonctionnera sur tous les hélicoptères
Pour l'envoi, çà marche sur KA50, il faut que je teste sur MI8
La maintenance est facile puisque tous les codes d'envoi sont regroupés dans le fichier javascript.
Je ne veux pas crier victoire trop vite, mais je pense que la transposition aux différentes mod ne devrait pas être trop compliqué
Miaou