From b49619c8c9742fdfb7d56f49445fbbe14c4e3b5b Mon Sep 17 00:00:00 2001 From: James Turner Date: Fri, 2 Nov 2018 22:01:09 +0100 Subject: [PATCH] ISFS box hookup --- Aircraft/Instruments-3d/ISFD/ISFD.nas | 133 +++++++++++++++++++++---- Aircraft/Instruments-3d/ISFD/README.md | 0 2 files changed, 112 insertions(+), 21 deletions(-) create mode 100644 Aircraft/Instruments-3d/ISFD/README.md diff --git a/Aircraft/Instruments-3d/ISFD/ISFD.nas b/Aircraft/Instruments-3d/ISFD/ISFD.nas index a9f5c0d83..e001924f7 100644 --- a/Aircraft/Instruments-3d/ISFD/ISFD.nas +++ b/Aircraft/Instruments-3d/ISFD/ISFD.nas @@ -21,12 +21,14 @@ boxHeight: 48, new : func() { var obj = { parents : [ISFD], + _mode : '' }; ISFD.hsiLeft = ISFD.speedTapeWidth - ISFD.halfSize; ISFD.hsiXCenter = ISFD.hsiLeft + ISFD.hsiWidth/2; ISFD.hsiRight = ISFD.halfSize - ISFD.altTapeWidth; ISFD.hsiBottom = ISFD.hsiHeight/2; + ISFD.modeBoxHeight = (ISFD.baseSize - ISFD.hsiHeight)/2; obj.canvas = canvas.new({ "name" : "ISFD Canvas", @@ -73,9 +75,9 @@ createContents : func() me.createSpeedBox(); me.createAltitudeBox(); - # in / HPA readout (text) (or STD) + me.createAltimeterSetting(); # mach readout - not on the B737 model? - # mode readout, APP for sure, what else? + me.createModeText(); # if ILS is tuned! # glideslope marker @@ -158,15 +160,28 @@ addHorizontalSymmetricLine : func(path, positiveLength, y) return path; }, -createDigitTape : func(parent, name) +createDigitTape : func(parent, name, suffix = nil) { + if (suffix != nil) { + print('Suffix is:' ~ suffix); + } + var t = parent.createChild('text', name); - var s = ''; + # 'top' zero (above 9) + var s = '0' ~ chr(10); + if (suffix != nil) { + s = '0' ~ suffix ~ chr(10); + } + for (var i=9; i>=0; i-=1) { - s = s ~ i ~ chr(10); + if (suffix != nil) { + s = s ~ i ~ suffix ~ chr(10); + } else { + s = s ~ i ~ chr(10); + } } t.setText(s); - t.setFont("LiberationFonts/LiberationMono-Bold.ttf"); + t.setFont("LiberationFonts/LiberationMono-Regular.ttf"); t.setFontSize(44); t.set('line-height', 0.9); t.setAlignment("left-bottom"); @@ -385,7 +400,7 @@ createAltitudeTape : func() text.setText(text); text.setFontSize(36); text.setAlignment("left-center"); - text.setFont("LiberationFonts/LiberationMono-Bold.ttf"); + text.setFont("LiberationFonts/LiberationMono-Regular.ttf"); text.setTranslation(2, -y); # we will update the text very often, ensure we only do @@ -400,14 +415,14 @@ createAltitudeTape : func() updateAltitudeTape : func() { var altFt = me._controller.getAltitudeFt(); - var alt100 = int(altFt/100); - var altMod100 = altFt - (alt100 * 100); + var alt200 = int(altFt/200); + var altMod200 = altFt - (alt200 * 200); - var offset = 128 * (altMod100 / 100.0); + var offset = 128 * (altMod200 / 200.0); me._altTapeGroup.setTranslation(ISFD.hsiRight, offset); - # compute this as current alt - half altitdue range - var lowestAlt = (alt100 - 6) * 200; + # compute this as current alt - half altitude range + var lowestAlt = (alt200 - 6) * 200; for (var i=0; i<=12; i+=1) { @@ -429,7 +444,7 @@ createCompassRose : func() clipGroup.set("clip-frame", canvas.Element.LOCAL); clipGroup.set("clip", "rect(179px, 142px, 256px, -164px)"); - var roseBoxHeight = (ISFD.baseSize - ISFD.hsiHeight)/2; + var roseBoxHeight = ISFD.modeBoxHeight; var hh = roseBoxHeight / 2; # background of the compass @@ -487,7 +502,31 @@ createCompassRose : func() createAltitudeBox : func() { + var halfBoxHeight = ISFD.boxHeight / 2; + var box = me.root.rect(ISFD.hsiRight - 10, -halfBoxHeight, + ISFD.altTapeWidth + 10, ISFD.boxHeight); + box.setColorFill('#000000'); + box.setColor('#ffffff'); + box.setStrokeLineWidth(2); + box.set('z-index', 2); + var clipGroup = me.root.createChild('group', 'altitude-box-clip'); + clipGroup.set("clip-frame", canvas.Element.LOCAL); + clipGroup.set("clip", "rect(-24px," ~ (ISFD.altTapeWidth + 10) ~ "px, 24px, 0px)"); + clipGroup.setTranslation(ISFD.hsiRight - 10, 0); + clipGroup.set('z-index', 3); + + var text = clipGroup.createChild('text', 'altitude-box-text'); + me._altitudeBoxText = text; + + text.setText('88 '); + text.setFontSize(44); + text.setAlignment("left-center"); + text.setFont("LiberationFonts/LiberationMono-Regular.ttf"); + + me._altitudeDigits00 = me.createDigitTape(clipGroup, 'altitude-digits00', '0'); + me._altitudeDigits00.setFontSize(32); + me._altitudeDigits00.set('z-index', 4); }, createSpeedBox : func() @@ -498,22 +537,64 @@ createSpeedBox : func() box.setColorFill('#000000'); box.setColor('#ffffff'); box.setStrokeLineWidth(2); - box.set('z-index', 2); - var text = me.root.createChild('text', 'speed-box-text'); + var clipGroup = me.root.createChild('group', 'speed-box-clip'); + clipGroup.set("clip-frame", canvas.Element.LOCAL); + clipGroup.set("clip", "rect(-24px," ~ (ISFD.speedTapeWidth + 4) ~ "px, 24px, 0px)"); + clipGroup.setTranslation(-ISFD.halfSize, 0); + clipGroup.set('z-index', 3); + + var text = clipGroup.createChild('text', 'speed-box-text'); + me._speedBoxText = text; + text.setText('88 '); text.setFontSize(44); text.setAlignment("left-center"); - text.setFont("LiberationFonts/LiberationMono-Bold.ttf"); - text.setTranslation(-ISFD.halfSize, 0); + text.setFont("LiberationFonts/LiberationMono-Regular.ttf"); - text.set('z-index', 3); - - me._speedDigit0 = me.createDigitTape(me.root, 'speed-digit0'); + me._speedDigit0 = me.createDigitTape(clipGroup, 'speed-digit0'); me._speedDigit0.set('z-index', 4); }, +createAltimeterSetting: func() +{ + me._altimeterText = me.root.createChild('text', 'altimeter-setting-text'); + me._altimeterText.setText('1013'); + me._altimeterText.setFontSize(44); + me._altimeterText.setAlignment("right-center"); + me._altimeterText.setFont("LiberationFonts/LiberationMono-Regular.ttf"); + me._altimeterText.setColor('#00ff00'); + + var midTextY = -ISFD.halfSize + (ISFD.modeBoxHeight * 0.5); + me._altimeterText.setTranslation(ISFD.hsiWidth * 0.5, midTextY); +}, + +createModeText : func() +{ + me._modeText = me.root.createChild('text', 'mode-text'); + me._modeText.setFontSize(44); + me._modeText.setText('APP'); + me._modeText.setAlignment("left-center"); + me._modeText.setFont("LiberationFonts/LiberationMono-Regular.ttf"); + me._modeText.setColor('#00ff00'); + + var midTextY = -ISFD.halfSize + (ISFD.modeBoxHeight * 0.5); + me._modeText.setTranslation(-ISFD.hsiWidth * 0.5, midTextY); +}, + +pressButtonAPP : func() +{ + if (me._mode == 'app') { + me._mode = ''; + me._modeText.setVisible(0); + } else { + me._mode = 'app'; + me._modeText.setText('APP'); + me._modeText.setVisible(1); + } +}, + update : func() { # read LOC/GS deviation @@ -533,9 +614,19 @@ update : func() me.updateAltitudeTape(); me.updateSpeedTape(); +# speed box var spd = me._controller.getIndicatedAirspeedKnots(); var spdDigit0 = math.mod(spd, 10); - me._speedDigit0.setTranslation(50 - ISFD.halfSize, spdDigit0 * 10); + me._speedDigit0.setTranslation(50, spdDigit0 * 44); + var s = sprintf("%02i ", math.floor(spd / 10)); + me._speedBoxText.setText(s); + +# altitude box + var alt = me._controller.getAltitudeFt(); + var altDigits00 = math.mod(alt / 10, 10); + me._altitudeDigits00.setTranslation(80, altDigits00 * 32); + var s = sprintf("%03i ", math.floor(alt / 100)); + me._altitudeBoxText.setText(s); } }; diff --git a/Aircraft/Instruments-3d/ISFD/README.md b/Aircraft/Instruments-3d/ISFD/README.md new file mode 100644 index 000000000..e69de29bb