Glass cockpit: radar columns reach under the map too

The amber Secondary/Screen columns get the same treatment as the red
MFD banks, turned on its side: each button reaches 100px in behind the
map with a 10px indicator clearing the edge, so the lamp reads as a
slim column and the radar picture is the click target. The shared
buttonDepth/indicatorStrip constants now drive both banks, and the
columns are clamped so they can never meet behind a narrow map.

The map pane narrows from 404 to 344 for a 324-wide glass, handing the
difference back to the viewscreen.

Verified live: clicking 60px inside the radar from either edge presses
the column button behind it, with feedback in that side's strip (720
and 1350 pixels).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-25 12:31:10 -05:00
co-authored by Claude Fable 5
parent 0bec0f9640
commit b6045f3c94
+29 -21
View File
@@ -11,13 +11,14 @@ namespace
const int buttonGap = 4; const int buttonGap = 4;
//--------------------------------------------------------------- //---------------------------------------------------------------
// MFD button banks run UNDER the glass: the button is this tall // Button banks run UNDER the glass: a button reaches this far in
// in total, but only the indicator strip shows past the display // from the display edge, but only the indicator strip clears that
// edge - the rest sits behind the MFD picture, which is what the // edge - the rest sits behind the picture, which is what the
// player actually clicks. // player actually clicks. Applies to both the MFD strips (depth
// measured vertically) and the map's side columns (horizontally).
//--------------------------------------------------------------- //---------------------------------------------------------------
const int mfdButtonHeight = 100; const int buttonDepth = 100;
const int mfdIndicatorStrip = 10; const int indicatorStrip = 10;
//--------------------------------------------------------------- //---------------------------------------------------------------
// Button fill colors by lamp brightness (0 off / 1-2 dim / 3 // Button fill colors by lamp brightness (0 off / 1-2 dim / 3
@@ -271,8 +272,8 @@ void
// and the picture above/below it is the click target. Paint // and the picture above/below it is the click target. Paint
// draws the buttons before the MFD image for that reason. // draws the buttons before the MFD image for that reason.
//----------------------------------------------------------- //-----------------------------------------------------------
int strip_h = mfdIndicatorStrip; int strip_h = indicatorStrip;
int button_h = mfdButtonHeight; int button_h = buttonDepth;
// on a scaled-down cockpit, keep the two banks from meeting // on a scaled-down cockpit, keep the two banks from meeting
int limit = (display_height + 2 * strip_h) / 2; int limit = (display_height + 2 * strip_h) / 2;
@@ -305,20 +306,27 @@ void
else if (button_style == SideColumns) else if (button_style == SideColumns)
{ {
//----------------------------------------------------------- //-----------------------------------------------------------
// 6 buttons down each side of the glass, stacked contiguous // 6 buttons down each side of the glass (the pod wires only 6
// and flush to the pane edges, like the pod's strips (the // of each column's 8 addresses to buttons; the rest are Tesla
// pod wires only 6 of each column's 8 addresses to buttons; // relays). Left = anchorA ascending, right = anchorB.
// the rest are Tesla relays). Left = anchorA ascending, //
// right = anchorB. // Same trick as the MFD banks, turned on its side: each
// button reaches buttonDepth in behind the map and leaves an
// indicatorStrip clearing the edge, so the lamp reads as a
// slim column and the map itself is the click target.
//----------------------------------------------------------- //-----------------------------------------------------------
int col_w = display_width / 8; int strip_w = indicatorStrip;
if (col_w < 20) col_w = 20; int button_w = buttonDepth;
if (col_w > 40) col_w = 40;
// keep the two columns from meeting behind a narrow map
int limit = (display_width + 2 * strip_w) / 2;
if (button_w > limit) button_w = limit;
if (button_w < strip_w) button_w = strip_w;
int button_h = display_height / 6; int button_h = display_height / 6;
displayX = col_w; displayX = strip_w;
*client_width = display_width + 2 * col_w; *client_width = display_width + 2 * strip_w;
for (int i = 0; i < 6; ++i) for (int i = 0; i < 6; ++i)
{ {
@@ -329,15 +337,15 @@ void
left->amber = 1; left->amber = 1;
left->x = 0; left->x = 0;
left->y = i * button_h; left->y = i * button_h;
left->w = col_w; left->w = button_w;
left->h = h; left->h = h;
ScreenButton *right = &buttons[buttonCount++]; ScreenButton *right = &buttons[buttonCount++];
right->unit = anchorB + i; right->unit = anchorB + i;
right->amber = 1; right->amber = 1;
right->x = displayX + displayW; right->x = displayX + displayW + strip_w - button_w;
right->y = left->y; right->y = left->y;
right->w = col_w; right->w = button_w;
right->h = h; right->h = h;
} }
} }