Add setting to allow auto-fill signal dragging to skip over stations/waypoints
This commit is contained in:
@@ -1892,7 +1892,7 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||
return cost;
|
||||
}
|
||||
|
||||
static bool CheckSignalAutoFill(TileIndex &tile, Trackdir &trackdir, int &signal_ctr, bool remove)
|
||||
static bool CheckSignalAutoFill(TileIndex &tile, Trackdir &trackdir, int &signal_ctr, bool remove, bool allow_station)
|
||||
{
|
||||
tile = AddTileIndexDiffCWrap(tile, _trackdelta[trackdir]);
|
||||
if (tile == INVALID_TILE) return false;
|
||||
@@ -1958,6 +1958,12 @@ static bool CheckSignalAutoFill(TileIndex &tile, Trackdir &trackdir, int &signal
|
||||
return true;
|
||||
}
|
||||
|
||||
case MP_STATION: {
|
||||
if (!allow_station) return false;
|
||||
signal_ctr += 2;
|
||||
return true;
|
||||
}
|
||||
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
@@ -1977,10 +1983,12 @@ static bool CheckSignalAutoFill(TileIndex &tile, Trackdir &trackdir, int &signal
|
||||
* - p2 = (bit 10) - 0 = keep fixed distance, 1 = minimise gaps between signals
|
||||
* - p2 = (bit 11-14) - default signal style
|
||||
* - p2 = (bit 24-31) - user defined signals_density
|
||||
* @param p3 various bitstuffed elements
|
||||
* - p3 = (bit 0) - 1 = skip over rail stations/waypoints, 0 = stop at rail stations/waypoints
|
||||
* @param text unused
|
||||
* @return the cost of this operation or an error
|
||||
*/
|
||||
static CommandCost CmdSignalTrackHelper(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
static CommandCost CmdSignalTrackHelper(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, uint64 p3, const char *text)
|
||||
{
|
||||
CommandCost total_cost(EXPENSES_CONSTRUCTION);
|
||||
TileIndex start_tile = tile;
|
||||
@@ -1993,6 +2001,7 @@ static CommandCost CmdSignalTrackHelper(TileIndex tile, DoCommandFlag flags, uin
|
||||
bool minimise_gaps = HasBit(p2, 10);
|
||||
byte signal_density = GB(p2, 24, 8);
|
||||
uint8 signal_style = GB(p2, 11, 4);
|
||||
bool allow_station = HasBit(p3, 0);
|
||||
|
||||
if (p1 >= MapSize() || !ValParamTrackOrientation(track)) return CMD_ERROR;
|
||||
TileIndex end_tile = p1;
|
||||
@@ -2136,7 +2145,7 @@ static CommandCost CmdSignalTrackHelper(TileIndex tile, DoCommandFlag flags, uin
|
||||
}
|
||||
|
||||
if (autofill) {
|
||||
if (!CheckSignalAutoFill(tile, trackdir, signal_ctr, remove)) break;
|
||||
if (!CheckSignalAutoFill(tile, trackdir, signal_ctr, remove, allow_station)) break;
|
||||
|
||||
/* Prevent possible loops */
|
||||
if (tile == start_tile && trackdir == start_trackdir) break;
|
||||
@@ -2174,13 +2183,15 @@ static CommandCost CmdSignalTrackHelper(TileIndex tile, DoCommandFlag flags, uin
|
||||
* - p2 = (bit 10) - 0 = keep fixed distance, 1 = minimise gaps between signals
|
||||
* - p2 = (bit 11-14) - default signal style
|
||||
* - p2 = (bit 24-31) - user defined signals_density
|
||||
* @param p3 various bitstuffed elements
|
||||
* - p3 = (bit 0) - 1 = skip over rail stations/waypoints, 0 = stop at rail stations/waypoints
|
||||
* @param text unused
|
||||
* @return the cost of this operation or an error
|
||||
* @see CmdSignalTrackHelper
|
||||
*/
|
||||
CommandCost CmdBuildSignalTrack(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
CommandCost CmdBuildSignalTrack(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, uint64 p3, const char *text, const CommandAuxiliaryBase *aux_data)
|
||||
{
|
||||
return CmdSignalTrackHelper(tile, flags, p1, p2, text);
|
||||
return CmdSignalTrackHelper(tile, flags, p1, p2, p3, text);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2327,13 +2338,15 @@ CommandCost CmdRemoveSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1
|
||||
* - p2 = (bit 6) - 0 = selected stretch, 1 = auto fill
|
||||
* - p2 = (bit 7- 9) - default signal type
|
||||
* - p2 = (bit 24-31) - user defined signals_density
|
||||
* @param p3 various bitstuffed elements
|
||||
* - p3 = (bit 0) - 1 = skip over rail stations/waypoints, 0 = stop at rail stations/waypoints
|
||||
* @param text unused
|
||||
* @return the cost of this operation or an error
|
||||
* @see CmdSignalTrackHelper
|
||||
*/
|
||||
CommandCost CmdRemoveSignalTrack(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
CommandCost CmdRemoveSignalTrack(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, uint64 p3, const char *text, const CommandAuxiliaryBase *aux_data)
|
||||
{
|
||||
return CmdSignalTrackHelper(tile, flags, p1, SetBit(p2, 5), text); // bit 5 is remove bit
|
||||
return CmdSignalTrackHelper(tile, flags, p1, SetBit(p2, 5), p3, text); // bit 5 is remove bit
|
||||
}
|
||||
|
||||
/** Update power of train under which is the railtype being converted */
|
||||
|
Reference in New Issue
Block a user