From de7e4fafec992008bcc192a07ae5d1d4e96dd8d7 Mon Sep 17 00:00:00 2001 From: torcs-ng Date: Mon, 6 Nov 2023 07:59:15 +0000 Subject: [PATCH] - update metar git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9212 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: 7e1e17724c9a640efe3942d11cdb3126163b8635 Former-commit-id: 6f68334019d459740f64725a23b9b726f6567f70 --- src/modules/racing/standardgame/racetrack.cpp | 2 +- .../racing/standardgame/racewebmetar.cpp | 65 ++++++++++++++++++- 2 files changed, 64 insertions(+), 3 deletions(-) diff --git a/src/modules/racing/standardgame/racetrack.cpp b/src/modules/racing/standardgame/racetrack.cpp index b81f4fff..b1fada86 100644 --- a/src/modules/racing/standardgame/racetrack.cpp +++ b/src/modules/racing/standardgame/racetrack.cpp @@ -757,7 +757,7 @@ reTrackInitRealWeather(void) else trackLocal->airpressure = (tdble)(webMetar->getPressure_hPa()); - trackLocal->airpressure = (tdble)(trackLocal->airpressure * 100); + trackLocal->airpressure = (tdble)(trackLocal->airpressure); if (webMetar->getDensity_C() == WebMetarNaN) trackLocal->airdensity = 1.219f; diff --git a/src/modules/racing/standardgame/racewebmetar.cpp b/src/modules/racing/standardgame/racewebmetar.cpp index ff976103..e3f5a99a 100755 --- a/src/modules/racing/standardgame/racewebmetar.cpp +++ b/src/modules/racing/standardgame/racewebmetar.cpp @@ -1125,6 +1125,15 @@ bool ReWebMetar::scanPressure() char *m = _m; double factor; int press, i; + bool unitProvided = true; + bool valueProvided = true; + //_pressure = 101300.0; + + if (*m == '\0') + { + _pressure = 101300.0; // pressure not provided... assume standard pressure + return true; + } if (*m == 'A') factor = 3386.388640341 / 100; @@ -1139,7 +1148,59 @@ bool ReWebMetar::scanPressure() press *= 100; - if (!strncmp(m, "//", 2)) // not spec compliant! + if (*m == ' ') // ignore space + m++; + + if (!strncmp(m, "////", 4)) + { + // sensor failure... assume standard pressure + if (*(m - 1) == 'A') + press = 2992; + else + press = 1013; + + m += 4; + } + else + { + if (!scanNumber(&m, &press, 2, 4)) + { + valueProvided = false; + + // sensor failure... assume standard pressure + if (*(m - 1) == 'A') + press = 2992; + else + press = 1013; + } + } + + if (press < 100) + { + // 2-digit pressure may have further data following + press *= 100; + if (!strncmp(m, "//", 2)) // not spec compliant! + m += 2; + else if (scanNumber(&m, &i, 2)) + press += i; + } + + if (*m == ',' || *m == '=') // ignore trailing comma, equals + m++; + + if ((unitProvided || valueProvided) && !scanBoundary(&m)) + return false; + + // derive unit when not explicitly provided + if (!unitProvided) + factor = (press > 2000 ? 3386.388640341 / 100.0 : 100.0); + + _pressure = (press * factor); + _m = m; + + return true; + + /*if (!strncmp(m, "//", 2)) // not spec compliant! m += 2; else if (scanNumber(&m, &i, 2)) press += i; @@ -1155,7 +1216,7 @@ bool ReWebMetar::scanPressure() GfLogDebug("Pressure = %.3f\n", _pressure); _grpcount++; - return true; + return true;*/ } static const char *runway_deposit[] =