Dear Developers,
Can anyone explain to me how do I update the FMC Progress page with the following new code?
import {B787_10_FMC} from './B787_10_FMC'; import * as HDSDK from './../../hdsdk/index'; export class B787_10_FMC_ProgressPage { static _timer = 0; static ShowPage1(fmc: B787_10_FMC) { fmc.cleanUpPage(); B787_10_FMC_ProgressPage._timer = 0; fmc.pageUpdate = () => { B787_10_FMC_ProgressPage._timer++; if (B787_10_FMC_ProgressPage._timer >= 15) { B787_10_FMC_ProgressPage.ShowPage1(fmc); } }; let useImperial = HDSDK.HeavyDivision.Configuration.useImperial(); let fuelModifier; if (useImperial) { fuelModifier = 1.0; } else { fuelModifier = 0.45359237; } let speed = Simplane.getGroundSpeed(); let currentTime = SimVar.GetGlobalVarValue('ZULU TIME', 'seconds'); let currentFuel = SimVar.GetSimVarValue('FUEL TOTAL QUANTITY', 'gallons') * SimVar.GetSimVarValue('FUEL WEIGHT PER GALLON', 'pounds') / 1000; let currentFuelFlow = SimVar.GetSimVarValue('TURB ENG FUEL FLOW PPH:1', 'pound per hour') + SimVar.GetSimVarValue('TURB ENG FUEL FLOW PPH:2', 'pound per hour') + SimVar.GetSimVarValue('TURB ENG FUEL FLOW PPH:3', 'pound per hour') + SimVar.GetSimVarValue('TURB ENG FUEL FLOW PPH:4', 'pound per hour'); currentFuelFlow = currentFuelFlow / 1000; let waypointActiveCell = ''; let waypointActiveDistanceCell = ''; let waypointActiveETACell = ''; let waypointActiveFuelCell = ''; let waypointActive = fmc.flightPlanManager.getActiveWaypoint(); let waypointActiveDistance = fmc.flightPlanManager.getDistanceToActiveWaypoint(); if (waypointActive) { waypointActiveCell = waypointActive.ident; if (isFinite(waypointActiveDistance)) { waypointActiveDistanceCell = waypointActiveDistance.toFixed(0) + ' '; let eta = undefined; eta = (B787_10_FMC_ProgressPage.computeEtaToWaypoint(waypointActiveDistance, speed) + currentTime) % 86400; if (isFinite(eta)) { let etaHours = Math.floor(eta / 3600); let etaMinutes = Math.floor((eta - etaHours * 3600) / 60); waypointActiveETACell = etaHours.toFixed(0).padStart(2, '0') + etaMinutes.toFixed(0).padStart(2, '0') + '[size=small]Z[/size]'; } let fuelLeft = fmc.computeFuelLeft(waypointActiveDistance, speed, currentFuel, currentFuelFlow); if (isFinite(fuelLeft)) { waypointActiveFuelCell = (fuelLeft * fuelModifier).toFixed(1); } } } let waypointActiveNextCell = ''; let waypointActiveNext; let waypointActiveNextDistanceCell = ''; let waypointActiveNextETACell = ''; let waypointActiveNextFuelCell = ''; let waypointActiveNextDistance = NaN; if (fmc.flightPlanManager.getActiveWaypointIndex() != -1) { waypointActiveNext = fmc.flightPlanManager.getNextActiveWaypoint(); if (waypointActiveNext) { waypointActiveNextCell = waypointActiveNext.ident; if (waypointActive && isFinite(waypointActiveDistance)) { let d = Avionics.Utils.computeGreatCircleDistance(waypointActive.infos.coordinates, waypointActiveNext.infos.coordinates); if (isFinite(d)) { waypointActiveNextDistance = d + waypointActiveDistance; waypointActiveNextDistanceCell = waypointActiveNextDistance.toFixed(0) + ' '; let eta = undefined; eta = (B787_10_FMC_ProgressPage.computeEtaToWaypoint(waypointActiveNextDistance, speed) + currentTime) % 86400; if (isFinite(eta)) { let etaHours = Math.floor(eta / 3600); let etaMinutes = Math.floor((eta - etaHours * 3600) / 60); waypointActiveNextETACell = etaHours.toFixed(0).padStart(2, '0') + etaMinutes.toFixed(0).padStart(2, '0') + '[size=small]Z[/size]'; } let fuelLeft = fmc.computeFuelLeft(waypointActiveNextDistance, speed, currentFuel, currentFuelFlow); if (isFinite(fuelLeft)) { waypointActiveNextFuelCell = (fuelLeft * fuelModifier).toFixed(1); } } } } } let destinationCell = ''; let destination = fmc.flightPlanManager.getDestination(); let destinationDistanceCell = ''; let destinationETACell = ''; let destinationFuelCell = ''; let destinationDistance = NaN; if (destination) { destinationCell = destination.ident; destinationDistance = destination.cumulativeDistanceInFP; if (waypointActive) { const missed = fmc.flightPlanManager.getCurrentFlightPlan().approach; const mWayipoints = missed.waypoints; if (mWayipoints.length > 0) { const cumulativeToApproach = mWayipoints[mWayipoints.length - 1].cumulativeDistanceInFP; destinationDistance = cumulativeToApproach; } destinationDistance -= waypointActive.cumulativeDistanceInFP; destinationDistance += fmc.flightPlanManager.getDistanceToActiveWaypoint(); if (isFinite(destinationDistance)) { destinationDistanceCell = destinationDistance.toFixed(0) + ' '; let eta = undefined; eta = (B787_10_FMC_ProgressPage.computeEtaToWaypoint(destinationDistance, speed) + currentTime) % 86400; if (isFinite(eta)) { let etaHours = Math.floor(eta / 3600); let etaMinutes = Math.floor((eta - etaHours * 3600) / 60); destinationETACell = etaHours.toFixed(0).padStart(2, '0') + etaMinutes.toFixed(0).padStart(2, '0') + '[size=small]Z[/size]'; } let fuelLeft = fmc.computeFuelLeft(destinationDistance, speed, currentFuel, currentFuelFlow); if (isFinite(fuelLeft)) { destinationFuelCell = (fuelLeft * fuelModifier).toFixed(1); } } } } let toTODCell = ''; let todDistanceCell = ''; let todETACell = ''; const showTOD = SimVar.GetSimVarValue('L:AIRLINER_FMS_SHOW_TOP_DSCNT', 'number'); if (showTOD === 1) { const distanceToTOD = SimVar.GetSimVarValue('L:WT_CJ4_TOD_REMAINING', 'number'); if (distanceToTOD) { todDistanceCell = distanceToTOD.toFixed(0) + '[size=small]NM[/size]'; let eta = undefined; eta = (B787_10_FMC_ProgressPage.computeEtaToWaypoint(distanceToTOD, speed) + currentTime) % 86400; if (isFinite(eta)) { let etaHours = Math.floor(eta / 3600); let etaMinutes = Math.floor((eta - etaHours * 3600) / 60); todETACell = etaHours.toFixed(0).padStart(2, '0') + etaMinutes.toFixed(0).padStart(2, '0') + '[size=small]Z[/size]'; } toTODCell = todETACell + '/' + todDistanceCell; } } fmc._renderer.render([ ['PROGRESS'], ['TO', 'DTG', 'ETA', 'FUEL'], [waypointActiveCell, waypointActiveDistanceCell, waypointActiveETACell, waypointActiveFuelCell], ['NEXT', ''], [waypointActiveNextCell, waypointActiveNextDistanceCell, waypointActiveNextETACell, waypointActiveNextFuelCell], ['DEST'], [destinationCell, destinationDistanceCell, destinationETACell, destinationFuelCell], ['', 'TO T/D'], ['', toTODCell], [''], [''], [''], ['<POS REPORT', 'POS REF>'] ]); } static computeEtaToWaypoint(distance, groundSpeed) { if (groundSpeed < 50) { groundSpeed = 50; } if (groundSpeed > 0.1) { return distance / groundSpeed * 3600; } } }