diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 35ce00f49b..28906ec7fd 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -1461,7 +1461,7 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1, Company * const c = Company::Get(GetTileOwner(tile)); std::vector re_reserve_trains; if (IsTunnelBridgeWithSignalSimulation(tile)) { - c->infrastructure.signal -= GetTunnelBridgeSignalSimulationSignalCount(tile, tile_exit); + c->infrastructure.signal -= GetTunnelBridgeSignalSimulationSignalCount(c, tile, tile_exit); } else { for (TileIndex t : { tile, tile_exit }) { if (HasAcrossTunnelBridgeReservation(t)) { @@ -1536,7 +1536,7 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1, AddSideToSignalBuffer(tile_exit, INVALID_DIAGDIR, GetTileOwner(tile)); YapfNotifyTrackLayoutChange(tile, track); YapfNotifyTrackLayoutChange(tile_exit, track); - if (IsTunnelBridgeWithSignalSimulation(tile)) c->infrastructure.signal += GetTunnelBridgeSignalSimulationSignalCount(tile, tile_exit); + if (IsTunnelBridgeWithSignalSimulation(tile)) c->infrastructure.signal += GetTunnelBridgeSignalSimulationSignalCount(c, tile, tile_exit); DirtyCompanyInfrastructureWindows(GetTileOwner(tile)); for (Train *re_reserve_train : re_reserve_trains) { ReReserveTrainPath(re_reserve_train); @@ -2028,7 +2028,8 @@ CommandCost CmdRemoveSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1 } } if (flags & DC_EXEC) { - Company::Get(GetTileOwner(tile))->infrastructure.signal -= GetTunnelBridgeSignalSimulationSignalCount(tile, end); + Company *c = Company::Get(GetTileOwner(tile)); + c->infrastructure.signal -= GetTunnelBridgeSignalSimulationSignalCount(c, tile, end); ClearBridgeTunnelSignalSimulation(end, tile); ClearBridgeTunnelSignalSimulation(tile, end); MarkBridgeOrTunnelDirty(tile); diff --git a/src/tunnelbridge.h b/src/tunnelbridge.h index 92036aef70..417899ba7a 100644 --- a/src/tunnelbridge.h +++ b/src/tunnelbridge.h @@ -14,7 +14,7 @@ #include "tile_map.h" uint GetTunnelBridgeSignalSimulationSpacing(TileIndex tile); -uint GetTunnelBridgeSignalSimulationSignalCount(TileIndex begin, TileIndex end); +uint GetTunnelBridgeSignalSimulationSignalCount(Company *c, TileIndex begin, TileIndex end); /** * Calculates the length of a tunnel or a bridge (without end tiles) diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 9c498e2907..ace7aeb980 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -143,13 +143,14 @@ uint GetTunnelBridgeSignalSimulationSpacing(TileIndex tile) /** * Get number of signals on bridge or tunnel with signal simulation. + * @param c Company to use. * @param begin The begin of the tunnel or bridge. * @param end The end of the tunnel or bridge. * @pre IsTunnelBridgeWithSignalSimulation(begin) */ -uint GetTunnelBridgeSignalSimulationSignalCount(TileIndex begin, TileIndex end) +uint GetTunnelBridgeSignalSimulationSignalCount(Company *c, TileIndex begin, TileIndex end) { - uint result = 2 + (GetTunnelBridgeLength(begin, end) / GetTunnelBridgeSignalSimulationSpacing(begin)); + uint result = 2 + (GetTunnelBridgeLength(begin, end) / c->settings.simulated_wormhole_signals); if (IsTunnelBridgeSignalSimulationBidirectional(begin)) result *= 2; return result; } @@ -1246,9 +1247,10 @@ static CommandCost DoClearTunnel(TileIndex tile, DoCommandFlag flags) check_tile(endtile); if (Company::IsValidID(owner)) { - Company::Get(owner)->infrastructure.rail[GetRailType(tile)] -= len * TUNNELBRIDGE_TRACKBIT_FACTOR; + Company *c = Company::Get(owner); + c->infrastructure.rail[GetRailType(tile)] -= len * TUNNELBRIDGE_TRACKBIT_FACTOR; if (IsTunnelBridgeWithSignalSimulation(tile)) { // handle tunnel/bridge signals. - Company::Get(GetTileOwner(tile))->infrastructure.signal -= GetTunnelBridgeSignalSimulationSignalCount(tile, endtile); + c->infrastructure.signal -= GetTunnelBridgeSignalSimulationSignalCount(c, tile, endtile); } DirtyCompanyInfrastructureWindows(owner); } @@ -2691,9 +2693,9 @@ static void UpdateRailTunnelBridgeInfrastructure(Company *c, TileIndex begin, Ti if (IsTunnelBridgeWithSignalSimulation(begin)) { if (add) { - c->infrastructure.signal += GetTunnelBridgeSignalSimulationSignalCount(begin, end); + c->infrastructure.signal += GetTunnelBridgeSignalSimulationSignalCount(c, begin, end); } else { - c->infrastructure.signal -= GetTunnelBridgeSignalSimulationSignalCount(begin, end); + c->infrastructure.signal -= GetTunnelBridgeSignalSimulationSignalCount(c, begin, end); } } }