Show tracerestrict and/or progsig windows when ctrl-clicking signal.

This commit is contained in:
Jonathan G Rennison
2017-04-12 17:42:09 +01:00
parent bfb8f6f32e
commit 424e4691ce
2 changed files with 29 additions and 0 deletions

View File

@@ -2939,6 +2939,32 @@ static TrackStatus GetTileTrackStatus_Track(TileIndex tile, TransportType mode,
static bool ClickTile_Track(TileIndex tile) static bool ClickTile_Track(TileIndex tile)
{ {
if (_ctrl_pressed && IsPlainRailTile(tile)) {
TrackBits trackbits = TrackStatusToTrackBits(GetTileTrackStatus(tile, TRANSPORT_RAIL, 0));
if (trackbits & TRACK_BIT_VERT) { // N-S direction
trackbits = (_tile_fract_coords.x <= _tile_fract_coords.y) ? TRACK_BIT_RIGHT : TRACK_BIT_LEFT;
}
if (trackbits & TRACK_BIT_HORZ) { // E-W direction
trackbits = (_tile_fract_coords.x + _tile_fract_coords.y <= 15) ? TRACK_BIT_UPPER : TRACK_BIT_LOWER;
}
Track track = FindFirstTrack(trackbits);
if (HasTrack(tile, track) && HasSignalOnTrack(tile, track)) {
bool result = false;
if (GetExistingTraceRestrictProgram(tile, track) != nullptr) {
ShowTraceRestrictProgramWindow(tile, track);
result = true;
}
if (IsPresignalProgrammable(tile, track)) {
ShowSignalProgramWindow(SignalReference(tile, track));
result = true;
}
return result;
}
}
if (!IsRailDepot(tile)) return false; if (!IsRailDepot(tile)) return false;
ShowDepotWindow(tile, VEH_TRAIN); ShowDepotWindow(tile, VEH_TRAIN);

View File

@@ -3290,6 +3290,9 @@ static bool CheckClickOnLandscape(const ViewPort *vp, int x, int y)
{ {
Point pt = TranslateXYToTileCoord(vp, x, y); Point pt = TranslateXYToTileCoord(vp, x, y);
_tile_fract_coords.x = pt.x & TILE_UNIT_MASK;
_tile_fract_coords.y = pt.y & TILE_UNIT_MASK;
if (pt.x != -1) return ClickTile(TileVirtXY(pt.x, pt.y)); if (pt.x != -1) return ClickTile(TileVirtXY(pt.x, pt.y));
return true; return true;
} }