arcc a écrit:Bonsoir
Les deux instruments sont compatibles FSX/P3D et XPlane, on peut même enlever les bezels pour les cockpits hardware comme le tien.
Je rebondis sur les messages précèdent. Ton HSI est vraiment superbe, par contre, si j'ai bien reussi à enlever le "Bezel" et les vis, je ne sais pas comment retirer les deux "boutons" (dialhsi et headingbug) dans le script.
J'ai trouver les lignes
- Code: Tout sélectionner
 -- DIAL ADD --
dial_OBS = dial_add("dialhsi.png", 18, 368, 85, 85, new_obs)
dial_BUG = dial_add("headingbug.png", 409, 368, 85, 85, new_heading)
dial_click_rotate(dial_OBS, 5)
dial_click_rotate(dial_BUG, 5)
On peux les retirer dans le script ou je dois faire une image transparente (en blanc pur ) avec "Skinman" enregistré en .png with alpha.
A+
Christian
 
Merci Christian
Oui c'est ça il suffit de mettre les quatres lignes suivantes en commentaire en rajoutant deux 
-- devant chaque ligne.
C'est grossier, mais ça marche. 
Je n'ai pas mis cette version de code "customisée" en ligne sur le store, alors la voici spécialement pour vous:
la variable "display_dials" a été rajoutée dans la section customisation, il suffit de la mettre à false pour que les boutons disparaissent également.
Il suffit de copier ce code et de le remplacer intégralement dans le script d'origine.
- Code: Tout sélectionner
 ---------------------------------------------------------------
-- BENDIX/KING CROWN SILVER KING SERIE                       --
-- KI525A HSI (ELECTRICAL)                                   --
-- version 1.3a   
-- (fixed loc Scale position at startup)       
-- (new variable to display or not the Bezel)             
-- J. ZAHAR 04/2016                                          --
-- based on original by MacnFly (Thanks Mac!)                --
-- Modeled using the user manual of the real instrument      --
-- includes failure flags when power OFF                     --
-- FSX and Xplane version  
---------------------------------------------------------------
---------------------------------------------------------------
-- DISPLAY VARIABLES SECTION                                 --
-- Set to True or False according to taste                   --
---------------------------------------------------------------
display_frame=false -- displays the rectangular frame
display_screws=false -- displays the mounting screws
display_bezel=false -- displays the external bezel
display_dials=false -- displays the dials
FSX_HSI_source=0 -- NAV source for the HSI (FSX only!)--> 0:NAV1, 1:NAV2, 2:GPS (no GS)
gyro_spinup_duration=15000 -- time (in msec) before elec gyro is at full speed when master switch has been switched ON (default 10-15  sec)
---------------------------------------------------------------
-- END OF DISPLAY VARIABLES SECTION                          --
-- DO NOT MODIFIY CODE PAST THIS POINT !!!                   --
---------------------------------------------------------------
-- Global variables
is_failed=false
gbl_cur_hdef=0
gbl_cur_vdef=119
gbl_cur_bearing=0
gbl_target_hdef=0
gbl_target_vdef=20
gbl_target_bearing=0
gbl_factor1= 0.25
gbl_factor2= 0.25
gbl_factor3= 0.3
-- DIAL FUNCTIONS --
function new_obs(obsset)
   if obsset == -1 then
   if FSX_HSI_source==0 then --NAV1
      xpl_command("sim/radios/obs1_down")
      fsx_event("VOR1_OBI_DEC")
      end
   if FSX_HSI_source==1 then -- NAV2
      xpl_command("sim/radios/obs2_down")
      fsx_event("VOR2_OBI_DEC")
      end
   if FSX_HSI_source==2 then -- GPS
      xpl_command("sim/radios/obs1_down")
      fsx_event("VOR1_OBI_DEC")
      end
   elseif obsset == 1 then
   if FSX_HSI_source==0 then
      xpl_command("sim/radios/obs1_up")
      fsx_event("VOR1_OBI_INC")
      end
   if FSX_HSI_source==1 then
      xpl_command("sim/radios/obs2_up")
      fsx_event("VOR2_OBI_INC")
      end
   if FSX_HSI_source==2 then
      xpl_command("sim/radios/obs1_up")
      fsx_event("VOR1_OBI_INC")
      end
   end
end
function new_heading(headingset)
   if headingset == -1 then
      xpl_command("sim/autopilot/heading_down")
      fsx_event("HEADING_BUG_DEC")
   elseif headingset == 1 then
      xpl_command("sim/autopilot/heading_up")
      fsx_event("HEADING_BUG_INC")
      end
   
end
-- GRAPHICS --
if display_frame==true then
   img_add_fullscreen("HSI_background frame.png")
end
img_add_fullscreen("HSI_background.png")
img_rose = img_add_fullscreen("HSI_compas rose.png")
img_bug = img_add_fullscreen("HSI_headingbug.png")
img_neddle = img_add_fullscreen("HSI_Needle arrow.png")
img_center_to = img_add_fullscreen("HSI_to flag.png")
img_center_from = img_add_fullscreen("HSI_from flag.png")
img_center = img_add_fullscreen("HSI_loc scale.png")
img_center_neddle = img_add_fullscreen("HSI_Needle center.png")
img_hdg_flag = img_add_fullscreen("HSI_flag HDG right.png")
img_nav_flag = img_add_fullscreen("HSI_flag NAV left.png")
img_add_fullscreen("HSI_inner bezel.png")
img_glideslope_markers = img_add_fullscreen("HSI_ILS bugs.png")--,0,-100,512,512)
img_add_fullscreen("HSI_inner bezel2.png")
if display_screws==true then
   img_add_fullscreen("HSI_Bezel ext.png")
end
   if display_screws==true then
   img_add_fullscreen("HSI_screws.png")
end
--img_add_fullscreen("HSIguidelines.png")--guidelines (used for debugging)
-- Default visibility --
visible(img_hdg_flag, false)
visible(img_nav_flag, false)
-- FUNCTIONS --
function removes_HDG_flag() -- removes NAV flag after gyro_spinup_duration 
visible(img_hdg_flag, false)
end
function PT_hsi(heading,source,crs,nav1hdef,nav2hdef,gpshdef,nav1vdef,nav2vdef,
                gpsvdef,nav1display,nav2display, glideslopeflag, headingbug, nav1_fromto, nav2_fromto, gps_fromto, failed,has_power)
-- HDG flag
if (failed==1 or has_power==0) then --partial panel failure or master switch is off or main electrical bus is off
      visible(img_hdg_flag,true)-- show HDG flag immediately
      visible(img_nav_flag, true )
      is_failed=true --instrument is off
   else -- power is on
   if is_failed==true then -- gauge powering up? we start a timer to let the gyro spinning before removing the flag
      running=timer_running(gyro_startup_timer) -- if timer is already started do nothing
      if running==false then
         gyro_startup_timer=timer_start(gyro_spinup_duration,nil,removes_HDG_flag)--wait for gyro_spinup_duration before removing flag
      end
      is_failed=false
   end
    -- gbl_cur_bearing=gbl_target_bearing
end
if is_failed==true then --instrument is powered off
   nav1display=0
   nav2display=0
   nav1hdef=0
   nav1vdef=0
   nav1_fromto=0
   nav2hdef=0
   nav2vdef=0
   nav2_fromto=0
   gpshdef=0
   gpsvdef=0
   gps_fromto=0
   glideslopeflag=0
    gbl_target_bearing=gbl_cur_bearing
end--if is_failed
-- global variables setting before calling of timer_callback()
   gbl_target_bearing=-heading+crs
   gbl_target_bug=headingbug   
   -- Rotate compas card
   img_rotate(img_rose, -heading)
   -- Rotate heading bug
   img_rotate(img_bug, headingbug - heading)
   img_rotate(img_center, gbl_target_bearing)
   img_rotate(img_center_to, gbl_target_bearing)
   img_rotate(img_center_from, gbl_target_bearing)
   
if source == 0 then -- NAV1
   gbl_target_hdef=nav1hdef
   gbl_target_vdef=nav1vdef
end   
if source == 1 then -- NAV2
    gbl_target_hdef=nav2hdef
   gbl_target_vdef=nav2vdef
end
    
if source == 2 then -- GPS
    gbl_target_hdef=gpshdef
   gbl_target_vdef=gpsvdef
end
   -- flags to/from
   to = ((source == 0 and nav1_fromto == 1) or (source == 1 and nav2_fromto == 1) or (source == 2 and gps_fromto == 1))
   from = ((source == 0 and nav1_fromto == 2) or (source == 1 and nav2_fromto == 2) or (source == 2 and gps_fromto == 2))
   visible(img_center_to, (to == true and glideslopeflag==0))
   visible(img_center_from, (from == true and glideslopeflag==0))
   -- GS bugs
   if glideslopeflag == 1 then -- GS signal received
   --visible(img_glideslope_markers, true)
   --gbl_target_vdef=-2
   else
   --visible(img_glideslope_markers, false)
   gbl_target_vdef=-3.5 -- sends the bugs out of view
   end
-- NAV flag when no valid VOR or localizer
   visible(img_nav_flag, (source == 0 and nav1display == 0) or (source == 1 and nav2display == 0))
   
   
end
-- function to slowly move CDI center needle to current CDI deviation --
-- Thanks Ralph and Corjan for the trick!                             --
 function timer_callback()
    -- CDI needle
   img_rotate(img_neddle, gbl_cur_bearing)
    img_rotate(img_center_neddle, gbl_cur_bearing) 
   -- Calculation of center CDI needle position in pixels according to current needle bearing (actually bearing=course-heading) 
   navhdef = var_cap(gbl_cur_hdef, -4, 2.5) --horizontal deflection of CDI needle in ° (-2.5,2.5°)
    dh = navhdef  * math.cos((gbl_cur_bearing)*math.pi/180)* 41 -- 41 : distance in pixels between 2 dots
    dv = navhdef * math.sin((gbl_cur_bearing)*math.pi/180)* 41 
     --Move center CDI needle
   move(img_center_neddle, dh, dv, nil, nil)
   --Move GS needle
   navvdef = var_cap(gbl_cur_vdef, -4, 4)--vertical deflection of GS bugs in °
   --dm = (navvdef * 41)-119 -- 40 : distance in pixels between 2 vertical dots
   dm = (navvdef * 41) -- 40 : distance in pixels between 2 vertical dots
    move(img_glideslope_markers, nil, dm , nil, nil)
   
    --Calculation of current CDI deflection in ° with respect to target deflection position
   -- currrent position is decreased/increased by "gbl_factor" every function call until reaching target position within 0.001 degrees
    raw_diff = (gbl_target_hdef - gbl_cur_hdef) -- compute the delta of position
    diff = fif(raw_diff,raw_diff,(raw_diff)*-1) -- chooses the sign of delta
    gbl_cur_hdef = fif(math.abs(diff) < 0.001, gbl_target_hdef, gbl_cur_hdef + (diff * gbl_factor1) )-- chooses the greatest value
     --Calculation of current GS deflection in ° with respect to target deflection position
   raw_diff = (gbl_target_vdef - gbl_cur_vdef)
    diff = fif(raw_diff,raw_diff, (raw_diff) * -1)
    gbl_cur_vdef = fif(math.abs(diff) < 0.001, gbl_target_vdef, gbl_cur_vdef + (diff * gbl_factor2) )
   -------------
   gbl_cur_bearing=gbl_target_bearing
   -- calculation for rotating needle (unused)
    -- raw_diff = (360 + gbl_target_heading - gbl_cur_heading) %360
    -- diff = fif(raw_diff < 180, raw_diff, (360 - raw_diff) * -1)
    -- gbl_cur_heading = fif(math.abs(diff) < 0.001, gbl_target_heading, gbl_cur_heading + (diff * gbl_factor3) )
 end
 -- function to adapt FSX parameters to Xplane function
function PT_hsi_FSX(heading, obs, vertical, horizontal, nav_fromto, has_glide,  headingbug,  partial_panel, master)
   if (master==false ) then
         has_bus_power=0
      else
         has_bus_power=1
      end
      if (partial_panel==1) then
         fail=1
      else 
         fail=0
      end
      
   glideslope = fif(has_glide, 1, 0)   --from FSX boolean to integer (Xplane style)
   vertical = 2 / 119 * vertical -- GS range from -119 to + 119 in FSX
   horizontal = 2 / 127 * horizontal -- CDI range from -127 to + 127 in FSX
   PT_hsi(heading, 0, obs, horizontal, 0, 0, vertical, 0, 0, nav_fromto, 0, glideslope, headingbug, nav_fromto, 0, 0, fail,has_bus_power)
--function PT_hsi(heading,source,crs,nav1hdef,nav2hdef,gpshdef,nav1vdef,nav2vdef,gpsvdef,nav1display,nav2display, glideslopeflag, headingbug, nav1_fromto, nav2_fromto, gps_fromto, fail,has_bus_power)
end
-- DIAL ADD --
if display_dials==true then
   dial_OBS = dial_add("dialhsi.png", 18, 368, 85, 85, new_obs)
   dial_BUG = dial_add("headingbug.png", 409, 368, 85, 85, new_heading)
   dial_click_rotate(dial_OBS, 5)
   dial_click_rotate(dial_BUG, 5)
end
if FSX_HSI_source==0 then -- NAV1 (default)
fsx_variable_subscribe("HEADING INDICATOR", "Degrees",--"PLANE HEADING DEGREES GYRO", "Degrees",
                  "NAV OBS:1", "Degrees",
                  "NAV GSI:1", "Number",
                  "NAV CDI:1", "Number",                   
                  "NAV TOFROM:1", "Enum",    
                  "NAV HAS GLIDE SLOPE:1", "Bool", 
                  "AUTOPILOT HEADING LOCK DIR", "Degrees",
                  "PARTIAL PANEL ELECTRICAL", "Enum",-- failure of electrical bus
                  "ELECTRICAL MASTER BATTERY","Bool",PT_hsi_FSX)-- master switch
end
if FSX_HSI_source==1 then -- NAV2 
fsx_variable_subscribe("HEADING INDICATOR", "Degrees",--"PLANE HEADING DEGREES GYRO", "Degrees",
                  "NAV OBS:2", "Degrees",
                  "NAV GSI:2", "Number",
                  "NAV CDI:2", "Number",                   
                  "NAV TOFROM:2", "Enum",    
                  "NAV HAS GLIDE SLOPE:2", "Bool", 
                  "AUTOPILOT HEADING LOCK DIR", "Degrees",
                  "PARTIAL PANEL ELECTRICAL", "Enum",-- failure of electrical bus
                  "ELECTRICAL MASTER BATTERY","Bool",PT_hsi_FSX)-- master switch
end
if FSX_HSI_source==2 then -- GPS
fsx_variable_subscribe("HEADING INDICATOR", "Degrees",--"PLANE HEADING DEGREES GYRO", "Degrees",
                  "NAV OBS:1", "Degrees",
                  "HSI GSI NEEDLE", "Number",
                  "HSI CDI NEEDLE", "Number",                   
                  "HSI TF FLAGS", "Enum",    
                  "HSI GSI NEEDLE VALID", "Bool", 
                  "AUTOPILOT HEADING LOCK DIR", "Degrees",
                  "PARTIAL PANEL ELECTRICAL", "Enum",-- failure of electrical bus
                  "ELECTRICAL MASTER BATTERY","Bool",PT_hsi_FSX)-- master switch
end
xpl_dataref_subscribe("sim/cockpit2/gauges/indicators/heading_electric_deg_mag_pilot", "FLOAT",-- electrical, not vacuum
                 "sim/cockpit2/radios/actuators/HSI_source_select_pilot", "INT",
                 "sim/cockpit2/radios/actuators/hsi_obs_deg_mag_pilot", "FLOAT",
                 "sim/cockpit2/radios/indicators/nav1_hdef_dots_pilot", "FLOAT",
                 "sim/cockpit2/radios/indicators/nav2_hdef_dots_pilot", "FLOAT",
                 "sim/cockpit2/radios/indicators/gps_hdef_dots_pilot", "FLOAT",
                 "sim/cockpit2/radios/indicators/nav1_vdef_dots_pilot", "FLOAT",
                 "sim/cockpit2/radios/indicators/nav2_vdef_dots_pilot", "FLOAT",
                 "sim/cockpit2/radios/indicators/gps_vdef_dots_pilot", "FLOAT", 
                 "sim/cockpit2/radios/indicators/nav1_display_horizontal", "INT", 
                 "sim/cockpit2/radios/indicators/nav2_display_horizontal", "INT", 
                 "sim/cockpit2/radios/indicators/hsi_display_horizontal_pilot", "INT",
                 "sim/cockpit2/autopilot/heading_dial_deg_mag_pilot", "FLOAT",
                 "sim/cockpit/radios/nav1_fromto", "INT",
                 "sim/cockpit/radios/nav2_fromto", "INT",
                 "sim/cockpit/radios/gps_fromto", "INT", 
                 "sim/operations/failures/rel_esys","INT", -- failure of main bus
                 "sim/cockpit/electrical/battery_on", "INT", PT_hsi) -- master switch on
                 
 -- Timers 
 -- Thanks Ralph and Corjan for the trick!--
tmr_update = timer_start(0, 50,timer_callback)-- moves the CDI needle every 0.05 second   by calling the timer_callback() function
A noter: 
le HSI peut être commandé par NAV1, NAV2 ou le GPS via une variable située également dans le code (FSX_HSI_source) pour FSX/P3D au moins, pour XPlane il existe déjà un offset qui gère ça.
Il y a également une temporisation pour simuler le temps de recalage du gyro (cela prend une quizaine de secondes avant qu'il arrive à pleine vitesse), que l'on peut annuler si on met la valeur à 0.
Quand j'aurais le temps je ferais un sélecteur couplé avec un annonciateur comme une jauge indépendante pour pouvoir changer la source du HSI depuis le Tdb comme le fait FSX, mais là je suis en plein prépa pour mes deux derniers exams, Préparation et suivi du vol (les cartes! et les abaques!) et Procédures opérationnelles.
Jacques