@fboes/aerofly-patterns
Advanced tools
Comparing version 1.2.0 to 1.3.0
# Changelog | ||
## 1.3.0 | ||
- Added `MINIMUM_SAFE_ALTITUDE` parameters | ||
- Added correct flight level separation | ||
- Aircraft without VOR receivers get a different briefing | ||
## 1.2.0 | ||
@@ -4,0 +10,0 @@ |
@@ -19,12 +19,12 @@ # Landing Challenges: Key West / Key West Intl (KEYW) | ||
| :-: | ---------- | ---------: | ------------ | --------------- | ---------: | ------- | ------------------- | | ||
| #1 | 2024-05-05 | 08:00 | 100° @ 14 kn | FEW @ 2,100 ft | 15 SM | 09 (RP) | ↑ To the north | | ||
| #2 | 2024-05-04 | 09:00 | 110° @ 13 kn | FEW @ 2,500 ft | 15 SM | 09 (RP) | ↑ To the north | | ||
| #3 | 2024-05-02 | 11:00 | 100° @ 11 kn | CLR | 15 SM | 09 (RP) | ↗ To the north-east | | ||
| #4 | 2024-05-01 | 12:00 | 80° @ 7 kn | FEW @ 2,300 ft | 15 SM | 09 (RP) | ↑ To the north | | ||
| #5 | 2024-04-30 | 13:00 | 160° @ 9 kn | CLR | 15 SM | 09 (RP) | ↗ To the north-east | | ||
| #6 | 2024-04-28 | 15:00 | 100° @ 16 kn | FEW @ 2,900 ft | 15 SM | 09 (RP) | ↙ To the south-west | | ||
| #7 | 2024-04-27 | 16:00 | 80° @ 16 kn | OVC @ 9,000 ft | 15 SM | 09 (RP) | ← To the west | | ||
| #8 | 2024-04-26 | 17:00 | 90° @ 14 kn | CLR | 15 SM | 09 (RP) | ↙ To the south-west | | ||
| #9 | 2024-04-25 | 19:00 | 90° @ 7 kn | FEW @ 3,400 ft | 15 SM | 09 (RP) | ← To the west | | ||
| #10 | 2024-04-24 | 20:00 | 90° @ 11 kn | CLR | 15 SM | 09 (RP) | ↗ To the north-east | | ||
| #1 | 2024-05-06 | 08:00 | 110° @ 10 kn | SCT @ 2,300 ft | 15 SM | 09 (RP) | ↓ To the south | | ||
| #2 | 2024-05-05 | 09:00 | 100° @ 16 kn | FEW @ 2,900 ft | 15 SM | 09 (RP) | ↙ To the south-west | | ||
| #3 | 2024-05-03 | 11:00 | 100° @ 13 kn | CLR | 15 SM | 09 (RP) | ↙ To the south-west | | ||
| #4 | 2024-05-02 | 12:00 | 100° @ 10 kn | CLR | 15 SM | 09 (RP) | ↗ To the north-east | | ||
| #5 | 2024-05-01 | 13:00 | 60° @ 9 kn | FEW @ 7,500 ft | 15 SM | 09 (RP) | ↙ To the south-west | | ||
| #6 | 2024-04-29 | 15:00 | 120° @ 14 kn | SCT @ 2,900 ft | 15 SM | 09 (RP) | ↖ To the north-west | | ||
| #7 | 2024-04-28 | 16:00 | 100° @ 13 kn | FEW @ 2,600 ft | 15 SM | 09 (RP) | ↗ To the north-east | | ||
| #8 | 2024-04-27 | 17:00 | 90° @ 18 kn | FEW @ 2,700 ft | 15 SM | 09 (RP) | ↑ To the north | | ||
| #9 | 2024-04-26 | 19:00 | 90° @ 8 kn | CLR | 15 SM | 09 (RP) | ↑ To the north | | ||
| #10 | 2024-04-25 | 20:00 | 80° @ 5 kn | CLR | 15 SM | 09 (RP) | ↖ To the north-west | | ||
## Installation instructions | ||
@@ -31,0 +31,0 @@ |
@@ -19,12 +19,12 @@ # Landing Challenges: Vineyard Haven / Martha's Vineyard (KMVY) | ||
| :-: | ---------- | ---------: | ------------ | --------------- | ---------: | ------- | ------------------- | | ||
| #1 | 2024-05-05 | 07:00 | 130° @ 8 kn | OVC @ 700 ft | 15 SM | 15 | ↑ To the north | | ||
| #2 | 2024-05-04 | 09:00 | 60° @ 11 kn | FEW @ 1,800 ft | 15 SM | 06 | ↖ To the north-west | | ||
| #3 | 2024-05-02 | 10:00 | 210° @ 15 kn | BKN @ 800 ft | 15 SM | 24 (RP) | ↑ To the north | | ||
| #4 | 2024-05-01 | 11:00 | 50° @ 13 kn | SCT @ 1,400 ft | 15 SM | 06 | ← To the west | | ||
| #5 | 2024-04-30 | 13:00 | 90° @ 13 kn | OVC @ 3,500 ft | 15 SM | 15 | ↙ To the south-west | | ||
| #6 | 2024-04-28 | 14:00 | 200° @ 10 kn | OVC @ 1,100 ft | 15 SM | 24 (RP) | → To the east | | ||
| #7 | 2024-04-27 | 15:00 | 230° @ 14 kn | CLR | 15 SM | 24 (RP) | ↘ To the south-east | | ||
| #8 | 2024-04-26 | 17:00 | 170° @ 7 kn | CLR | 15 SM | 15 | ↗ To the north-east | | ||
| #9 | 2024-04-24 | 18:00 | 240° @ 8 kn | FEW @ 8,000 ft | 15 SM | 24 (RP) | ← To the west | | ||
| #10 | 2024-04-24 | 19:00 | 230° @ 3 kn | CLR | 15 SM | 24 (RP) | ← To the west | | ||
| #1 | 2024-05-06 | 07:00 | 200° @ 6 kn | OVC @ 300 ft | 4 SM | 24 (RP) | ↙ To the south-west | | ||
| #2 | 2024-05-05 | 09:00 | 140° @ 9 kn | OVC @ 700 ft | 9 SM | 15 | → To the east | | ||
| #3 | 2024-05-03 | 10:00 | 50° @ 13 kn | OVC @ 1,700 ft | 15 SM | 06 | ↙ To the south-west | | ||
| #4 | 2024-05-02 | 11:00 | 210° @ 13 kn | OVC @ 400 ft | 4 SM | 24 (RP) | ↑ To the north | | ||
| #5 | 2024-05-01 | 13:00 | 40° @ 11 kn | FEW @ 4,400 ft | 15 SM | 06 | → To the east | | ||
| #6 | 2024-04-29 | 14:00 | 70° @ 10 kn | SCT @ 10,000 ft | 15 SM | 06 | ↘ To the south-east | | ||
| #7 | 2024-04-28 | 15:00 | 200° @ 13 kn | OVC @ 1,100 ft | 15 SM | 24 (RP) | ↖ To the north-west | | ||
| #8 | 2024-04-27 | 17:00 | 230° @ 11 kn | CLR | 15 SM | 24 (RP) | → To the east | | ||
| #9 | 2024-04-25 | 18:00 | 140° @ 9 kn | CLR | 15 SM | 15 | → To the east | | ||
| #10 | 2024-04-25 | 19:00 | 300° @ 9 kn | FEW @ 6,500 ft | 15 SM | 33 (RP) | ↘ To the south-east | | ||
## Installation instructions | ||
@@ -31,0 +31,0 @@ |
@@ -1,25 +0,29 @@ | ||
# Landing Challenges: Martha's Vineyard (KMVY) | ||
# Landing Challenges: Vineyard Haven / Martha's Vineyard (KMVY) | ||
This [`custom_missions_user.tmc`](./custom_missions_user.tmc) file contains random landing scenarios for Aerofly FS 4. | ||
Your pitts is 8 NM away from Martha's Vineyard, and you have to make a correct landing pattern entry and land safely. | ||
Check wind and weather, as well as if it is a left- or right-turn-pattern. | ||
Your Pitts Special S-2 is 8 NM away from Vineyard Haven / Martha's Vineyard Airport, and you have to make a correct landing pattern entry and land safely. | ||
Get [more information about Martha's Vineyard airport on SkyVector](https://skyvector.com/airport/KMVY). | ||
Get [more information about Vineyard Haven / Martha's Vineyard Airport on SkyVector](https://skyvector.com/airport/KMVY): | ||
- What is the tower / CTAF frequency? | ||
- What is the Traffic Pattern Altitude (TPA) for this airport? | ||
- Has the runway standard left turns, or right turns? | ||
- Are there additional navigational aids like ILS for your assigned runways? | ||
- Are there special noises abatement procedures in effect? | ||
## Included missions | ||
| No | Local date | Local time | Wind | Clouds | Visibility | Runway | Aircraft position | | ||
| :-: | ---------- | ---------: | ------------ | --------------- | ---------: | ------- | ----------------- | | ||
| #1 | 2024-04-25 | 07:00 | 340° @ 8 kn | CLR | 15 SM | 33 (RP) | To the south-east | | ||
| #2 | 2024-04-24 | 09:00 | 190° @ 12 kn | SCT @ 10,000 ft | 15 SM | 24 (RP) | To the north-east | | ||
| #3 | 2024-04-22 | 10:00 | 320° @ 13 kn | CLR | 15 SM | 33 (RP) | To the east | | ||
| #4 | 2024-04-21 | 11:00 | 240° @ 8 kn | CLR | 15 SM | 24 (RP) | To the south-east | | ||
| #5 | 2024-04-20 | 13:00 | 240° @ 7 kn | BKN @ 400 ft | 5 SM | 24 (RP) | To the east | | ||
| #6 | 2024-04-18 | 14:00 | 60° @ 15 kn | OVC @ 5,000 ft | 15 SM | 06 | To the south-east | | ||
| #7 | 2024-04-17 | 15:00 | 120° @ 8 kn | OVC @ 6,000 ft | 15 SM | 15 | To the south-west | | ||
| #8 | 2024-04-16 | 17:00 | 220° @ 12 kn | CLR | 15 SM | 24 (RP) | To the north-west | | ||
| #9 | 2024-04-14 | 18:00 | 220° @ 11 kn | BKN @ 9,000 ft | 15 SM | 24 (RP) | To the east | | ||
| #10 | 2024-04-14 | 19:00 | 260° @ 11 kn | BKN @ 8,000 ft | 15 SM | 24 (RP) | To the south-west | | ||
| No | Local date | Local time | Wind | Clouds | Visibility | Runway | Aircraft position | | ||
| :-: | ---------- | ---------: | ------------ | --------------- | ---------: | ------- | ------------------- | | ||
| #1 | 2024-05-06 | 07:00 | 200° @ 6 kn | OVC @ 300 ft | 4 SM | 24 (RP) | ← To the west | | ||
| #2 | 2024-05-05 | 09:00 | 140° @ 9 kn | OVC @ 700 ft | 9 SM | 15 | ↙ To the south-west | | ||
| #3 | 2024-05-03 | 10:00 | 50° @ 13 kn | OVC @ 1,700 ft | 15 SM | 06 | ↖ To the north-west | | ||
| #4 | 2024-05-02 | 11:00 | 210° @ 13 kn | OVC @ 400 ft | 4 SM | 24 (RP) | ↖ To the north-west | | ||
| #5 | 2024-05-01 | 13:00 | 40° @ 11 kn | FEW @ 4,400 ft | 15 SM | 06 | ↓ To the south | | ||
| #6 | 2024-04-29 | 14:00 | 70° @ 10 kn | SCT @ 10,000 ft | 15 SM | 06 | ↑ To the north | | ||
| #7 | 2024-04-28 | 15:00 | 200° @ 13 kn | OVC @ 1,100 ft | 15 SM | 24 (RP) | → To the east | | ||
| #8 | 2024-04-27 | 17:00 | 230° @ 11 kn | CLR | 15 SM | 24 (RP) | ↓ To the south | | ||
| #9 | 2024-04-25 | 18:00 | 140° @ 9 kn | CLR | 15 SM | 15 | ↗ To the north-east | | ||
| #10 | 2024-04-25 | 19:00 | 300° @ 9 kn | FEW @ 6,500 ft | 15 SM | 33 (RP) | ↑ To the north | | ||
## Installation instructions | ||
@@ -30,4 +34,5 @@ | ||
--- | ||
Created with Aerofly Landegerät | ||
Created with [Aerofly Landegerät](https://github.com/fboes/aerofly-patterns) |
@@ -9,2 +9,3 @@ // @ts-check | ||
* @property {string} icaoCode | ||
* @property {boolean} [hasNoRadioNav] if no VOR receiver is onboard | ||
*/ | ||
@@ -14,7 +15,11 @@ | ||
* @typedef AeroflyAircraft | ||
* @type {object & AeroflyAircraftBasic} | ||
* @type {object} | ||
* @property {string} name of aircraft | ||
* @property {"S"|"G"|"H"|"U"|"W"?} type STOL, Glider, Helicopter, Ultralight, Water | ||
* @property {string} icaoCode | ||
* @property {string} callsign | ||
* @property {number} cruiseSpeed in knots | ||
* @property {number?} runwayTakeoff length in feet | ||
* @property {number?} runwayLanding length in feet | ||
* @property {number} [runwayTakeoff] length in feet | ||
* @property {number} [runwayLanding] length in feet | ||
* @property {boolean} [hasNoRadioNav] if no VOR receiver is onboard | ||
*/ | ||
@@ -71,4 +76,2 @@ | ||
cruiseSpeed: 1165, | ||
runwayTakeoff: null, | ||
runwayLanding: null, | ||
}, | ||
@@ -110,2 +113,3 @@ ec135: { | ||
runwayLanding: 374, | ||
hasNoRadioNav: true, | ||
}, | ||
@@ -136,4 +140,3 @@ lj45: { | ||
cruiseSpeed: 239, | ||
runwayTakeoff: null, | ||
runwayLanding: null, | ||
hasNoRadioNav: true, | ||
}, | ||
@@ -146,4 +149,3 @@ pitts: { | ||
cruiseSpeed: 152, | ||
runwayTakeoff: null, | ||
runwayLanding: null, | ||
hasNoRadioNav: true, | ||
}, | ||
@@ -159,3 +161,2 @@ r22: { | ||
}, | ||
uh60: { | ||
@@ -249,2 +250,3 @@ name: "Sikorsky UH-60 Black Hawk", | ||
// runwayLanding: null, | ||
hasNoRadioNav: true, | ||
}, | ||
@@ -259,2 +261,3 @@ camel: { | ||
// runwayLanding: null, | ||
hasNoRadioNav: true, | ||
}, | ||
@@ -278,2 +281,3 @@ crj900: { | ||
// runwayLanding: null, | ||
hasNoRadioNav: true, | ||
}, | ||
@@ -288,2 +292,3 @@ f4u: { | ||
// runwayLanding: null, | ||
hasNoRadioNav: true, | ||
}, | ||
@@ -349,2 +354,3 @@ q400: { | ||
runwayLanding: 6000, | ||
hasNoRadioNav: fallback?.hasNoRadioNav ?? false, | ||
}; | ||
@@ -351,0 +357,0 @@ }, |
@@ -19,2 +19,3 @@ // @ts-check | ||
], | ||
KEGE: [{ id: "07", isRightPattern: true }], | ||
KEYW: [{ id: "09", isRightPattern: true }], | ||
@@ -21,0 +22,0 @@ KHAF: [{ id: "30", isRightPattern: true }], |
@@ -8,3 +8,3 @@ #!/usr/bin/env node | ||
process.stdout | ||
.write(`\x1b[94mUsage: npx @fboes/aerofly-patterns [ICAO_AIRPORT_CODE] [AEROFLY_AIRCRAFT_CODE] [RP_RUNWAY,..]\x1b[0m | ||
.write(`\x1b[94mUsage: npx @fboes/aerofly-patterns [ICAO_AIRPORT_CODE] [AEROFLY_AIRCRAFT_CODE] [RP_RUNWAY,..] [MINIMUM_SAFE_ALTITUDE] [FOLDER_MODE]\x1b[0m | ||
Create landing pattern lessons for Aerofly FS 4. | ||
@@ -14,9 +14,9 @@ | ||
\x1b[94m [ICAO_AIRPORT_CODE] \x1b[0mICAO airport code which needs to be available in Aerofly FS 4. | ||
Skip argument with "-" | ||
\x1b[94m [AEROFLY_AIRCRAFT_CODE] \x1b[0mInternal aircraft code in Aerofly FS 4 | ||
Skip argument with "-" | ||
\x1b[94m [RP_RUNWAY,..] \x1b[0mComma-separated list of runway names with right-turn pattern | ||
Skip argument with "-" | ||
\x1b[94m [AEROFLY_AIRCRAFT_CODE] \x1b[0mInternal aircraft code in Aerofly FS 4. | ||
\x1b[94m [RP_RUNWAY,..] \x1b[0mComma-separated list of runway names with right-turn pattern. | ||
\x1b[94m [MINIMUM_SAFE_ALTITUDE] \x1b[0mMinimum altitude of aircraft, in 100ft. Will default to at least traffic pattern altitude. | ||
\x1b[94m [FOLDER_MODE] \x1b[0mIf set to "1" will create files in a subdirectory instead of current directory. | ||
`); | ||
If you need to skip a parameter, supply "-" and it will use the default value. | ||
`); | ||
process.exit(0); | ||
@@ -27,1 +27,2 @@ } | ||
await app.build(process.cwd()); | ||
console.log("✅ Done"); |
@@ -38,6 +38,13 @@ // @ts-check | ||
/** | ||
* @returns {number} in feet | ||
*/ | ||
get mimimumSafeAltitude() { | ||
return Number(this.getArgv(5, "0")) * 100; | ||
} | ||
/** | ||
* @returns {boolean} if files should be created in subfolder | ||
*/ | ||
get folderMode() { | ||
return this.getArgv(5, "") !== ""; | ||
return this.getArgv(6, "") !== ""; | ||
} | ||
@@ -44,0 +51,0 @@ |
@@ -28,5 +28,10 @@ // @ts-check | ||
/** | ||
* @type {number} in feet | ||
*/ | ||
let mimimumSafeAltitude = Math.max((this.airport.position.elevation ?? 0) + 1500, cliOptions.mimimumSafeAltitude); | ||
/** | ||
* @type {ScenarioAircraft} | ||
*/ | ||
this.aircraft = new ScenarioAircraft(airport, cliOptions.aircraft, cliOptions.initialDistance); | ||
this.aircraft = new ScenarioAircraft(airport, cliOptions.aircraft, cliOptions.initialDistance, mimimumSafeAltitude); | ||
@@ -85,3 +90,3 @@ /** | ||
return ( | ||
this.aircraft.data.runwayLanding === null || | ||
this.aircraft.data.runwayLanding === undefined || | ||
this.aircraft.data.runwayLanding === 0 || | ||
@@ -167,3 +172,3 @@ this.aircraft.data.runwayLanding <= r.dimension[0] | ||
if (this.activeRunway.ilsFrequency) { | ||
if (this.activeRunway.ilsFrequency && !this.aircraft.data.hasNoRadioNav) { | ||
description += `You may want to use the ILS (${this.activeRunway.ilsFrequency.toFixed(2)}). `; | ||
@@ -180,3 +185,3 @@ } | ||
} | ||
if (this.airport.navaids.length) { | ||
if (this.airport.navaids.length && !this.aircraft.data.hasNoRadioNav) { | ||
description += | ||
@@ -251,4 +256,5 @@ "\nLocal navigational aids: " + | ||
* @param {number} distanceFromAirport | ||
* @param {number} mimimumSafeAltitude in ft | ||
*/ | ||
constructor(airport, aircraftCode, distanceFromAirport) { | ||
constructor(airport, aircraftCode, distanceFromAirport, mimimumSafeAltitude) { | ||
/** | ||
@@ -265,7 +271,9 @@ * @type {number} true bearing. 0..360 | ||
this.position = airport.position.getPointBy(new Vector(this.distanceFromAirport * 1852, this.bearingFromAirport)); | ||
if (this.position.elevation !== null) { | ||
// Make height be 1500..3000 above airfield | ||
const variance = Math.min(1500, this.position.elevation / 8); | ||
this.position.elevation += (1500 + variance + Math.random() * (1500 - variance)) / Units.feetPerMeter; | ||
} | ||
const altitude = | ||
this.bearingFromAirport > 180 // bearing - 180 = course | ||
? Math.ceil((mimimumSafeAltitude - 1500) / 2000) * 2000 + 1500 // 3500, 5500, .. | ||
: Math.ceil((mimimumSafeAltitude - 500) / 2000) * 2000 + 500; // 4500, 6500, .. | ||
this.position.elevation = altitude / Units.feetPerMeter; | ||
this.id = "current"; | ||
@@ -272,0 +280,0 @@ |
{ | ||
"name": "@fboes/aerofly-patterns", | ||
"version": "1.2.0", | ||
"version": "1.3.0", | ||
"description": "Landegerät - Create landing pattern lessons for Aerofly FS 4.", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -28,8 +28,9 @@ # Aerofly Landegerät | ||
| Parameter | Description | Example | Default | | ||
| ----------------------- | ------------------------------------------------------------------------------- | ------- | ------- | | ||
| `ICAO_AIRPORT_CODE` | ICAO airport code which needs to be available in Aerofly FS 4 | `KMVY` | `KMVY` | | ||
| `AEROFLY_AIRCRAFT_CODE` | Internal aircraft code in Aerofly FS 4 | `c172` | `c172` | | ||
| `RP_RUNWAY` | Comma-separated list of runway names with right-turn pattern | `24,33` | | | ||
| `FOLDER_MODE` | If set to `1` will create files in a subdirectory instead of current directory. | `1` | | | ||
| Parameter | Description | Example | Default | | ||
| ----------------------- | ------------------------------------------------------------------------------------------ | ------- | ------- | | ||
| `ICAO_AIRPORT_CODE` | ICAO airport code which needs to be available in Aerofly FS 4 | `KMVY` | `KMVY` | | ||
| `AEROFLY_AIRCRAFT_CODE` | Internal aircraft code in Aerofly FS 4 | `c172` | `c172` | | ||
| `RP_RUNWAY` | Comma-separated list of runway names with right-turn pattern | `24,33` | | | ||
| `MINIMUM_SAFE_ALTITUDE` | Minimum altitude of aircraft, in 100ft. Will default to at least traffic pattern altitude. | `125` | | | ||
| `FOLDER_MODE` | If set to `1` will create files in a subdirectory instead of current directory. | `1` | | | ||
@@ -36,0 +37,0 @@ If you need to skip a parameter, supply `-` and it will use the default value. |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
691911
50
1815
83