1
0
Fork 0

Account for new surface types on runways and in the kln89 instrument

Signed-off-by: fly <merspieler@alwaysdata.com>
This commit is contained in:
fly 2024-01-30 02:11:29 +01:00
parent b32c33fc72
commit b1e702abc4
2 changed files with 99 additions and 22 deletions

View file

@ -33,31 +33,58 @@
using std::string;
/*
* surface codes
* 1 - asphalt
* 2 - concrete
* surface codes, defined here (as of Jan 2024) https://developer.x-plane.com/article/airport-data-apt-dat-12-00-file-format-specification/
* 1,20-38 - asphalt
* 2,50-57 - concrete
* 3 - turf
* 4 - dirt
* 5 - gravel
* 6 - asphalt helipad
* 7 - concrete helipad
* 8 - turf helipad
* 9 - dirt helipad
* 12 - lakebed
* 13 - water runway
* 14 - snow or ice
* 15 - Transparent
*/
const char * FGRunwayBase::surfaceName( int surface_code )
{
switch( surface_code ) {
case 1: return "asphalt";
case 2: return "concrete";
case 1:
case 20: // Light colored asphalt
case 21:
case 22:
case 23:
case 24: // Asphalt
case 25:
case 26:
case 27: // Darker colored asphalt
case 28:
case 29:
case 30:
case 31: // Very dark colored asphalt
case 32:
case 33:
case 34:
case 35: // Near black, new looking asphalt
case 36:
case 37:
case 38:
return "asphalt";
case 2:
case 50: // Light “new” looking concrete
case 51:
case 52:
case 53: // Concrete
case 54:
case 55: // Dark concrete
case 56:
case 57:
return "concrete";
case 3: return "turf";
case 4: return "dirt";
case 5: return "gravel";
case 6: return "asphalt helipad";
case 7: return "concrete helipad";
case 8: return "turf helipad";
case 9: return "dirt helipad";
case 12: return "lakebed";
case 13: return "water";
case 14: return "ice";
case 15: return "transparent";
default: return "unknown";
}
}
@ -92,7 +119,7 @@ SGGeod FGRunwayBase::pointOffCenterline(double aOffset, double lateralOffset) co
bool FGRunwayBase::isHardSurface() const
{
return ((_surface_code == 1) || (_surface_code == 2));
return ((_surface_code == 1 || (_surface_code >= 20 && _surface_code <= 38)) || (_surface_code == 2 || (_surface_code >= 50 && _surface_code <= 57)));
}
FGTaxiway::FGTaxiway(PositionedID aGuid,

View file

@ -165,7 +165,7 @@ void KLN89AptPage::Update(double dt) {
// I guess we can make a heuristic guess as to fuel availability from the runway sizes
// For now assume that airports with asphalt or concrete runways will have at least 100L,
// and that runways over 4000ft will have JET.
if(_aptRwys[0]->surface() <= 2) {
if(_aptRwys[0]->isHardSurface()) {
if(_aptRwys[0]->lengthFt() >= 4000) {
_kln89->DrawText("JET 100L", 2, 0, 1);
} else {
@ -199,9 +199,34 @@ void KLN89AptPage::Update(double dt) {
// TODO: why not store these strings as an array?
switch(_aptRwys[i]->surface()) {
case 1:
// Asphalt - fall through
case 2:
// Concrete
case 20: // Light colored asphalt
case 21:
case 22:
case 23:
case 24: // Asphalt
case 25:
case 26:
case 27: // Darker colored asphalt
case 28:
case 29:
case 30:
case 31: // Very dark colored asphalt
case 32:
case 33:
case 34:
case 35: // Near black, new looking asphalt
case 36:
case 37:
case 38:
case 2: //Concrete
case 50: // Light “new” looking concrete
case 51:
case 52:
case 53: // Concrete
case 54:
case 55: // Dark concrete
case 56:
case 57:
_kln89->DrawText("HRD", 2, 9, 2);
break;
case 3:
@ -249,9 +274,34 @@ void KLN89AptPage::Update(double dt) {
// TODO: why not store these strings as an array?
switch(_aptRwys[i]->surface()) {
case 1:
// Asphalt - fall through
case 2:
// Concrete
case 20: // Light colored asphalt
case 21:
case 22:
case 23:
case 24: // Asphalt
case 25:
case 26:
case 27: // Darker colored asphalt
case 28:
case 29:
case 30:
case 31: // Very dark colored asphalt
case 32:
case 33:
case 34:
case 35: // Near black, new looking asphalt
case 36:
case 37:
case 38:
case 2: //Concrete
case 50: // Light “new” looking concrete
case 51:
case 52:
case 53: // Concrete
case 54:
case 55: // Dark concrete
case 56:
case 57:
_kln89->DrawText("HRD", 2, 9, 0);
break;
case 3: