diff --git a/A320-main.xml b/A320-main.xml index fa0faba6..35eec1c2 100644 --- a/A320-main.xml +++ b/A320-main.xml @@ -1913,6 +1913,7 @@ Aircraft/A320-family/Nasal/MCDU/MCDU.nas Aircraft/A320-family/Nasal/MCDU/INITA.nas Aircraft/A320-family/Nasal/MCDU/INITB.nas + Aircraft/A320-family/Nasal/MCDU/FUELPRED.nas Aircraft/A320-family/Nasal/MCDU/PERFAPPR.nas Aircraft/A320-family/Nasal/MCDU/PERFCLB.nas Aircraft/A320-family/Nasal/MCDU/PERFCRZ.nas diff --git a/Models/Instruments/MCDU/MCDU.nas b/Models/Instruments/MCDU/MCDU.nas index 8c4190af..754f4a05 100644 --- a/Models/Instruments/MCDU/MCDU.nas +++ b/Models/Instruments/MCDU/MCDU.nas @@ -119,14 +119,8 @@ var managedSpeed = props.globals.getNode("it-autoflight/input/spd-managed", 1); # INT-A variables - - - - # PREF - - # Fetch nodes into vectors var pageProp = [props.globals.getNode("MCDU[0]/page", 1), props.globals.getNode("MCDU[1]/page", 1)]; var active = [props.globals.getNode("MCDU[0]/active", 1), props.globals.getNode("MCDU[1]/active", 1)]; @@ -197,8 +191,8 @@ var canvas_MCDU_base = { return ["Simple","Simple_Center","Scratchpad","Simple_Title","Simple_PageNum","ArrowLeft","ArrowRight","Simple_L1","Simple_L2","Simple_L3","Simple_L4","Simple_L5","Simple_L6","Simple_L0S","Simple_L1S","Simple_L2S","Simple_L3S","Simple_L4S","Simple_L5S","Simple_L6S", "Simple_L1_Arrow","Simple_L2_Arrow","Simple_L3_Arrow","Simple_L4_Arrow","Simple_L5_Arrow","Simple_L6_Arrow","Simple_R1","Simple_R2","Simple_R3","Simple_R4","Simple_R5","Simple_R6","Simple_R1S","Simple_R2S","Simple_R3S","Simple_R4S","Simple_R5S", "Simple_R6S","Simple_R1_Arrow","Simple_R2_Arrow","Simple_R3_Arrow","Simple_R4_Arrow","Simple_R5_Arrow","Simple_R6_Arrow","Simple_C1","Simple_C2","Simple_C3","Simple_C4","Simple_C5","Simple_C6","Simple_C1S","Simple_C2S","Simple_C3S","Simple_C4S", - "Simple_C5S","Simple_C6S","INITA","INITA_CoRoute","INITA_FltNbr","INITA_CostIndex","INITA_CruiseFLTemp","INITA_FromTo","INITA_InitRequest","INITA_AlignIRS","INITB","INITB_ZFWCG","INITB_ZFW","INITB_ZFW_S","INITB_Block","PERFTO","PERFTO_V1","PERFTO_VR", - "PERFTO_V2","PERFTO_FE","PERFTO_SE","PERFTO_OE","PERFAPPR","PERFAPPR_FE","PERFAPPR_SE","PERFAPPR_OE","PERFGA","PERFGA_FE","PERFGA_SE","PERFGA_OE"]; + "Simple_C5S","Simple_C6S","INITA","INITA_CoRoute","INITA_FltNbr","INITA_CostIndex","INITA_CruiseFLTemp","INITA_FromTo","INITA_InitRequest","INITA_AlignIRS","INITB","INITB_ZFWCG","INITB_ZFW","INITB_ZFW_S","INITB_Block","FUELPRED","FUELPRED_ZFW","FUELPRED_ZFWCG","FUELPRED_ZFW_S", + "PERFTO","PERFTO_V1","PERFTO_VR","PERFTO_V2","PERFTO_FE","PERFTO_SE","PERFTO_OE","PERFAPPR","PERFAPPR_FE","PERFAPPR_SE","PERFAPPR_OE","PERFGA","PERFGA_FE","PERFGA_SE","PERFGA_OE"]; }, update: func() { if (ac1.getValue() >= 110 and mcdu1_lgt.getValue() > 0.01) { @@ -222,6 +216,7 @@ var canvas_MCDU_base = { me["Simple_Center"].hide(); me["INITA"].hide(); me["INITB"].hide(); + me["FUELPRED"].hide(); me["PERFTO"].hide(); me["PERFAPPR"].hide(); me["PERFGA"].hide(); @@ -306,6 +301,7 @@ var canvas_MCDU_base = { me["Simple_Center"].hide(); me["INITA"].hide(); me["INITB"].hide(); + me["FUELPRED"].hide(); me["PERFTO"].hide(); me["PERFAPPR"].hide(); me["PERFGA"].hide(); @@ -390,6 +386,7 @@ var canvas_MCDU_base = { me["Simple_Center"].hide(); me["INITA"].hide(); me["INITB"].hide(); + me["FUELPRED"].hide(); me["PERFTO"].hide(); me["PERFAPPR"].hide(); me["PERFGA"].hide(); @@ -472,6 +469,7 @@ var canvas_MCDU_base = { me["Simple_Center"].hide(); me["INITA"].hide(); me["INITB"].hide(); + me["FUELPRED"].hide(); me["PERFTO"].hide(); me["PERFAPPR"].hide(); me["PERFGA"].hide(); @@ -559,6 +557,7 @@ var canvas_MCDU_base = { me["Simple_Center"].show(); me["INITA"].hide(); me["INITB"].hide(); + me["FUELPRED"].hide(); me["PERFTO"].hide(); me["PERFAPPR"].hide(); me["PERFGA"].hide(); @@ -658,6 +657,7 @@ var canvas_MCDU_base = { me["Simple_Center"].hide(); me["INITA"].hide(); me["INITB"].hide(); + me["FUELPRED"].hide(); me["PERFTO"].hide(); me["PERFAPPR"].hide(); me["PERFGA"].hide(); @@ -799,6 +799,7 @@ var canvas_MCDU_base = { me["Simple_Center"].hide(); me["INITA"].show(); me["INITB"].hide(); + me["FUELPRED"].hide(); me["PERFTO"].hide(); me["PERFAPPR"].hide(); me["PERFGA"].hide(); @@ -950,6 +951,7 @@ var canvas_MCDU_base = { me["Simple_Center"].show(); me["INITA"].hide(); me["INITB"].show(); + me["FUELPRED"].hide(); me["PERFTO"].hide(); me["PERFAPPR"].hide(); me["PERFGA"].hide(); @@ -1043,7 +1045,7 @@ var canvas_MCDU_base = { me["Simple_R5"].setText(trip_wind.getValue()); me["Simple_R6S"].setText("EXTRA/TIME"); - if (blockSet.getValue() == 1) { + if (blockSet.getValue() == 1 and zfwSet.getValue() == 1) { setprop("FMGC/internal/rte-rsv", num((block.getValue() - taxi_fuel.getValue() - min_dest_fob.getValue()) * (rte_percent.getValue() / 100) / (1 + rte_percent.getValue() / 100))); setprop("FMGC/internal/trip-fuel", num(block.getValue() - taxi_fuel.getValue() - min_dest_fob.getValue() - rte_rsv.getValue())); setprop("FMGC/internal/tow", num(block.getValue() + zfw.getValue() - taxi_fuel.getValue())); @@ -1054,8 +1056,7 @@ var canvas_MCDU_base = { me["Simple_L4"].setText(sprintf("%4.1f/" ~ alt_time.getValue(), alt_fuel.getValue())); me["Simple_L5"].setText(sprintf("%4.1f/" ~ final_time.getValue(), final_fuel.getValue())); me["Simple_L6"].setText(sprintf("%2.1f", min_dest_fob.getValue())); - me["Simple_R2"].show(); - me["Simple_R3S"].hide(); + me["Simple_R3S"].hide(); me["Simple_R3"].hide(); me["Simple_R3_Arrow"].hide(); me["Simple_C4"].hide(); @@ -1063,7 +1064,6 @@ var canvas_MCDU_base = { me["Simple_R6"].setText(sprintf("%4.1f/" ~ extra_time.getValue(), extra_fuel.getValue())); me["Simple_Title"].setText("INIT FUEL PREDICTION "); - me["INITB_Block"].hide(); me.colorLeft("ack", "grn", "blu", "blu", "blu", "blu"); me.colorRight("ack", "ack", "ack", "grn", "ack", "grn"); @@ -1073,7 +1073,6 @@ var canvas_MCDU_base = { me["Simple_L4"].setText("---.-/----"); me["Simple_L5"].setText("---.-/----"); me["Simple_L6"].setText("---.-"); - me["Simple_R2"].hide(); me["Simple_R3S"].show(); me["Simple_R3"].show(); me["Simple_R3_Arrow"].show(); @@ -1087,7 +1086,6 @@ var canvas_MCDU_base = { me["Simple_R6"].setText("---.-/----"); me["Simple_Title"].setText("INIT"); - me["INITB_Block"].show(); } me["Simple_R1S"].setText("ZFWCG/ ZFW"); @@ -1112,12 +1110,21 @@ var canvas_MCDU_base = { me["Simple_R1"].hide(); } + if (blockSet.getValue() == 1) { + me["Simple_R2"].show(); + me["INITB_Block"].hide(); + } else { + me["Simple_R2"].hide(); + me["INITB_Block"].show(); + } + } else if (page == "FUELPRED") { if (!pageSwitch[i].getBoolValue()) { me["Simple"].show(); me["Simple_Center"].show(); me["INITA"].hide(); me["INITB"].hide(); + me["FUELPRED"].show(); me["PERFTO"].hide(); me["PERFAPPR"].hide(); me["PERFGA"].hide(); @@ -1148,7 +1155,7 @@ var canvas_MCDU_base = { me["Simple_L6_Arrow"].hide(); me["Simple_C1"].show(); me["Simple_C2"].show(); - me["Simple_C3"].hide(); + me["Simple_C3"].show(); me["Simple_C4"].hide(); me["Simple_C5"].hide(); me["Simple_C6"].hide(); @@ -1160,16 +1167,16 @@ var canvas_MCDU_base = { me["Simple_C6S"].hide(); me["Simple_R1"].show(); me["Simple_R2"].show(); - me["Simple_R3"].show(); + me["Simple_R3"].hide(); me["Simple_R4"].show(); - me["Simple_R5"].hide(); - me["Simple_R6"].hide(); + me["Simple_R5"].show(); + me["Simple_R6"].show(); me["Simple_R1S"].show(); me["Simple_R2S"].hide(); me["Simple_R3S"].show(); me["Simple_R4S"].show(); - me["Simple_R5S"].hide(); - me["Simple_R6S"].hide(); + me["Simple_R5S"].show(); + me["Simple_R6S"].show(); me["Simple_R1_Arrow"].hide(); me["Simple_R2_Arrow"].hide(); me["Simple_R3_Arrow"].hide(); @@ -1182,15 +1189,15 @@ var canvas_MCDU_base = { me.fontRight(default, default, default, default, default, default); me.fontRightS(default, default, default, default, default, default); - me.fontSizeLeft(normal, normal, normal, normal, normal, normal); - me.fontSizeRight(normal, normal, normal, normal, normal, normal); + me.fontSizeLeft(normal, normal, small, small, small, small); + me.fontSizeRight(normal, normal, small, small, small, small); - me.colorLeft("grn", "grn", "blu", "blu", "blu", "grn"); + me.colorLeft("grn", "grn", "wht", "wht", "wht", "wht"); me.colorLeftS("wht", "wht", "wht", "wht", "wht", "wht"); me.colorLeftArrow("wht", "wht", "wht", "wht", "wht", "wht"); - me.colorCenter("grn", "grn", "wht", "wht", "wht", "wht"); + me.colorCenter("grn", "grn", "blu", "wht", "wht", "wht"); me.colorCenterS("wht", "wht", "wht", "wht", "wht", "wht"); - me.colorRight("grn", "grn", "blu", "blu", "wht", "wht"); + me.colorRight("grn", "grn", "blu", "wht", "wht", "wht"); me.colorRightS("wht", "wht", "wht", "wht", "wht", "wht"); me.colorRightArrow("wht", "wht", "wht", "wht", "wht", "wht"); @@ -1202,18 +1209,14 @@ var canvas_MCDU_base = { } else { me["Simple_L1"].setText(arrArpt.getValue()); } - me["Simple_L2"].setText("----"); - me["Simple_L3"].setText("--.-/--.-"); - me["Simple_L4"].setText("-.-/-.-"); - me["Simple_L5"].setText("--.-/----"); - me["Simple_L6"].setText("--.-/----"); + me["Simple_L1S"].setText("AT"); me["Simple_L2S"].setText("X"); - me["Simple_L3S"].setText("GW/CG"); - me["Simple_L4S"].setText("RTE RSV/"); + me["Simple_L3S"].setText("RTE RSV/PCT"); + me["Simple_L4S"].setText("ALTN/TIME"); me["Simple_L5S"].setText("FINAL/TIME"); - me["Simple_L6S"].setText("EXTRA/TIME"); + me["Simple_L6S"].setText("MIN DEST FOB"); me["Simple_C1S"].setText("UTC"); me["Simple_C1"].setText("----"); @@ -1221,17 +1224,69 @@ var canvas_MCDU_base = { me["Simple_R1"].setText("-.-"); me["Simple_R2"].setText("-.-"); - me["Simple_R3"].setText("-.-/--+--"); - me["Simple_R4"].setText("----*/36090"); me["Simple_R1S"].setText("EFOB"); - me["Simple_R3S"].setText("FOB"); - me["Simple_R4S"].setText("CRZTEMP/TROPO"); + me["Simple_R2S"].setText("X"); + me["Simple_R4S"].setText("FOB "); + me["Simple_R5S"].setText(" GW/ CG"); + me["Simple_R6S"].setText("EXTRA/TIME"); + + if (blockSet.getValue() == 1 and zfwSet.getValue() == 1) { + setprop("FMGC/internal/rte-rsv", num((block.getValue() - taxi_fuel.getValue() - min_dest_fob.getValue()) * (rte_percent.getValue() / 100) / (1 + rte_percent.getValue() / 100))); + setprop("FMGC/internal/trip-fuel", num(block.getValue() - taxi_fuel.getValue() - min_dest_fob.getValue() - rte_rsv.getValue())); + setprop("FMGC/internal/tow", num(block.getValue() + zfw.getValue() - taxi_fuel.getValue())); + setprop("FMGC/internal/lw", num(tow.getValue() - trip_fuel.getValue())); + + me["Simple_L3"].setText(sprintf("%4.1f/", rte_rsv.getValue()) ~ sprintf("%4.1f", rte_percent.getValue())); + me["Simple_L4"].setText(sprintf("%4.1f/" ~ alt_time.getValue(), alt_fuel.getValue())); + me["Simple_L5"].setText(sprintf("%4.1f/" ~ final_time.getValue(), final_fuel.getValue())); + me["Simple_L6"].setText(sprintf("%2.1f", min_dest_fob.getValue())); + + me["Simple_R4"].setText(sprintf("%4.1f/FF+FQ", 0.0)); + me["Simple_R5"].setText(sprintf("%4.1f/", 0.0) ~ sprintf("%4.1f", 0.0)); + me["Simple_R6"].setText(sprintf("%4.1f/" ~ extra_time.getValue(), extra_fuel.getValue())); + + me.colorLeft("ack", "ack", "blu", "blu", "blu", "blu"); + me.colorRight("ack", "ack", "blu", "grn", "grn", "grn"); + } else { + me["Simple_L3"].setText("---.-/---.-"); + me["Simple_L4"].setText("---.-/----"); + me["Simple_L5"].setText("---.-/----"); + me["Simple_L6"].setText("---.-"); + + me["Simple_R4"].setText("---.-/FF+FQ"); + me["Simple_R5"].setText("---.-/---.-"); + me["Simple_R6"].setText("---.-/----"); + } + + me["Simple_R3S"].setText("ZFWCG/ZFW"); + me["Simple_R3"].setText(sprintf("%3.1f", zfw.getValue())); + if (zfwcgSet.getValue() == 1) { + me["Simple_C3"].setFontSize(normal); + me["Simple_C3"].setText(" " ~ sprintf("%3.1f", zfwcg.getValue())); + me["FUELPRED_ZFWCG"].hide(); + } else { + me["Simple_C3"].setFontSize(small); + me["Simple_C3"].setText(" " ~ sprintf("%3.1f", zfwcg.getValue())); + me["FUELPRED_ZFWCG"].hide(); + } + + if (zfwSet.getValue() == 1) { + me["FUELPRED_ZFW"].hide(); + me["FUELPRED_ZFW_S"].show(); + me["Simple_R3"].show(); + } else { + me["FUELPRED_ZFW"].show(); + me["FUELPRED_ZFW_S"].hide(); + me["Simple_R3"].hide(); + } + } else if (page == "TO") { if (!pageSwitch[i].getBoolValue()) { me["Simple"].show(); me["Simple_Center"].show(); me["INITA"].hide(); me["INITB"].hide(); + me["FUELPRED"].hide(); me["PERFTO"].show(); me["PERFAPPR"].hide(); me["PERFGA"].hide(); @@ -1416,6 +1471,7 @@ var canvas_MCDU_base = { me["Simple_Center"].show(); me["INITA"].hide(); me["INITB"].hide(); + me["FUELPRED"].hide(); me["PERFTO"].hide(); me["PERFAPPR"].show(); me["PERFGA"].hide(); @@ -1554,6 +1610,7 @@ var canvas_MCDU_base = { me["Simple_Center"].show(); me["INITA"].hide(); me["INITB"].hide(); + me["FUELPRED"].hide(); me["PERFTO"].hide(); me["PERFAPPR"].hide(); me["PERFGA"].show(); @@ -1683,6 +1740,7 @@ var canvas_MCDU_base = { me["Simple_Center"].show(); me["INITA"].hide(); me["INITB"].hide(); + me["FUELPRED"].hide(); me["PERFTO"].hide(); me["PERFAPPR"].hide(); me["PERFGA"].hide(); diff --git a/Models/Instruments/MCDU/res/mcdu.svg b/Models/Instruments/MCDU/res/mcdu.svg index 6c5d8b16..df5cb2a3 100644 --- a/Models/Instruments/MCDU/res/mcdu.svg +++ b/Models/Instruments/MCDU/res/mcdu.svg @@ -37,17 +37,17 @@ guidetolerance="20" inkscape:pageopacity="1" inkscape:pageshadow="2" - inkscape:window-width="1920" - inkscape:window-height="1035" + inkscape:window-width="1280" + inkscape:window-height="730" id="namedview371" showgrid="true" - inkscape:zoom="0.5" - inkscape:cx="997.98642" - inkscape:cy="772.65269" + inkscape:zoom="0.55334531" + inkscape:cx="846.30776" + inkscape:cy="468.14561" inkscape:window-x="0" inkscape:window-y="23" inkscape:window-maximized="1" - inkscape:current-layer="Simple" + inkscape:current-layer="FUELPRED" showguides="false" inkscape:snap-global="false" units="px" @@ -1404,6 +1404,123 @@ + + / + + . + / + + + + + + + + + + + + + . + + F F S @@ -1719,7 +1836,7 @@ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:70px;line-height:1.25;font-family:BoeingCDULarge;-inkscape-font-specification:BoeingCDULarge;text-align:start;text-anchor:start;fill:#ffffff;fill-opacity:1" y="422.15305" x="398.21817" - id="tspan1085" + id="tspan1135" sodipodi:role="line">O = @@ -1745,7 +1862,7 @@ style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:63.9924px;line-height:1.25;font-family:'Helvetica Medium';-inkscape-font-specification:'Helvetica Medium, Medium';text-align:start;text-anchor:start;fill:#ffffff;fill-opacity:1" y="278.32764" x="478.87796" - id="tspan1091" + id="tspan1141" sodipodi:role="line">= = diff --git a/Nasal/MCDU/FUELPRED.nas b/Nasal/MCDU/FUELPRED.nas new file mode 100644 index 00000000..10f55fda --- /dev/null +++ b/Nasal/MCDU/FUELPRED.nas @@ -0,0 +1,165 @@ +# A3XX mCDU by Joshua Davidson (Octal450) and Jonathan Redpath + +# Copyright (c) 2020 Matthew Maring (hayden2000) + +# From INIT-B +var zfwcg = props.globals.getNode("FMGC/internal/zfwcg", 1); +var zfwcgSet = props.globals.getNode("FMGC/internal/zfwcg-set", 1); +var zfw = props.globals.getNode("FMGC/internal/zfw", 1); +var zfwSet = props.globals.getNode("FMGC/internal/zfw-set", 1); +var block = props.globals.getNode("FMGC/internal/block", 1); +var blockSet = props.globals.getNode("FMGC/internal/block-set", 1); +var taxi_fuel = props.globals.getNode("FMGC/internal/taxi-fuel", 1); +var trip_fuel = props.globals.getNode("FMGC/internal/trip-fuel", 1); +var trip_time = props.globals.getNode("FMGC/internal/trip-time", 1); +var rte_rsv = props.globals.getNode("FMGC/internal/rte-rsv", 1); +var rte_percent = props.globals.getNode("FMGC/internal/rte-percent", 1); +var alt_fuel = props.globals.getNode("FMGC/internal/alt-fuel", 1); +var alt_time = props.globals.getNode("FMGC/internal/alt-time", 1); +var final_fuel = props.globals.getNode("FMGC/internal/final-fuel", 1); +var final_time = props.globals.getNode("FMGC/internal/final-time", 1); +var min_dest_fob = props.globals.getNode("FMGC/internal/min-dest-fob", 1); +var tow = props.globals.getNode("FMGC/internal/tow", 1); +var lw = props.globals.getNode("FMGC/internal/lw", 1); +var trip_wind = props.globals.getNode("FMGC/internal/trip-wind", 1); +var extra_fuel = props.globals.getNode("FMGC/internal/extra-fuel", 1); +var extra_time = props.globals.getNode("FMGC/internal/extra-time", 1); + +# FUELPRED Specials +var alt_airport = props.globals.getNode("FMGC/internal/alt-airport", 1); +var pri_utc = props.globals.getNode("FMGC/internal/pri-utc", 1); +var alt_utc = props.globals.getNode("FMGC/internal/alt-utc", 1); +var pri_efob = props.globals.getNode("FMGC/internal/pri-efob", 1); +var alt_efob = props.globals.getNode("FMGC/internal/alt-efob", 1); + +var fob = props.globals.getNode("FMGC/internal/fob", 1); +var gw = props.globals.getNode("FMGC/internal/gw", 1); +var gc = props.globals.getNode("FMGC/internal/gc", 1); + + +var fuelPredInput = func(key, i) { + var scratchpad = getprop("MCDU[" ~ i ~ "]/scratchpad"); + if (key == "L3") { + if (scratchpad == "CLR") { + notAllowed(i); + } else if (getprop("FMGC/internal/trip-fuel") != 0) { + var tfs = size(scratchpad); + if (tfs >= 2 and tfs <= 5 and find("/", scratchpad) == 0) { + var perc = split("/", scratchpad)[1]; + if (perc >= 0.0 and perc <= 100.0) { + setprop("FMGC/internal/rte-rsv", num(perc) / 100 * num(trip_fuel.getValue())); + setprop("FMGC/internal/rte-percent", perc); + setprop("MCDU[" ~ i ~ "]/scratchpad", ""); + } + } else if (tfs >= 1 and tfs <= 4) { + if (scratchpad >= 0.0 and scratchpad <= trip_fuel.getValue()) { + setprop("FMGC/internal/rte-rsv", scratchpad); + setprop("FMGC/internal/rte-percent", scratchpad / num(trip_fuel.getValue()) * 100); + setprop("MCDU[" ~ i ~ "]/scratchpad", ""); + } else { + notAllowed(i); + } + } else { + notAllowed(i); + } + } else { + notAllowed(i); + } + } else if (key == "L4") { + if (scratchpad == "CLR") { + notAllowed(i); + } else { + var tfs = size(scratchpad); + if (tfs >= 1 and tfs <= 3) { + if (scratchpad >= 0.0 and scratchpad <= 99.9) { + setprop("FMGC/internal/alt-fuel", scratchpad); + setprop("MCDU[" ~ i ~ "]/scratchpad", ""); + + setprop("FMGC/internal/min-dest-fob", num(alt_fuel.getValue() + final_fuel.getValue())); + setprop("FMGC/internal/rte-rsv", num((block.getValue() - taxi_fuel.getValue() - min_dest_fob.getValue()) * (rte_percent.getValue() / 100) / (1 + rte_percent.getValue() / 100))); + setprop("FMGC/internal/trip-fuel", num(block.getValue() - taxi_fuel.getValue() - min_dest_fob.getValue() - rte_rsv.getValue())); + setprop("FMGC/internal/tow", num(block.getValue() + zfw.getValue() - taxi_fuel.getValue())); + setprop("FMGC/internal/lw", num(tow.getValue() - trip_fuel.getValue())); + + } else { + notAllowed(i); + } + } else { + notAllowed(i); + } + } + } else if (key == "L5") { + if (scratchpad == "CLR") { + notAllowed(i); + } else { + var tfs = size(scratchpad); + if (tfs >= 1 and tfs <= 3) { + if (scratchpad >= 0.0 and scratchpad <= 99.9) { + setprop("FMGC/internal/final-fuel", scratchpad); + setprop("MCDU[" ~ i ~ "]/scratchpad", ""); + + setprop("FMGC/internal/min-dest-fob", num(alt_fuel.getValue() + final_fuel.getValue())); + setprop("FMGC/internal/rte-rsv", num((block.getValue() - taxi_fuel.getValue() - min_dest_fob.getValue()) * (rte_percent.getValue() / 100) / (1 + rte_percent.getValue() / 100))); + setprop("FMGC/internal/trip-fuel", num(block.getValue() - taxi_fuel.getValue() - min_dest_fob.getValue() - rte_rsv.getValue())); + setprop("FMGC/internal/tow", num(block.getValue() + zfw.getValue() - taxi_fuel.getValue())); + setprop("FMGC/internal/lw", num(tow.getValue() - trip_fuel.getValue())); + + } else { + notAllowed(i); + } + } else { + notAllowed(i); + } + } + } else if (key == "R3") { + if (scratchpad == "CLR") { + notAllowed(i); + } else { + var tfs = size(scratchpad); + if (tfs == 0) { + var zfw = getprop("fdm/jsbsim/inertia/weight-lbs") - getprop("consumables/fuel/total-fuel-lbs"); + setprop("MCDU[" ~ i ~ "]/scratchpad", "/" ~ sprintf("%3.1f", math.round(zfw / 1000, 0.1))); + } else if (tfs >= 2 and tfs <= 11 and find("/", scratchpad) != -1) { + var zfwi = split("/", scratchpad); + var zfwcg = size(zfwi[0]); + var zfw = size(zfwi[1]); + if (zfwcg >= 1 and zfwcg <= 5 and zfwi[0] > 0 and zfwi[0] <= 99.9) { + setprop("FMGC/internal/zfwcg", zfwi[0]); + setprop("FMGC/internal/zfwcg-set", 1); + if (getprop("FMGC/internal/block-set") != 1) { + setprop("FMGC/internal/block", 30); + setprop("FMGC/internal/block-set", 1); + } + } + if (zfw >= 1 and zfw <= 5 and zfwi[1] > 0 and zfwi[1] <= 999.9) { + setprop("FMGC/internal/zfw", zfwi[1]); + setprop("FMGC/internal/zfw-set", 1); + if (getprop("FMGC/internal/block-set") != 1) { + setprop("FMGC/internal/block", 30); + setprop("FMGC/internal/block-set", 1); + } + } + if ((zfwcg >= 1 and zfwcg <= 5 and zfwi[0] > 0 and zfwi[0] <= 99.9) or (zfw >= 1 and zfw <= 5 and zfwi[1] > 0 and zfwi[1] <= 999.9)) { + setprop("MCDU[" ~ i ~ "]/scratchpad", ""); + } else { + notAllowed(i); + } + } else if (tfs >= 1 and tfs <= 5) { + var zfwcg = size(scratchpad); + if (zfwcg >= 1 and zfwcg <= 5 and scratchpad > 0 and scratchpad <= 99.9) { + setprop("FMGC/internal/zfwcg", scratchpad); + setprop("FMGC/internal/zfwcg-set", 1); + if (getprop("FMGC/internal/block-set") != 1) { + setprop("FMGC/internal/block", 30); + setprop("FMGC/internal/block-set", 1); + } + setprop("MCDU[" ~ i ~ "]/scratchpad", ""); + } else { + notAllowed(i); + } + } else { + notAllowed(i); + } + } + } +} diff --git a/Nasal/MCDU/MCDU.nas b/Nasal/MCDU/MCDU.nas index d6b829cb..da7bbea6 100644 --- a/Nasal/MCDU/MCDU.nas +++ b/Nasal/MCDU/MCDU.nas @@ -170,6 +170,8 @@ var lskbutton = func(btn, i) { initInputA("L3",i); } else if (getprop("MCDU[" ~ i ~ "]/page") == "INITB") { initInputB("L3",i); + } else if (getprop("MCDU[" ~ i ~ "]/page") == "FUELPRED") { + fuelPredInput("L3",i); } else if (getprop("MCDU[" ~ i ~ "]/page") == "TO") { perfTOInput("L3",i); } else if (getprop("MCDU[" ~ i ~ "]/page") == "APPR") { @@ -190,6 +192,8 @@ var lskbutton = func(btn, i) { setprop("MCDU[" ~ i ~ "]/page", "STATUS"); } else if (getprop("MCDU[" ~ i ~ "]/page") == "INITB") { initInputB("L4",i); + } else if (getprop("MCDU[" ~ i ~ "]/page") == "FUELPRED") { + fuelPredInput("L4",i); } else if (getprop("MCDU[" ~ i ~ "]/page") == "TO") { perfTOInput("L4",i); } else if (getprop("MCDU[" ~ i ~ "]/page") == "APPR") { @@ -206,6 +210,8 @@ var lskbutton = func(btn, i) { initInputA("L5",i); } else if (getprop("MCDU[" ~ i ~ "]/page") == "INITB") { initInputB("L5",i); + } else if (getprop("MCDU[" ~ i ~ "]/page") == "FUELPRED") { + fuelPredInput("L5",i); } else if (getprop("MCDU[" ~ i ~ "]/page") == "TO") { perfTOInput("L5",i); } else if (getprop("MCDU[" ~ i ~ "]/page") == "CLB") { @@ -286,6 +292,8 @@ var rskbutton = func(btn, i) { } else if (btn == "3") { if (getprop("MCDU[" ~ i ~ "]/page") == "INITA") { initInputA("R3",i); + } else if (getprop("MCDU[" ~ i ~ "]/page") == "FUELPRED") { + fuelPredInput("R3",i); } else if (getprop("MCDU[" ~ i ~ "]/page") == "TO") { perfTOInput("R3",i); } else if (getprop("MCDU[" ~ i ~ "]/page") == "APPR") {