From 42fa4f19c2cff5d59f48bcf652cb3ca75b28034b Mon Sep 17 00:00:00 2001 From: Joshua Davidson Date: Fri, 17 Nov 2017 13:27:23 -0500 Subject: [PATCH] A3XX: Canvas PFD Improvements, Optimizations --- Models/Instruments/PFD/PFD.nas | 709 +++++------------------------ Models/Instruments/PFD/res/pfd.svg | 71 +-- Nasal/libraries.nas | 2 +- Systems/pfd.xml | 14 + revision.txt | 2 +- 5 files changed, 178 insertions(+), 620 deletions(-) diff --git a/Models/Instruments/PFD/PFD.nas b/Models/Instruments/PFD/PFD.nas index 336b8e89..915c65bb 100644 --- a/Models/Instruments/PFD/PFD.nas +++ b/Models/Instruments/PFD/PFD.nas @@ -18,6 +18,7 @@ setprop("/it-autoflight/output/ap2", 0); setprop("/it-autoflight/output/fd1", 0); setprop("/it-autoflight/output/fd2", 0); setprop("/it-autoflight/output/athr", 0); +setprop("/instrumentation/pfd/alt-diff", 0); setprop("/instrumentation/pfd/heading-deg", 0); setprop("/instrumentation/pfd/horizon-pitch", 0); setprop("/instrumentation/pfd/horizon-ground", 0); @@ -123,23 +124,7 @@ var canvas_PFD_base = { PFD_2.page.hide(); } }, -}; - -var canvas_PFD_1 = { - new: func(canvas_group, file) { - var m = {parents: [canvas_PFD_1, canvas_PFD_base]}; - m.init(canvas_group, file); - - return m; - }, - getKeys: func() { - return ["FMA_man","FMA_manmode","FMA_flxtemp","FMA_thrust","FMA_lvrclb","FMA_pitch","FMA_pitcharm","FMA_pitcharm2","FMA_roll","FMA_rollarm","FMA_combined","FMA_ctr_msg","FMA_catmode","FMA_cattype","FMA_nodh","FMA_dh","FMA_dhn","FMA_ap","FMA_fd", - "FMA_athr","FMA_man_box","FMA_flx_box","FMA_thrust_box","FMA_pitch_box","FMA_pitcharm_box","FMA_roll_box","FMA_rollarm_box","FMA_combined_box","FMA_catmode_box","FMA_cattype_box","FMA_cat_box","FMA_dh_box","FMA_ap_box","FMA_fd_box","FMA_athr_box", - "FMA_Middle1","FMA_Middle2","ASI_scale","ASI_target","ASI_mach","ASI_mach_decimal","ASI_ten_sec","ASI_digit_UP","ASI_digit_DN","ASI_decimal_UP","ASI_decimal_DN","AI_center","AI_bank","AI_slipskid","AI_horizon","AI_horizon_ground","AI_horizon_sky", - "AI_stick","AI_stick_pos","AI_heading","AI_agl_g","AI_agl","FD_roll","FD_pitch","ALT_scale","ALT_one","ALT_two","ALT_three","ALT_four","ALT_five","ALT_digits","ALT_tens","VS_pointer","VS_box","VS_digit","QNH","QNH_setting","QNH_std","QNH_box", - "LOC_pointer","LOC_scale","GS_scale","GS_pointer","CRS_pointer","HDG_target","HDG_scale","HDG_one","HDG_two","HDG_three","HDG_four","HDG_five","HDG_six","HDG_seven","HDG_digit_L","HDG_digit_R","TRK_pointer"]; - }, - update: func() { + updateCommon: func () { state1 = getprop("/systems/thrust/state1"); state2 = getprop("/systems/thrust/state2"); ap1 = getprop("/it-autoflight/output/ap1"); @@ -464,16 +449,10 @@ var canvas_PFD_1 = { me["AI_slipskid"].setTranslation(getprop("/instrumentation/slip-skid-ball/indicated-slip-skid") * -15, 0); me["AI_bank"].setRotation(-roll * D2R); - if (fd1 == 1 and ((!wow1 and !wow2 and roll_mode != " ") or roll_mode != " ") and getprop("/it-autoflight/custom/trk-fpa") == 0 and pitch < 25 and pitch > -13 and roll < 45 and roll > -45) { - me["FD_roll"].show(); + if (getprop("/it-fbw/law") == 0) { + me["AI_bank_lim"].show(); } else { - me["FD_roll"].hide(); - } - - if (fd1 == 1 and ((!wow1 and !wow2 and pitch_mode != " ") or pitch_mode != " ") and getprop("/it-autoflight/custom/trk-fpa") == 0 and pitch < 25 and pitch > -13 and roll < 45 and roll > -45) { - me["FD_pitch"].show(); - } else { - me["FD_pitch"].hide(); + me["AI_bank_lim"].hide(); } if (getprop("/it-autoflight/fd/roll-bar") != nil) { @@ -571,6 +550,117 @@ var canvas_PFD_1 = { me["VS_digit"].setText(sprintf("%2.0f", getprop("/it-autoflight/internal/vert-speed-fpm-pfd"))); } + # ILS + me["LOC_pointer"].setTranslation(getprop("/instrumentation/nav[0]/heading-needle-deflection-norm") * 197, 0); + + me["GS_pointer"].setTranslation(0, getprop("/instrumentation/nav[0]/gs-needle-deflection-norm") * -197); + + # Heading + me.heading = getprop("/instrumentation/pfd/heading-scale"); + me.headOffset = me.heading / 10 - int(me.heading / 10); + me.middleText = roundabout(me.heading / 10); + me.middleOffset = nil; + if(me.middleText == 36) { + me.middleText = 0; + } + me.leftText1 = me.middleText == 0?35:me.middleText - 1; + me.rightText1 = me.middleText == 35?0:me.middleText + 1; + me.leftText2 = me.leftText1 == 0?35:me.leftText1 - 1; + me.rightText2 = me.rightText1 == 35?0:me.rightText1 + 1; + me.leftText3 = me.leftText2 == 0?35:me.leftText2 - 1; + me.rightText3 = me.rightText2 == 35?0:me.rightText2 + 1; + if (me.headOffset > 0.5) { + me.middleOffset = -(me.headOffset - 1) * 98.5416; + } else { + me.middleOffset = -me.headOffset * 98.5416; + } + me["HDG_scale"].setTranslation(me.middleOffset, 0); + me["HDG_scale"].update(); + me["HDG_four"].setText(sprintf("%d", me.middleText)); + me["HDG_five"].setText(sprintf("%d", me.rightText1)); + me["HDG_three"].setText(sprintf("%d", me.leftText1)); + me["HDG_six"].setText(sprintf("%d", me.rightText2)); + me["HDG_two"].setText(sprintf("%d", me.leftText2)); + me["HDG_seven"].setText(sprintf("%d", me.rightText3)); + me["HDG_one"].setText(sprintf("%d", me.leftText3)); + + me["HDG_four"].setFontSize(fontSizeHDG(me.middleText), 1); + me["HDG_five"].setFontSize(fontSizeHDG(me.rightText1), 1); + me["HDG_three"].setFontSize(fontSizeHDG(me.leftText1), 1); + me["HDG_six"].setFontSize(fontSizeHDG(me.rightText2), 1); + me["HDG_two"].setFontSize(fontSizeHDG(me.leftText2), 1); + me["HDG_seven"].setFontSize(fontSizeHDG(me.rightText3), 1); + me["HDG_one"].setFontSize(fontSizeHDG(me.leftText3), 1); + + if (getprop("/it-autoflight/custom/show-hdg") == 1 and getprop("/instrumentation/pfd/hdg-diff") >= -23.62 and getprop("/instrumentation/pfd/hdg-diff") <= 23.62) { + me["HDG_target"].setTranslation((getprop("/instrumentation/pfd/hdg-diff") / 10) * 98.5416, 0); + me["HDG_digit_L"].hide(); + me["HDG_digit_R"].hide(); + me["HDG_target"].show(); + } else if (getprop("/it-autoflight/custom/show-hdg") == 1 and getprop("/instrumentation/pfd/hdg-diff") < -23.62 and getprop("/instrumentation/pfd/hdg-diff") >= -180) { + me["HDG_digit_L"].setText(sprintf("%3.0f", getprop("/it-autoflight/input/hdg"))); + me["HDG_digit_L"].show(); + me["HDG_digit_R"].hide(); + me["HDG_target"].hide(); + } else if (getprop("/it-autoflight/custom/show-hdg") == 1 and getprop("/instrumentation/pfd/hdg-diff") > 23.62 and getprop("/instrumentation/pfd/hdg-diff") <= 180) { + me["HDG_digit_R"].setText(sprintf("%3.0f", getprop("/it-autoflight/input/hdg"))); + me["HDG_digit_R"].show(); + me["HDG_digit_L"].hide(); + me["HDG_target"].hide(); + } else { + me["HDG_digit_L"].hide(); + me["HDG_digit_R"].hide(); + me["HDG_target"].hide(); + } + + me["TRK_pointer"].setTranslation((getprop("/instrumentation/pfd/track-hdg-diff") / 10) * 98.5416, 0); + + me["CRS_pointer"].hide(); + + # AI HDG + me.AI_horizon_hdg_trans.setTranslation(me.middleOffset, getprop("/instrumentation/pfd/horizon-pitch") * 11.825); + me.AI_horizon_hdg_rot.setRotation(-roll * D2R, me["AI_center"].getCenter()); + me["AI_heading"].update(); + }, +}; + +var canvas_PFD_1 = { + new: func(canvas_group, file) { + var m = {parents: [canvas_PFD_1, canvas_PFD_base]}; + m.init(canvas_group, file); + + return m; + }, + getKeys: func() { + return ["FMA_man","FMA_manmode","FMA_flxtemp","FMA_thrust","FMA_lvrclb","FMA_pitch","FMA_pitcharm","FMA_pitcharm2","FMA_roll","FMA_rollarm","FMA_combined","FMA_ctr_msg","FMA_catmode","FMA_cattype","FMA_nodh","FMA_dh","FMA_dhn","FMA_ap","FMA_fd", + "FMA_athr","FMA_man_box","FMA_flx_box","FMA_thrust_box","FMA_pitch_box","FMA_pitcharm_box","FMA_roll_box","FMA_rollarm_box","FMA_combined_box","FMA_catmode_box","FMA_cattype_box","FMA_cat_box","FMA_dh_box","FMA_ap_box","FMA_fd_box","FMA_athr_box", + "FMA_Middle1","FMA_Middle2","ASI_scale","ASI_target","ASI_mach","ASI_mach_decimal","ASI_ten_sec","ASI_digit_UP","ASI_digit_DN","ASI_decimal_UP","ASI_decimal_DN","AI_center","AI_bank","AI_bank_lim","AI_slipskid","AI_horizon","AI_horizon_ground", + "AI_horizon_sky","AI_stick","AI_stick_pos","AI_heading","AI_agl_g","AI_agl","FD_roll","FD_pitch","ALT_scale","ALT_one","ALT_two","ALT_three","ALT_four","ALT_five","ALT_digits","ALT_tens","VS_pointer","VS_box","VS_digit","QNH","QNH_setting","QNH_std", + "QNH_box","LOC_pointer","LOC_scale","GS_scale","GS_pointer","CRS_pointer","HDG_target","HDG_scale","HDG_one","HDG_two","HDG_three","HDG_four","HDG_five","HDG_six","HDG_seven","HDG_digit_L","HDG_digit_R","TRK_pointer"]; + }, + update: func() { + fd1 = getprop("/it-autoflight/output/fd1"); + fd2 = getprop("/it-autoflight/output/fd2"); + pitch_mode = getprop("/modes/pfd/fma/pitch-mode"); + roll_mode = getprop("/modes/pfd/fma/roll-mode"); + pitch = getprop("/orientation/pitch-deg"); + roll = getprop("/orientation/roll-deg"); + wow1 = getprop("/gear/gear[1]/wow"); + wow2 = getprop("/gear/gear[2]/wow"); + + # FD + if (fd1 == 1 and ((!wow1 and !wow2 and roll_mode != " ") or roll_mode != " ") and getprop("/it-autoflight/custom/trk-fpa") == 0 and pitch < 25 and pitch > -13 and roll < 45 and roll > -45) { + me["FD_roll"].show(); + } else { + me["FD_roll"].hide(); + } + + if (fd1 == 1 and ((!wow1 and !wow2 and pitch_mode != " ") or pitch_mode != " ") and getprop("/it-autoflight/custom/trk-fpa") == 0 and pitch < 25 and pitch > -13 and roll < 45 and roll > -45) { + me["FD_pitch"].show(); + } else { + me["FD_pitch"].hide(); + } + # ILS if (getprop("/modes/pfd/ILS1") == 1) { me["LOC_scale"].show(); @@ -590,76 +680,7 @@ var canvas_PFD_1 = { me["GS_pointer"].hide(); } - me["LOC_pointer"].setTranslation(getprop("/instrumentation/nav[0]/heading-needle-deflection-norm") * 197, 0); - - me["GS_pointer"].setTranslation(0, getprop("/instrumentation/nav[0]/gs-needle-deflection-norm") * -197); - - # Heading - me.heading = getprop("/instrumentation/pfd/heading-scale"); - me.headOffset = me.heading / 10 - int(me.heading / 10); - me.middleText = roundabout(me.heading / 10); - me.middleOffset = nil; - if(me.middleText == 36) { - me.middleText = 0; - } - me.leftText1 = me.middleText == 0?35:me.middleText - 1; - me.rightText1 = me.middleText == 35?0:me.middleText + 1; - me.leftText2 = me.leftText1 == 0?35:me.leftText1 - 1; - me.rightText2 = me.rightText1 == 35?0:me.rightText1 + 1; - me.leftText3 = me.leftText2 == 0?35:me.leftText2 - 1; - me.rightText3 = me.rightText2 == 35?0:me.rightText2 + 1; - if (me.headOffset > 0.5) { - me.middleOffset = -(me.headOffset - 1) * 98.5416; - } else { - me.middleOffset = -me.headOffset * 98.5416; - } - me["HDG_scale"].setTranslation(me.middleOffset, 0); - me["HDG_scale"].update(); - me["HDG_four"].setText(sprintf("%d", me.middleText)); - me["HDG_five"].setText(sprintf("%d", me.rightText1)); - me["HDG_three"].setText(sprintf("%d", me.leftText1)); - me["HDG_six"].setText(sprintf("%d", me.rightText2)); - me["HDG_two"].setText(sprintf("%d", me.leftText2)); - me["HDG_seven"].setText(sprintf("%d", me.rightText3)); - me["HDG_one"].setText(sprintf("%d", me.leftText3)); - - me["HDG_four"].setFontSize(fontSizeHDG(me.middleText), 1); - me["HDG_five"].setFontSize(fontSizeHDG(me.rightText1), 1); - me["HDG_three"].setFontSize(fontSizeHDG(me.leftText1), 1); - me["HDG_six"].setFontSize(fontSizeHDG(me.rightText2), 1); - me["HDG_two"].setFontSize(fontSizeHDG(me.leftText2), 1); - me["HDG_seven"].setFontSize(fontSizeHDG(me.rightText3), 1); - me["HDG_one"].setFontSize(fontSizeHDG(me.leftText3), 1); - - if (getprop("/it-autoflight/custom/show-hdg") == 1 and getprop("/instrumentation/pfd/hdg-diff") >= -23.62 and getprop("/instrumentation/pfd/hdg-diff") <= 23.62) { - me["HDG_target"].setTranslation((getprop("/instrumentation/pfd/hdg-diff") / 10) * 98.5416, 0); - me["HDG_digit_L"].hide(); - me["HDG_digit_R"].hide(); - me["HDG_target"].show(); - } else if (getprop("/it-autoflight/custom/show-hdg") == 1 and getprop("/instrumentation/pfd/hdg-diff") < -23.62 and getprop("/instrumentation/pfd/hdg-diff") >= -180) { - me["HDG_digit_L"].setText(sprintf("%3.0f", getprop("/it-autoflight/input/hdg"))); - me["HDG_digit_L"].show(); - me["HDG_digit_R"].hide(); - me["HDG_target"].hide(); - } else if (getprop("/it-autoflight/custom/show-hdg") == 1 and getprop("/instrumentation/pfd/hdg-diff") > 23.62 and getprop("/instrumentation/pfd/hdg-diff") <= 180) { - me["HDG_digit_R"].setText(sprintf("%3.0f", getprop("/it-autoflight/input/hdg"))); - me["HDG_digit_R"].show(); - me["HDG_digit_L"].hide(); - me["HDG_target"].hide(); - } else { - me["HDG_digit_L"].hide(); - me["HDG_digit_R"].hide(); - me["HDG_target"].hide(); - } - - me["TRK_pointer"].setTranslation((getprop("/instrumentation/pfd/track-hdg-diff") / 10) * 98.5416, 0); - - me["CRS_pointer"].hide(); - - # AI HDG - me.AI_horizon_hdg_trans.setTranslation(me.middleOffset, getprop("/instrumentation/pfd/horizon-pitch") * 11.825); - me.AI_horizon_hdg_rot.setRotation(-roll * D2R, me["AI_center"].getCenter()); - me["AI_heading"].update(); + me.updateCommon(); }, }; @@ -673,446 +694,33 @@ var canvas_PFD_2 = { getKeys: func() { return ["FMA_man","FMA_manmode","FMA_flxtemp","FMA_thrust","FMA_lvrclb","FMA_pitch","FMA_pitcharm","FMA_pitcharm2","FMA_roll","FMA_rollarm","FMA_combined","FMA_ctr_msg","FMA_catmode","FMA_cattype","FMA_nodh","FMA_dh","FMA_dhn","FMA_ap","FMA_fd", "FMA_athr","FMA_man_box","FMA_flx_box","FMA_thrust_box","FMA_pitch_box","FMA_pitcharm_box","FMA_roll_box","FMA_rollarm_box","FMA_combined_box","FMA_catmode_box","FMA_cattype_box","FMA_cat_box","FMA_dh_box","FMA_ap_box","FMA_fd_box","FMA_athr_box", - "FMA_Middle1","FMA_Middle2","ASI_scale","ASI_target","ASI_mach","ASI_mach_decimal","ASI_ten_sec","ASI_digit_UP","ASI_digit_DN","ASI_decimal_UP","ASI_decimal_DN","AI_center","AI_bank","AI_slipskid","AI_horizon","AI_horizon_ground","AI_horizon_sky", - "AI_stick","AI_stick_pos","AI_heading","AI_agl_g","AI_agl","FD_roll","FD_pitch","ALT_scale","ALT_one","ALT_two","ALT_three","ALT_four","ALT_five","ALT_digits","ALT_tens","VS_pointer","VS_box","VS_digit","QNH","QNH_setting","QNH_std","QNH_box", - "LOC_pointer","LOC_scale","GS_scale","GS_pointer","CRS_pointer","HDG_target","HDG_scale","HDG_one","HDG_two","HDG_three","HDG_four","HDG_five","HDG_six","HDG_seven","HDG_digit_L","HDG_digit_R","TRK_pointer"]; + "FMA_Middle1","FMA_Middle2","ASI_scale","ASI_target","ASI_mach","ASI_mach_decimal","ASI_ten_sec","ASI_digit_UP","ASI_digit_DN","ASI_decimal_UP","ASI_decimal_DN","AI_center","AI_bank","AI_bank_lim","AI_slipskid","AI_horizon","AI_horizon_ground", + "AI_horizon_sky","AI_stick","AI_stick_pos","AI_heading","AI_agl_g","AI_agl","FD_roll","FD_pitch","ALT_scale","ALT_one","ALT_two","ALT_three","ALT_four","ALT_five","ALT_digits","ALT_tens","VS_pointer","VS_box","VS_digit","QNH","QNH_setting","QNH_std", + "QNH_box","LOC_pointer","LOC_scale","GS_scale","GS_pointer","CRS_pointer","HDG_target","HDG_scale","HDG_one","HDG_two","HDG_three","HDG_four","HDG_five","HDG_six","HDG_seven","HDG_digit_L","HDG_digit_R","TRK_pointer"]; }, update: func() { - state1 = getprop("/systems/thrust/state1"); - state2 = getprop("/systems/thrust/state2"); - ap1 = getprop("/it-autoflight/output/ap1"); - ap2 = getprop("/it-autoflight/output/ap2"); fd1 = getprop("/it-autoflight/output/fd1"); fd2 = getprop("/it-autoflight/output/fd2"); - athr = getprop("/it-autoflight/output/athr"); - throttle_mode = getprop("/modes/pfd/fma/throttle-mode"); pitch_mode = getprop("/modes/pfd/fma/pitch-mode"); - pitch_mode_armed = getprop("/modes/pfd/fma/pitch-mode-armed"); - pitch_mode2_armed = getprop("/modes/pfd/fma/pitch-mode2-armed"); roll_mode = getprop("/modes/pfd/fma/roll-mode"); - roll_mode_armed = getprop("/modes/pfd/fma/roll-mode-armed"); - thr1 = getprop("/controls/engines/engine[0]/throttle-pos"); - thr2 = getprop("/controls/engines/engine[1]/throttle-pos"); pitch = getprop("/orientation/pitch-deg"); roll = getprop("/orientation/roll-deg"); wow1 = getprop("/gear/gear[1]/wow"); wow2 = getprop("/gear/gear[2]/wow"); - # FMA MAN TOGA MCT FLX THR - if (athr == 1 and (state1 == "TOGA" or state1 == "MCT" or state1 == "MAN THR" or state2 == "TOGA" or state2 == "MCT" or state2 == "MAN THR")) { - me["FMA_man"].show(); - me["FMA_manmode"].show(); - if (state1 == "TOGA" or state2 == "TOGA") { - me["FMA_flx_box"].hide(); - me["FMA_flxtemp"].hide(); - me["FMA_man_box"].show(); - me["FMA_manmode"].setText("TOGA"); - me["FMA_man_box"].setColor(0.8078,0.8039,0.8078); - } else if ((state1 == "MAN THR" and thr1 >= 0.83) or (state2 == "MAN THR" and thr2 >= 0.83)) { - me["FMA_flx_box"].hide(); - me["FMA_flxtemp"].hide(); - me["FMA_man_box"].show(); - me["FMA_manmode"].setText("THR"); - me["FMA_man_box"].setColor(0.7333,0.3803,0); - } else if ((state1 == "MCT" or state2 == "MCT") and getprop("/controls/engines/thrust-limit") != "FLX") { - me["FMA_flx_box"].hide(); - me["FMA_flxtemp"].hide(); - me["FMA_man_box"].show(); - me["FMA_manmode"].setText("MCT"); - me["FMA_man_box"].setColor(0.8078,0.8039,0.8078); - } else if ((state1 == "MCT" or state2 == "MCT") and getprop("/controls/engines/thrust-limit") == "FLX") { - me["FMA_flxtemp"].setText(sprintf("%s", "+" ~ getprop("/FMGC/internal/flex"))); - me["FMA_man_box"].hide(); - me["FMA_flx_box"].show(); - me["FMA_flxtemp"].show(); - me["FMA_manmode"].setText("FLX "); - me["FMA_man_box"].setColor(0.8078,0.8039,0.8078); - } else if ((state1 == "MAN THR" and thr1 < 0.83) or (state2 == "MAN THR" and thr2 < 0.83)) { - me["FMA_flx_box"].hide(); - me["FMA_flxtemp"].hide(); - me["FMA_man_box"].show(); - me["FMA_manmode"].setText("THR"); - me["FMA_man_box"].setColor(0.7333,0.3803,0); - } - } else { - me["FMA_man"].hide(); - me["FMA_manmode"].hide(); - me["FMA_man_box"].hide(); - me["FMA_flx_box"].hide(); - me["FMA_flxtemp"].hide(); - } - - if (athr == 1 and getprop("/systems/thrust/lvrclb") == 1) { - me["FMA_lvrclb"].show(); - } else { - me["FMA_lvrclb"].hide(); - } - - # FMA A/THR - if (athr == 1 and ((state1 == "MAN" or state1 == "CL") and (state2 == "MAN" or state2 == "CL"))) { - me["FMA_thrust"].show(); - if (getprop("/modes/pfd/fma/throttle-mode-box") == 1 and throttle_mode != " ") { - me["FMA_thrust_box"].show(); - } else { - me["FMA_thrust_box"].hide(); - } - } else { - me["FMA_thrust"].hide(); - me["FMA_thrust_box"].hide(); - } - - me["FMA_thrust"].setText(sprintf("%s", throttle_mode)); - - # FMA Pitch Roll Common - me["FMA_combined"].setText(sprintf("%s", pitch_mode)); - - if (pitch_mode == "LAND" or pitch_mode == "FLARE" or pitch_mode == "ROLL OUT") { - me["FMA_pitch"].hide(); - me["FMA_roll"].hide(); - me["FMA_pitch_box"].hide(); - me["FMA_roll_box"].hide(); - me["FMA_pitcharm_box"].hide(); - me["FMA_rollarm_box"].hide(); - me["FMA_Middle1"].hide(); - me["FMA_Middle2"].hide(); - if (getprop("/it-fbw/law") == 2) { - me["FMA_ctr_msg"].setText("USE MAN PITCH TRIM"); - me["FMA_ctr_msg"].setColor(0.7333,0.3803,0); - me["FMA_ctr_msg"].show(); - } else if (getprop("/it-fbw/law") == 3) { - me["FMA_ctr_msg"].setText("MAN PITCH TRIM ONLY"); - me["FMA_ctr_msg"].setColor(1,0,0); - me["FMA_ctr_msg"].show(); - } else { - me["FMA_ctr_msg"].hide(); - } - me["FMA_combined"].show(); - if (getprop("/modes/pfd/fma/pitch-mode-box") == 1 and pitch_mode != " ") { - me["FMA_combined_box"].show(); - } else { - me["FMA_combined_box"].hide(); - } - } else { - me["FMA_combined"].hide(); - me["FMA_combined_box"].hide(); - if (getprop("/it-fbw/law") == 2) { - me["FMA_ctr_msg"].setText("USE MAN PITCH TRIM"); - me["FMA_ctr_msg"].setColor(0.7333,0.3803,0); - me["FMA_Middle1"].hide(); - me["FMA_Middle2"].show(); - me["FMA_ctr_msg"].show(); - } else if (getprop("/it-fbw/law") == 3) { - me["FMA_ctr_msg"].setText("MAN PITCH TRIM ONLY"); - me["FMA_ctr_msg"].setColor(1,0,0); - me["FMA_Middle1"].hide(); - me["FMA_Middle2"].show(); - me["FMA_ctr_msg"].show(); - } else { - me["FMA_ctr_msg"].hide(); - me["FMA_Middle1"].show(); - me["FMA_Middle2"].hide(); - } - - if (ap1 or ap2 or fd1 or fd2) { - me["FMA_pitch"].show(); - me["FMA_roll"].show(); - } else { - me["FMA_pitch"].hide(); - me["FMA_roll"].hide(); - } - if (getprop("/modes/pfd/fma/pitch-mode-box") == 1 and pitch_mode != " " and (ap1 or ap2 or fd1 or fd2)) { - me["FMA_pitch_box"].show(); - } else { - me["FMA_pitch_box"].hide(); - } - if (pitch_mode_armed == " " and pitch_mode2_armed == " ") { - me["FMA_pitcharm_box"].hide(); - } else { - if ((getprop("/modes/pfd/fma/pitch-mode-armed-box") == 1 or getprop("/modes/pfd/fma/pitch-mode2-armed-box") == 1) and (ap1 or ap2 or fd1 or fd2)) { - me["FMA_pitcharm_box"].show(); - } else { - me["FMA_pitcharm_box"].hide(); - } - } - if (getprop("/modes/pfd/fma/roll-mode-box") == 1 and roll_mode != " " and (ap1 or ap2 or fd1 or fd2)) { - me["FMA_roll_box"].show(); - } else { - me["FMA_roll_box"].hide(); - } - if (getprop("/modes/pfd/fma/roll-mode-armed-box") == 1 and roll_mode_armed != " " and (ap1 or ap2 or fd1 or fd2)) { - me["FMA_rollarm_box"].show(); - } else { - me["FMA_rollarm_box"].hide(); - } - } - - if (ap1 or ap2 or fd1 or fd2) { - me["FMA_pitcharm"].show(); - me["FMA_pitcharm2"].show(); - me["FMA_rollarm"].show(); - } else { - me["FMA_pitcharm"].hide(); - me["FMA_pitcharm2"].hide(); - me["FMA_rollarm"].hide(); - } - - # FMA Pitch - me["FMA_pitch"].setText(sprintf("%s", pitch_mode)); - me["FMA_pitcharm"].setText(sprintf("%s", pitch_mode_armed)); - me["FMA_pitcharm2"].setText(sprintf("%s", pitch_mode2_armed)); - - # FMA Roll - me["FMA_roll"].setText(sprintf("%s", roll_mode)); - me["FMA_rollarm"].setText(sprintf("%s", roll_mode_armed)); - - # FMA CAT DH - me["FMA_catmode"].hide(); - me["FMA_cattype"].hide(); - me["FMA_catmode_box"].hide(); - me["FMA_cattype_box"].hide(); - me["FMA_cat_box"].hide(); - me["FMA_nodh"].hide(); - me["FMA_dh_box"].hide(); - - # FMA AP FD ATHR - me["FMA_ap"].setText(sprintf("%s", getprop("/modes/pfd/fma/ap-mode"))); - me["FMA_fd"].setText(sprintf("%s", getprop("/modes/pfd/fma/fd-mode"))); - me["FMA_athr"].setText(sprintf("%s", getprop("/modes/pfd/fma/at-mode"))); - - if ((state1 == "MAN" or state1 == "CL") and (state2 == "MAN" or state2 == "CL")) { - me["FMA_athr"].setColor(0.8078,0.8039,0.8078); - } else { - me["FMA_athr"].setColor(0.0862,0.5176,0.6470); - } - - if (getprop("/modes/pfd/fma/ap-mode-box") == 1 and getprop("/modes/pfd/fma/ap-mode") != " ") { - me["FMA_ap_box"].show(); - } else { - me["FMA_ap_box"].hide(); - } - - if (getprop("/modes/pfd/fma/fd-mode-box") == 1 and getprop("/modes/pfd/fma/fd-mode") != " ") { - me["FMA_fd_box"].show(); - } else { - me["FMA_fd_box"].hide(); - } - - if (getprop("/modes/pfd/fma/athr-mode-box") == 1 and getprop("/modes/pfd/fma/at-mode") != " ") { - me["FMA_athr_box"].show(); - } else { - me["FMA_athr_box"].hide(); - } - - # Airspeed - # Subtract 30, since the scale starts at 30, but don't allow less than 0, or more than 420 situations - if (getprop("/instrumentation/airspeed-indicator/indicated-speed-kt") <= 30) { - ASI = 0; - } else if (getprop("/instrumentation/airspeed-indicator/indicated-speed-kt") >= 420) { - ASI = 390; - } else { - ASI = getprop("/instrumentation/airspeed-indicator/indicated-speed-kt") - 30; - } - me["ASI_scale"].setTranslation(0, ASI * 6.6); - - if (getprop("/instrumentation/airspeed-indicator/indicated-mach") >= 0.5) { - me["ASI_mach_decimal"].show(); - me["ASI_mach"].show(); - } else { - me["ASI_mach_decimal"].hide(); - me["ASI_mach"].hide(); - } - - if (getprop("/instrumentation/airspeed-indicator/indicated-mach") >= 0.999) { - me["ASI_mach"].setText("999"); - } else { - me["ASI_mach"].setText(sprintf("%3.0f", getprop("/instrumentation/airspeed-indicator/indicated-mach") * 1000)); - } - - if (getprop("/it-autoflight/input/spd-managed") == 1) { - me["ASI_target"].setColor(0.6901,0.3333,0.7450); - me["ASI_digit_UP"].setColor(0.6901,0.3333,0.7450); - me["ASI_decimal_UP"].setColor(0.6901,0.3333,0.7450); - me["ASI_digit_DN"].setColor(0.6901,0.3333,0.7450); - me["ASI_decimal_DN"].setColor(0.6901,0.3333,0.7450); - } else { - me["ASI_target"].setColor(0.0862,0.5176,0.6470); - me["ASI_digit_UP"].setColor(0.0862,0.5176,0.6470); - me["ASI_decimal_UP"].setColor(0.0862,0.5176,0.6470); - me["ASI_digit_DN"].setColor(0.0862,0.5176,0.6470); - me["ASI_decimal_DN"].setColor(0.0862,0.5176,0.6470); - } - - if (getprop("/FMGC/internal/target-ias-pfd") <= 30) { - ASItrgt = 0 - ASI; - } else if (getprop("/FMGC/internal/target-ias-pfd") >= 420) { - ASItrgt = 390 - ASI; - } else { - ASItrgt = getprop("/FMGC/internal/target-ias-pfd") - 30 - ASI; - } - - ASItrgtdiff = getprop("/FMGC/internal/target-ias-pfd") - getprop("/instrumentation/airspeed-indicator/indicated-speed-kt"); - - if (ASItrgtdiff >= -42 and ASItrgtdiff <= 42) { - me["ASI_target"].setTranslation(0, ASItrgt * -6.6); - me["ASI_digit_UP"].hide(); - me["ASI_decimal_UP"].hide(); - me["ASI_digit_DN"].hide(); - me["ASI_decimal_DN"].hide(); - me["ASI_target"].show(); - } else if (ASItrgtdiff < -42) { - if (getprop("/it-autoflight/input/kts-mach") == 1) { - me["ASI_digit_DN"].setText(sprintf("%3.0f", getprop("/it-autoflight/input/spd-mach") * 1000)); - me["ASI_decimal_UP"].hide(); - me["ASI_decimal_DN"].show(); - } else { - me["ASI_digit_DN"].setText(sprintf("%3.0f", getprop("/it-autoflight/input/spd-kts"))); - me["ASI_decimal_UP"].hide(); - me["ASI_decimal_DN"].hide(); - } - me["ASI_digit_DN"].show(); - me["ASI_digit_UP"].hide(); - me["ASI_target"].hide(); - } else if (ASItrgtdiff > 42) { - if (getprop("/it-autoflight/input/kts-mach") == 1) { - me["ASI_digit_UP"].setText(sprintf("%3.0f", getprop("/it-autoflight/input/spd-mach") * 1000)); - me["ASI_decimal_UP"].show(); - me["ASI_decimal_DN"].hide(); - } else { - me["ASI_digit_UP"].setText(sprintf("%3.0f", getprop("/it-autoflight/input/spd-kts"))); - me["ASI_decimal_UP"].hide(); - me["ASI_decimal_DN"].hide(); - } - me["ASI_digit_UP"].show(); - me["ASI_digit_DN"].hide(); - me["ASI_target"].hide(); - } - - me["ASI_ten_sec"].hide(); - - # Attitude Indicator - pitch = getprop("/orientation/pitch-deg") or 0; - roll = getprop("/orientation/roll-deg") or 0; - - me.AI_horizon_trans.setTranslation(0, pitch * 11.825); - me.AI_horizon_rot.setRotation(-roll * D2R, me["AI_center"].getCenter()); - me.AI_horizon_ground_trans.setTranslation(0, getprop("/instrumentation/pfd/horizon-ground") * 11.825); - me.AI_horizon_ground_rot.setRotation(-roll * D2R, me["AI_center"].getCenter()); - me.AI_horizon_sky_rot.setRotation(-roll * D2R, me["AI_center"].getCenter()); - - me["AI_slipskid"].setTranslation(getprop("/instrumentation/slip-skid-ball/indicated-slip-skid") * -15, 0); - me["AI_bank"].setRotation(-roll * D2R); - - if (fd2 == 1 and ((!wow1 and !wow2 and roll_mode != " ") or roll_mode != " ") and getprop("/it-autoflight/custom/trk-fpa") == 0 and pitch < 25 and pitch > -13 and roll < 45 and roll > -45) { + # FD + if (fd1 == 2 and ((!wow1 and !wow2 and roll_mode != " ") or roll_mode != " ") and getprop("/it-autoflight/custom/trk-fpa") == 0 and pitch < 25 and pitch > -13 and roll < 45 and roll > -45) { me["FD_roll"].show(); } else { me["FD_roll"].hide(); } - if (fd2 == 1 and ((!wow1 and !wow2 and pitch_mode != " ") or pitch_mode != " ") and getprop("/it-autoflight/custom/trk-fpa") == 0 and pitch < 25 and pitch > -13 and roll < 45 and roll > -45) { + if (fd1 == 2 and ((!wow1 and !wow2 and pitch_mode != " ") or pitch_mode != " ") and getprop("/it-autoflight/custom/trk-fpa") == 0 and pitch < 25 and pitch > -13 and roll < 45 and roll > -45) { me["FD_pitch"].show(); } else { me["FD_pitch"].hide(); } - if (getprop("/it-autoflight/fd/roll-bar") != nil) { - me["FD_roll"].setTranslation((getprop("/it-autoflight/fd/roll-bar")) * 2.2, 0); - } - if (getprop("/it-autoflight/fd/pitch-bar") != nil) { - me["FD_pitch"].setTranslation(0, -(getprop("/it-autoflight/fd/pitch-bar")) * 3.8); - } - - me["AI_agl"].setText(sprintf("%s", math.round(getprop("/position/gear-agl-ft")))); - - if (getprop("/position/gear-agl-ft") <= getprop("/instrumentation/mk-viii/inputs/arinc429/decision-height")) { - me["AI_agl"].setColor(0.7333,0.3803,0); - } else { - me["AI_agl"].setColor(0.0509,0.7529,0.2941); - } - - if (getprop("/position/gear-agl-ft") <= 2500) { - me["AI_agl"].show(); - } else { - me["AI_agl"].hide(); - } - - me["AI_agl_g"].setRotation(-roll * D2R); - - if ((wow1 or wow2) and getprop("/FMGC/status/phase") != 0 and getprop("/FMGC/status/phase") != 1) { - me["AI_stick"].show(); - me["AI_stick_pos"].show(); - } else if ((wow1 or wow2) and (getprop("/FMGC/status/phase") == 0 or getprop("/FMGC/status/phase") == 1) and (getprop("/engines/engine[0]/state") == 3 or getprop("/engines/engine[1]/state") == 3)) { - me["AI_stick"].show(); - me["AI_stick_pos"].show(); - } else { - me["AI_stick"].hide(); - me["AI_stick_pos"].hide(); - } - - me["AI_stick_pos"].setTranslation(getprop("/controls/flight/aileron-input-fast") * 196.8, getprop("/controls/flight/elevator-input-fast") * 151.5); - - # Altitude - me.altitude = getprop("/instrumentation/altimeter/indicated-altitude-ft"); - me.altOffset = me.altitude / 500 - int(me.altitude / 500); - me.middleAltText = roundaboutAlt(me.altitude / 100); - me.middleAltOffset = nil; - if (me.altOffset > 0.5) { - me.middleAltOffset = -(me.altOffset - 1) * 486.6856; - } else { - me.middleAltOffset = -me.altOffset * 486.6856; - } - me["ALT_scale"].setTranslation(0, -me.middleAltOffset); - me["ALT_scale"].update(); - me["ALT_five"].setText(sprintf("%03d",me.middleAltText+10)); - me["ALT_four"].setText(sprintf("%03d",me.middleAltText+5)); - me["ALT_three"].setText(sprintf("%03d",me.middleAltText)); - me["ALT_two"].setText(sprintf("%03d",me.middleAltText-5)); - me["ALT_one"].setText(sprintf("%03d",me.middleAltText-10)); - - me["ALT_digits"].setText(sprintf("%s", getprop("/instrumentation/altimeter/indicated-altitude-ft-pfd"))); - altTens = num(right(sprintf("%02d", getprop("/instrumentation/altimeter/indicated-altitude-ft")), 2)); - me["ALT_tens"].setTranslation(0, altTens * 1.392); - - me["ALT_digits"].setText(sprintf("%s", getprop("/instrumentation/altimeter/indicated-altitude-ft-pfd"))); - altTens = num(right(sprintf("%02d", getprop("/instrumentation/altimeter/indicated-altitude-ft")), 2)); - me["ALT_tens"].setTranslation(0, altTens * 1.392); - - # QNH - if (getprop("/modes/altimeter/std") == 1) { - me["QNH"].hide(); - me["QNH_setting"].hide(); - me["QNH_std"].show(); - me["QNH_box"].show(); - } else if (getprop("/modes/altimeter/inhg") == 0) { - me["QNH_setting"].setText(sprintf("%4.0f", getprop("/instrumentation/altimeter/setting-hpa"))); - me["QNH"].show(); - me["QNH_setting"].show(); - me["QNH_std"].hide(); - me["QNH_box"].hide(); - } else if (getprop("/modes/altimeter/inhg") == 1) { - me["QNH_setting"].setText(sprintf("%2.2f", getprop("/instrumentation/altimeter/setting-inhg"))); - me["QNH"].show(); - me["QNH_setting"].show(); - me["QNH_std"].hide(); - me["QNH_box"].hide(); - } - - # Vertical Speed - me["VS_pointer"].setRotation(getprop("/instrumentation/pfd/vs-needle") * D2R); - - me["VS_box"].setTranslation(0, getprop("/instrumentation/pfd/vs-digit-trans")); - - if (getprop("/it-autoflight/internal/vert-speed-fpm-pfd") < 2) { - me["VS_box"].hide(); - } else { - me["VS_box"].show(); - } - - if (getprop("/it-autoflight/internal/vert-speed-fpm-pfd") < 10) { - me["VS_digit"].setText(sprintf("%2.0f", "0" ~ getprop("/it-autoflight/internal/vert-speed-fpm-pfd"))); - } else { - me["VS_digit"].setText(sprintf("%2.0f", getprop("/it-autoflight/internal/vert-speed-fpm-pfd"))); - } - # ILS if (getprop("/modes/pfd/ILS2") == 1) { me["LOC_scale"].show(); @@ -1132,76 +740,7 @@ var canvas_PFD_2 = { me["GS_pointer"].hide(); } - me["LOC_pointer"].setTranslation(getprop("/instrumentation/nav[0]/heading-needle-deflection-norm") * 197, 0); - - me["GS_pointer"].setTranslation(0, getprop("/instrumentation/nav[0]/gs-needle-deflection-norm") * -197); - - # Heading - me.heading = getprop("/instrumentation/pfd/heading-scale"); - me.headOffset = me.heading / 10 - int(me.heading / 10); - me.middleText = roundabout(me.heading / 10); - me.middleOffset = nil; - if(me.middleText == 36) { - me.middleText = 0; - } - me.leftText1 = me.middleText == 0?35:me.middleText - 1; - me.rightText1 = me.middleText == 35?0:me.middleText + 1; - me.leftText2 = me.leftText1 == 0?35:me.leftText1 - 1; - me.rightText2 = me.rightText1 == 35?0:me.rightText1 + 1; - me.leftText3 = me.leftText2 == 0?35:me.leftText2 - 1; - me.rightText3 = me.rightText2 == 35?0:me.rightText2 + 1; - if (me.headOffset > 0.5) { - me.middleOffset = -(me.headOffset - 1) * 98.5416; - } else { - me.middleOffset = -me.headOffset * 98.5416; - } - me["HDG_scale"].setTranslation(me.middleOffset, 0); - me["HDG_scale"].update(); - me["HDG_four"].setText(sprintf("%d", me.middleText)); - me["HDG_five"].setText(sprintf("%d", me.rightText1)); - me["HDG_three"].setText(sprintf("%d", me.leftText1)); - me["HDG_six"].setText(sprintf("%d", me.rightText2)); - me["HDG_two"].setText(sprintf("%d", me.leftText2)); - me["HDG_seven"].setText(sprintf("%d", me.rightText3)); - me["HDG_one"].setText(sprintf("%d", me.leftText3)); - - me["HDG_four"].setFontSize(fontSizeHDG(me.middleText), 1); - me["HDG_five"].setFontSize(fontSizeHDG(me.rightText1), 1); - me["HDG_three"].setFontSize(fontSizeHDG(me.leftText1), 1); - me["HDG_six"].setFontSize(fontSizeHDG(me.rightText2), 1); - me["HDG_two"].setFontSize(fontSizeHDG(me.leftText2), 1); - me["HDG_seven"].setFontSize(fontSizeHDG(me.rightText3), 1); - me["HDG_one"].setFontSize(fontSizeHDG(me.leftText3), 1); - - if (getprop("/it-autoflight/custom/show-hdg") == 1 and getprop("/instrumentation/pfd/hdg-diff") >= -23.62 and getprop("/instrumentation/pfd/hdg-diff") <= 23.62) { - me["HDG_target"].setTranslation((getprop("/instrumentation/pfd/hdg-diff") / 10) * 98.5416, 0); - me["HDG_digit_L"].hide(); - me["HDG_digit_R"].hide(); - me["HDG_target"].show(); - } else if (getprop("/it-autoflight/custom/show-hdg") == 1 and getprop("/instrumentation/pfd/hdg-diff") < -23.62 and getprop("/instrumentation/pfd/hdg-diff") >= -180) { - me["HDG_digit_L"].setText(sprintf("%3.0f", getprop("/it-autoflight/input/hdg"))); - me["HDG_digit_L"].show(); - me["HDG_digit_R"].hide(); - me["HDG_target"].hide(); - } else if (getprop("/it-autoflight/custom/show-hdg") == 1 and getprop("/instrumentation/pfd/hdg-diff") > 23.62 and getprop("/instrumentation/pfd/hdg-diff") <= 180) { - me["HDG_digit_R"].setText(sprintf("%3.0f", getprop("/it-autoflight/input/hdg"))); - me["HDG_digit_R"].show(); - me["HDG_digit_L"].hide(); - me["HDG_target"].hide(); - } else { - me["HDG_digit_L"].hide(); - me["HDG_digit_R"].hide(); - me["HDG_target"].hide(); - } - - me["TRK_pointer"].setTranslation((getprop("/instrumentation/pfd/track-hdg-diff") / 10) * 98.5416, 0); - - me["CRS_pointer"].hide(); - - # AI HDG - me.AI_horizon_hdg_trans.setTranslation(me.middleOffset, getprop("/instrumentation/pfd/horizon-pitch") * 11.825); - me.AI_horizon_hdg_rot.setRotation(-roll * D2R, me["AI_center"].getCenter()); - me["AI_heading"].update(); + me.updateCommon(); }, }; diff --git a/Models/Instruments/PFD/res/pfd.svg b/Models/Instruments/PFD/res/pfd.svg index 5202f63c..56bb27be 100644 --- a/Models/Instruments/PFD/res/pfd.svg +++ b/Models/Instruments/PFD/res/pfd.svg @@ -41,9 +41,9 @@ inkscape:window-height="1030" id="namedview371" showgrid="false" - inkscape:zoom="1.4142136" - inkscape:cx="1020.2808" - inkscape:cy="602.13463" + inkscape:zoom="8.0000002" + inkscape:cx="277.58791" + inkscape:cy="751.03677" inkscape:window-x="1592" inkscape:window-y="-8" inkscape:window-maximized="1" @@ -3319,36 +3319,41 @@ sodipodi:nodetypes="cc" /> - - - - - - + id="AI_bank_lim" + inkscape:label="#g4750" + transform="translate(0,0.59999999)"> + + + + + + + + + + Altitude bug diff + gain + 0.05 + 1.0 + + /it-autoflight/internal/alt + + + /instrumentation/altimeter/indicated-altitude-ft + + /instrumentation/pfd/alt-diff + + Localizer course diff gain diff --git a/revision.txt b/revision.txt index cf237193..96f23f82 100644 --- a/revision.txt +++ b/revision.txt @@ -1 +1 @@ -4007 \ No newline at end of file +4008 \ No newline at end of file