mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2026-07-21 01:59:44 +00:00
Codechange: simplify iteration of track bits (#15668)
This commit is contained in:
+3
-5
@@ -485,11 +485,9 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
|
||||
* because of different owner of crossing and approaching train */
|
||||
for (const auto tile : Map::Iterate()) {
|
||||
if (IsTileType(tile, TileType::Railway) && IsTileOwner(tile, new_owner) && HasSignals(tile)) {
|
||||
TrackBits tracks = GetTrackBits(tile);
|
||||
do { // there may be two tracks with signals for TRACK_BIT_HORZ and TRACK_BIT_VERT
|
||||
Track track = RemoveFirstTrack(&tracks);
|
||||
if (HasSignalOnTrack(tile, track)) AddTrackToSignalBuffer(tile, track, new_owner);
|
||||
} while (tracks != TRACK_BIT_NONE);
|
||||
for (Track track : SetTrackBitIterator(GetTrackBits(tile))) {
|
||||
if (IsSignalPresent(tile, SignalOnTrack(track))) AddTrackToSignalBuffer(tile, track, new_owner);
|
||||
}
|
||||
} else if (IsLevelCrossingTile(tile) && IsTileOwner(tile, new_owner)) {
|
||||
UpdateLevelCrossing(tile);
|
||||
}
|
||||
|
||||
+4
-9
@@ -1608,9 +1608,7 @@ CommandCost CmdConvertRail(DoCommandFlags flags, TileIndex tile, TileIndex area_
|
||||
}
|
||||
}
|
||||
if (flags.Test(DoCommandFlag::Execute)) { // we can safely convert, too
|
||||
TrackBits reserved = GetReservedTrackbits(tile);
|
||||
Track track;
|
||||
while ((track = RemoveFirstTrack(&reserved)) != INVALID_TRACK) {
|
||||
for (Track track : SetTrackBitIterator(GetReservedTrackbits(tile))) {
|
||||
Train *v = GetTrainForReservation(tile, track);
|
||||
if (v != nullptr && !HasPowerOnRail(v->railtypes, totype)) {
|
||||
/* No power on new rail type, reroute. */
|
||||
@@ -1662,9 +1660,8 @@ CommandCost CmdConvertRail(DoCommandFlags flags, TileIndex tile, TileIndex area_
|
||||
default: // RailTileType::Normal, RailTileType::Signals
|
||||
if (flags.Test(DoCommandFlag::Execute)) {
|
||||
/* notify YAPF about the track layout change */
|
||||
TrackBits tracks = GetTrackBits(tile);
|
||||
while (tracks != TRACK_BIT_NONE) {
|
||||
YapfNotifyTrackLayoutChange(tile, RemoveFirstTrack(&tracks));
|
||||
for (Track track : SetTrackBitIterator(GetTrackBits(tile))) {
|
||||
YapfNotifyTrackLayoutChange(tile, track);
|
||||
}
|
||||
}
|
||||
found_convertible_track = true;
|
||||
@@ -1824,9 +1821,7 @@ static CommandCost ClearTile_Rail(TileIndex tile, DoCommandFlags flags)
|
||||
/* Is there flat water on the lower halftile that gets cleared expensively? */
|
||||
bool water_ground = (GetRailGroundType(tile) == RailGroundType::HalfTileWater && IsSlopeWithOneCornerRaised(tileh));
|
||||
|
||||
TrackBits tracks = GetTrackBits(tile);
|
||||
while (tracks != TRACK_BIT_NONE) {
|
||||
Track track = RemoveFirstTrack(&tracks);
|
||||
for (Track track : SetTrackBitIterator(GetTrackBits(tile))) {
|
||||
CommandCost ret = Command<Commands::RemoveRail>::Do(flags, tile, track);
|
||||
if (ret.Failed()) return ret;
|
||||
cost.AddCost(ret.GetCost());
|
||||
|
||||
Reference in New Issue
Block a user