summaryrefslogtreecommitdiff
path: root/src/signal.cpp
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2008-01-15 15:00:01 +0000
committersmatz <smatz@openttd.org>2008-01-15 15:00:01 +0000
commit245f05a7cc3b333387da0d31b7f797bebf0720fb (patch)
tree3fac3a5889143b62cffcafd37b2c29c84ae62f39 /src/signal.cpp
parent932c586dfe3713e27b86286fafeea56b2958fa15 (diff)
downloadopenttd-245f05a7cc3b333387da0d31b7f797bebf0720fb.tar.xz
(svn r11864) -Codechange: pass owner whose signals we will update instead of complex detection later
Diffstat (limited to 'src/signal.cpp')
-rw-r--r--src/signal.cpp38
1 files changed, 17 insertions, 21 deletions
diff --git a/src/signal.cpp b/src/signal.cpp
index d00931487..fa9b6c796 100644
--- a/src/signal.cpp
+++ b/src/signal.cpp
@@ -257,12 +257,10 @@ static SigFlags ExploreSegment(Owner owner)
{
SigFlags flags = SF_NONE;
- while (!_tbdset.IsEmpty()) {
- TileIndex tile;
- DiagDirection enterdir;
-
- _tbdset.Get(&tile, &enterdir);
+ TileIndex tile;
+ DiagDirection enterdir;
+ while (_tbdset.Get(&tile, &enterdir)) {
TileIndex oldtile = tile; // tile we are leaving
DiagDirection exitdir = enterdir == INVALID_DIAGDIR ? INVALID_DIAGDIR : ReverseDiagDir(enterdir); // expected new exit direction (for straight line)
@@ -396,11 +394,10 @@ static SigFlags ExploreSegment(Owner owner)
*/
static void UpdateSignalsAroundSegment(SigFlags flags)
{
- while (!_tbuset.IsEmpty()) {
- TileIndex tile;
- Trackdir trackdir;
- _tbuset.Get(&tile, &trackdir);
+ TileIndex tile;
+ Trackdir trackdir;
+ while (_tbuset.Get(&tile, &trackdir)) {
assert(HasSignalOnTrackdir(tile, trackdir));
SignalType sig = GetSignalType(tile, TrackdirToTrack(trackdir));
@@ -453,15 +450,17 @@ static inline void ResetSets()
/**
* Updates blocks in _globset buffer
*
+ * @param owner player whose signals we are updating
* @return false iff presignal entry would be green (needed for trains leaving depot)
+ * @pre IsValidPlayer(owner)
*/
-static bool UpdateSignalsInBuffer()
+static bool UpdateSignalsInBuffer(Owner owner)
{
+ assert(IsValidPlayer(owner));
+
bool first = true; // first block?
bool state = false; // value to return
- Owner owner = OWNER_NONE; // owner whose signals we are updating
-
TileIndex tile;
DiagDirection dir;
@@ -479,7 +478,6 @@ static bool UpdateSignalsInBuffer()
/* 'optimization assert' - do not try to update signals when it is not needed */
assert(GetTunnelBridgeTransportType(tile) == TRANSPORT_RAIL);
assert(dir == INVALID_DIAGDIR || dir == ReverseDiagDir(GetTunnelBridgeDirection(tile)));
- if (first) owner = GetTileOwner(tile);
_tbdset.Add(tile, INVALID_DIAGDIR); // we can safely start from wormhole centre
_tbdset.Add(GetOtherTunnelBridgeEnd(tile), INVALID_DIAGDIR);
break;
@@ -488,7 +486,6 @@ static bool UpdateSignalsInBuffer()
if (IsRailDepot(tile)) {
/* 'optimization assert' do not try to update signals in other cases */
assert(dir == INVALID_DIAGDIR || dir == GetRailDepotDirection(tile));
- if (first) owner = GetTileOwner(tile);
_tbdset.Add(tile, INVALID_DIAGDIR); // start from depot inside
break;
}
@@ -497,7 +494,6 @@ static bool UpdateSignalsInBuffer()
case MP_ROAD:
if ((TrackBits)(GetTileTrackStatus(tile, TRANSPORT_RAIL, 0) & _enterdir_to_trackbits[dir]) != TRACK_BIT_NONE) {
/* only add to set when there is some 'interesting' track */
- if (first) owner = GetTileOwner(tile);
_tbdset.Add(tile, dir);
_tbdset.Add(tile + TileOffsByDiagDir(dir), ReverseDiagDir(dir));
break;
@@ -508,7 +504,6 @@ static bool UpdateSignalsInBuffer()
tile = tile + TileOffsByDiagDir(dir);
dir = ReverseDiagDir(dir);
if ((TrackBits)(GetTileTrackStatus(tile, TRANSPORT_RAIL, 0) & _enterdir_to_trackbits[dir]) != TRACK_BIT_NONE) {
- if (first) owner = GetTileOwner(tile);
_tbdset.Add(tile, dir);
break;
}
@@ -516,7 +511,6 @@ static bool UpdateSignalsInBuffer()
continue; // continue the while() loop
}
- assert(IsValidPlayer(owner));
assert(!_tbdset.Overflowed()); // it really shouldn't overflow by these one or two items
assert(!_tbdset.IsEmpty()); // it wouldn't hurt anyone, but shouldn't happen too
@@ -547,14 +541,15 @@ static bool UpdateSignalsInBuffer()
* @see UpdateSignalsInBuffer()
* @param tile tile where we start
* @param side side of tile
+ * @param owner owner whose signals we will update
* @return false iff train can leave depot
*/
-bool UpdateSignalsOnSegment(TileIndex tile, DiagDirection side)
+bool UpdateSignalsOnSegment(TileIndex tile, DiagDirection side, Owner owner)
{
assert(_globset.IsEmpty());
_globset.Add(tile, side);
- return UpdateSignalsInBuffer();
+ return UpdateSignalsInBuffer(owner);
}
@@ -565,8 +560,9 @@ bool UpdateSignalsOnSegment(TileIndex tile, DiagDirection side)
* @see UpdateSignalsInBuffer()
* @param tile tile where we start
* @param track track at which ends we will update signals
+ * @param owner owner whose signals we will update
*/
-void SetSignalsOnBothDir(TileIndex tile, Track track)
+void SetSignalsOnBothDir(TileIndex tile, Track track, Owner owner)
{
static const DiagDirection _search_dir_1[] = {
DIAGDIR_NE, DIAGDIR_SE, DIAGDIR_NE, DIAGDIR_SE, DIAGDIR_SW, DIAGDIR_SE
@@ -579,5 +575,5 @@ void SetSignalsOnBothDir(TileIndex tile, Track track)
_globset.Add(tile, _search_dir_1[track]);
_globset.Add(tile, _search_dir_2[track]);
- UpdateSignalsInBuffer();
+ UpdateSignalsInBuffer(owner);
}