From 60d6096edb791e6f3776c5f332eee3caae56a69b Mon Sep 17 00:00:00 2001 From: lyraongithub <131717187+lyraongithub@users.noreply.github.com> Date: Wed, 30 Jul 2025 23:48:17 +0100 Subject: [PATCH 1/2] Added variable glideslopes --- CFPNRadarScreen.cpp | 18 ++++++++++++++++-- CFPNRadarScreen.h | 3 ++- FPN68Plugin.h | 1 + 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/CFPNRadarScreen.cpp b/CFPNRadarScreen.cpp index 7011d2c..80bd6d9 100644 --- a/CFPNRadarScreen.cpp +++ b/CFPNRadarScreen.cpp @@ -49,9 +49,10 @@ void CFPNRadarScreen::OnRefresh(HDC hDC, int Phase) { int range = ((CFPNPlugin*)GetPlugIn())->range; + float angle = ((CFPNPlugin*)GetPlugIn())->angle; drawVerticalScale(&dc, glideslopeArea, trackArea, range); - drawGlidepathAndHorizontalTicks(&dc, glideslopeArea, trackArea, range, 3.0f); + drawGlidepathAndHorizontalTicks(&dc, glideslopeArea, trackArea, range, angle); drawGSAxes(&dc, glideslopeArea); drawTrackAxes(&dc, trackArea); @@ -103,7 +104,7 @@ void CFPNRadarScreen::OnRefresh(HDC hDC, int Phase) { } } if (!found) { - CFPNRadarTarget targetPlot = CFPNRadarTarget(callsign, pos,groundSpeed, altitude, runwayThreshold, runwayThreshold.DirectionTo(otherThreshold), range, elevation, 3.0f, glideslopeArea, trackArea); + CFPNRadarTarget targetPlot = CFPNRadarTarget(callsign, pos,groundSpeed, altitude, runwayThreshold, runwayThreshold.DirectionTo(otherThreshold), range, elevation, angle, glideslopeArea, trackArea); targetPlot.draw(&dc); prevTargets->push_back(targetPlot); } @@ -174,6 +175,19 @@ void CFPNRadarScreen::rangeChangeHandler(int range, CFPNRadarScreen* parent) { } } +void CFPNRadarScreen::glideslopeChangeHandler(float angle, CFPNRadarScreen* parent) { + ((CFPNPlugin*)(parent->GetPlugIn()))->angle = angle; + std::map m{ {3.0,0}, {2.5,1} }; + int newlyActive = m[angle]; + for (int i = 0; i < parent->glideControlsText.size(); i++) { + for (int j = 0; j < parent->glideControlsText[i].size(); j++) { + if (i != newlyActive / 1000 || j != newlyActive % 1000) { + parent->glideControlsText[i][j].selected = false; + } + } + } +} + void CFPNRadarScreen::runwayChangeHandler(int r, int c, CFPNRadarScreen* parent) { ((CFPNPlugin*)(parent->GetPlugIn()))->loadNewAerodrome(((CFPNPlugin*)(parent->GetPlugIn()))->icao.c_str(), parent->runwayControlsText[r][c].text.c_str()); diff --git a/CFPNRadarScreen.h b/CFPNRadarScreen.h index eda9867..d1b57ed 100644 --- a/CFPNRadarScreen.h +++ b/CFPNRadarScreen.h @@ -36,6 +36,7 @@ class CFPNRadarScreen : }; static void rangeChangeHandler(int range, CFPNRadarScreen* parent); + static void glideslopeChangeHandler(float angle, CFPNRadarScreen* parent); static void runwayChangeHandler(int i, int j, CFPNRadarScreen* parent); std::vector> mainControlsText = { @@ -49,7 +50,7 @@ class CFPNRadarScreen : {{"5", false, false, false, [](CFPNRadarScreen* parent) { rangeChangeHandler(5, parent); }}, {"10", true, false, false, [](CFPNRadarScreen* parent) { rangeChangeHandler(10, parent); }}, {"15", false, false, false, [](CFPNRadarScreen* parent) { rangeChangeHandler(15, parent); }}, {"20", false, false, false, [](CFPNRadarScreen* parent) { rangeChangeHandler(20, parent); }}} }; std::vector> glideControlsText = { - {{"3.0", true, false, true, nullptr}, {"2.5", false, false, true, nullptr}, {"3.0", false, false, true, nullptr}, {"GS", false, false, true, nullptr}}, + {{"3.0", true, false, false, [](CFPNRadarScreen* parent) {glideslopeChangeHandler(3.0, parent); }}, {"2.5", false, false, false, [](CFPNRadarScreen* parent) {glideslopeChangeHandler(2.5, parent); }}, {"3.0", false, false, true, nullptr}, {"GS", false, false, true, nullptr}}, {{"210", true, false, true, nullptr}, {"200", false, false, true, nullptr}, {"210", false, false, true, nullptr}, {"DH", false, false, true, nullptr}} }; std::vector> displayControlsText = { diff --git a/FPN68Plugin.h b/FPN68Plugin.h index 369248c..d89a406 100644 --- a/FPN68Plugin.h +++ b/FPN68Plugin.h @@ -34,6 +34,7 @@ class CFPNPlugin : public EuroScopePlugIn::CPlugIn { std::vector previousTargets = std::vector(); int range = 15; + float angle = 3; float elevation = -1; EuroScopePlugIn::CPosition runwayThreshold; EuroScopePlugIn::CPosition otherThreshold; From 5c94c40c5e4bc112e633f130655828ef7f32bef0 Mon Sep 17 00:00:00 2001 From: lyraongithub <131717187+lyraongithub@users.noreply.github.com> Date: Thu, 31 Jul 2025 00:05:04 +0100 Subject: [PATCH 2/2] Fixed GS indication text --- CFPNRadarScreen.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/CFPNRadarScreen.cpp b/CFPNRadarScreen.cpp index 80bd6d9..5014a93 100644 --- a/CFPNRadarScreen.cpp +++ b/CFPNRadarScreen.cpp @@ -427,12 +427,16 @@ void CFPNRadarScreen::drawInfoText(CDC* pDC, int x, int y) { pDC->SetTextAlign(TA_LEFT); auto* defFont = pDC->SelectObject(&font); - std::string text = "GS: 3.0 RWY: "; + std::stringstream gsAngle; + std::string text = "GS: "; + gsAngle << std::fixed << std::setprecision(1) << ((CFPNPlugin*)GetPlugIn())->angle; + text += gsAngle.str(); + text += " RWY: "; std::stringstream stream; stream << std::fixed << std::setprecision(1) << ((CFPNPlugin*)GetPlugIn())->runwayThreshold.DirectionTo(((CFPNPlugin*)GetPlugIn())->otherThreshold); - text += stream.str(); + text += " DH: 200FT TIME : "; SYSTEMTIME st;