Show tracerestrict and/or progsig windows when ctrl-clicking signal.
This commit is contained in:
@@ -2939,6 +2939,32 @@ static TrackStatus GetTileTrackStatus_Track(TileIndex tile, TransportType mode,
|
||||
|
||||
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;
|
||||
|
||||
ShowDepotWindow(tile, VEH_TRAIN);
|
||||
|
@@ -3290,6 +3290,9 @@ static bool CheckClickOnLandscape(const ViewPort *vp, int x, int 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));
|
||||
return true;
|
||||
}
|
||||
|
Reference in New Issue
Block a user