Changeset - r12461:548f0e01a738
[Not reviewed]
master
0 8 0
rubidium - 15 years ago 2009-07-22 08:52:41
rubidium@openttd.org
(svn r16908) -Codechange: s/DepotWaypointReservation/DepotReservation/
8 files changed with 34 insertions and 36 deletions:
0 comments (0 inline, 0 general)
src/newgrf_station.cpp
Show inline comments
 
@@ -449,13 +449,13 @@ static uint32 StationGetVariable(const R
 
			return _svc.v41;
 

	
 
		case 0x42: return GetTerrainType(tile) | (GetRailType(tile) << 8);
 
		case 0x43: return st->owner; // Station owner
 
		case 0x44:
 
			if (IsRailWaypointTile(tile)) {
 
				return HasDepotWaypointReservation(tile) ? 7 : 4;
 
				return HasDepotReservation(tile) ? 7 : 4;
 
			} else {
 
				return HasStationReservation(tile) ? 7 : 4; // PBS status
 
			}
 
		case 0x45:
 
			if (!HasBit(_svc.valid, 2)) { _svc.v45 = GetRailContinuationInfo(tile); SetBit(_svc.valid, 2); }
 
			return _svc.v45;
src/pbs.cpp
Show inline comments
 
@@ -14,13 +14,13 @@
 
 *     a tile without rail.
 
 */
 
TrackBits GetReservedTrackbits(TileIndex t)
 
{
 
	switch (GetTileType(t)) {
 
		case MP_RAILWAY:
 
			if (IsRailWaypoint(t) || IsRailDepot(t)) return GetWaypointReservationTrackBits(t);
 
			if (IsRailDepot(t)) return GetDepotReservationTrackBits(t);
 
			if (IsPlainRail(t)) return GetRailReservationTrackBits(t);
 
			break;
 

	
 
		case MP_ROAD:
 
			if (IsLevelCrossing(t)) return GetCrossingReservationTrackBits(t);
 
			break;
 
@@ -77,15 +77,15 @@ bool TryReserveRailTrack(TileIndex tile,
 
		MarkTileDirtyByTile(tile);
 
	}
 

	
 
	switch (GetTileType(tile)) {
 
		case MP_RAILWAY:
 
			if (IsPlainRail(tile)) return TryReserveTrack(tile, t);
 
			if (IsRailWaypoint(tile) || IsRailDepot(tile)) {
 
				if (!HasDepotWaypointReservation(tile)) {
 
					SetDepotWaypointReservation(tile, true);
 
			if (IsRailDepot(tile)) {
 
				if (!HasDepotReservation(tile)) {
 
					SetDepotReservation(tile, true);
 
					MarkTileDirtyByTile(tile); // some GRFs change their appearance when tile is reserved
 
					return true;
 
				}
 
			}
 
			break;
 

	
 
@@ -131,14 +131,14 @@ bool TryReserveRailTrack(TileIndex tile,
 
	if (_settings_client.gui.show_track_reservation) {
 
		MarkTileDirtyByTile(tile);
 
	}
 

	
 
	switch (GetTileType(tile)) {
 
		case MP_RAILWAY:
 
			if (IsRailWaypoint(tile) || IsRailDepot(tile)) {
 
				SetDepotWaypointReservation(tile, false);
 
			if (IsRailDepot(tile)) {
 
				SetDepotReservation(tile, false);
 
				MarkTileDirtyByTile(tile);
 
				break;
 
			}
 
			if (IsPlainRail(tile)) UnreserveTrack(tile, t);
 
			break;
 

	
src/rail_cmd.cpp
Show inline comments
 
@@ -1436,13 +1436,13 @@ static CommandCost RemoveTrainDepot(Tile
 
	if (flags & DC_EXEC) {
 
		/* read variables before the depot is removed */
 
		DiagDirection dir = GetRailDepotDirection(tile);
 
		Owner owner = GetTileOwner(tile);
 
		Train *v = NULL;
 

	
 
		if (HasDepotWaypointReservation(tile)) {
 
		if (HasDepotReservation(tile)) {
 
			v = GetTrainForReservation(tile, DiagDirToDiagTrack(dir));
 
			if (v != NULL) FreeTrainTrackReservation(v);
 
		}
 

	
 
		DoClearSquare(tile);
 
		delete Depot::GetByTile(tile);
 
@@ -1980,13 +1980,13 @@ default_waypoint:
 
			}
 
		}
 

	
 
		DrawGroundSprite(image, GroundSpritePaletteTransform(image, pal, _drawtile_track_palette));
 

	
 
		/* PBS debugging, draw reserved tracks darker */
 
		if (_game_mode != GM_MENU && _settings_client.gui.show_track_reservation && HasDepotWaypointReservation(ti->tile) &&
 
		if (_game_mode != GM_MENU && _settings_client.gui.show_track_reservation && HasDepotReservation(ti->tile) &&
 
				(!IsRailDepot(ti->tile) || GetRailDepotDirection(ti->tile) == DIAGDIR_SW || GetRailDepotDirection(ti->tile) == DIAGDIR_SE)) {
 
			DrawGroundSprite(GetWaypointAxis(ti->tile) == AXIS_X ? rti->base_sprites.single_y : rti->base_sprites.single_x, PALETTE_CRASH);
 
		}
 

	
 
		if (HasCatenaryDrawn(GetRailType(ti->tile))) DrawCatenary(ti);
 

	
src/rail_map.h
Show inline comments
 
@@ -309,57 +309,55 @@ static inline void UnreserveTrack(TileIn
 
	TrackBits res = GetRailReservationTrackBits(tile);
 
	res &= ~TrackToTrackBits(t);
 
	SetTrackReservation(tile, res);
 
}
 

	
 
/**
 
 * Get the reservation state of the waypoint or depot
 
 * @note Works for both waypoints and rail depots
 
 * @pre IsRailWaypoint(t) || IsRailDepot(t)
 
 * @param t the waypoint/depot tile
 
 * Get the reservation state of the depot
 
 * @pre IsRailDepot(t)
 
 * @param t the depot tile
 
 * @return reservation state
 
 */
 
static inline bool HasDepotWaypointReservation(TileIndex t)
 
static inline bool HasDepotReservation(TileIndex t)
 
{
 
	assert(IsRailWaypoint(t) || IsRailDepot(t));
 
	assert(IsRailDepot(t));
 
	return HasBit(_m[t].m5, 4);
 
}
 

	
 
/**
 
 * Set the reservation state of the waypoint or depot
 
 * @note Works for both waypoints and rail depots
 
 * @pre IsRailWaypoint(t) || IsRailDepot(t)
 
 * @param t the waypoint/depot tile
 
 * Set the reservation state of the depot
 
 * @pre IsRailDepot(t)
 
 * @param t the depot tile
 
 * @param b the reservation state
 
 */
 
static inline void SetDepotWaypointReservation(TileIndex t, bool b)
 
static inline void SetDepotReservation(TileIndex t, bool b)
 
{
 
	assert(IsRailWaypoint(t) || IsRailDepot(t));
 
	assert(IsRailDepot(t));
 
	SB(_m[t].m5, 4, 1, (byte)b);
 
}
 

	
 
/**
 
 * Get the reserved track bits for a waypoint
 
 * @pre IsRailWaypoint(t)
 
 * @param t the tile
 
 * @return reserved track bits
 
 */
 
static inline TrackBits GetWaypointReservationTrackBits(TileIndex t)
 
{
 
	return HasDepotWaypointReservation(t) ? GetRailWaypointBits(t) : TRACK_BIT_NONE;
 
	return HasDepotReservation(t) ? GetRailWaypointBits(t) : TRACK_BIT_NONE;
 
}
 

	
 
/**
 
 * Get the reserved track bits for a depot
 
 * @pre IsRailDepot(t)
 
 * @param t the tile
 
 * @return reserved track bits
 
 */
 
static inline TrackBits GetDepotReservationTrackBits(TileIndex t)
 
{
 
	return HasDepotWaypointReservation(t) ? TrackToTrackBits(GetRailDepotTrack(t)) : TRACK_BIT_NONE;
 
	return HasDepotReservation(t) ? TrackToTrackBits(GetRailDepotTrack(t)) : TRACK_BIT_NONE;
 
}
 

	
 

	
 
static inline bool IsPbsSignal(SignalType s)
 
{
 
	return s == SIGTYPE_PBS || s == SIGTYPE_PBS_ONEWAY;
src/saveload/afterload.cpp
Show inline comments
 
@@ -1665,14 +1665,14 @@ bool AfterLoadGame()
 
						SetSignalVariant(t, TRACK_LOWER, HasBit(_m[t].m2, 6) ? SIG_SEMAPHORE : SIG_ELECTRIC);
 
						ClrBit(_m[t].m2, 2);
 
						ClrBit(_m[t].m2, 6);
 
					}
 

	
 
					/* Clear PBS reservation on track */
 
					if (IsRailDepot(t) ||IsRailWaypoint(t)) {
 
						SetDepotWaypointReservation(t, false);
 
					if (IsRailDepot(t)) {
 
						SetDepotReservation(t, false);
 
					} else {
 
						SetTrackReservation(t, TRACK_BIT_NONE);
 
					}
 
					break;
 

	
 
				case MP_ROAD: // Clear PBS reservation on crossing
src/train_cmd.cpp
Show inline comments
 
@@ -2456,39 +2456,39 @@ static bool CheckTrainStayInDepot(Train 
 
			return true;
 
		}
 

	
 
		v->load_unload_time_rem = 0;
 

	
 
		seg_state = _settings_game.pf.reserve_paths ? SIGSEG_PBS : UpdateSignalsOnSegment(v->tile, INVALID_DIAGDIR, v->owner);
 
		if (seg_state == SIGSEG_FULL || HasDepotWaypointReservation(v->tile)) {
 
		if (seg_state == SIGSEG_FULL || HasDepotReservation(v->tile)) {
 
			/* Full and no PBS signal in block or depot reserved, can't exit. */
 
			InvalidateWindowClasses(WC_TRAINS_LIST);
 
			return true;
 
		}
 
	} else {
 
		seg_state = _settings_game.pf.reserve_paths ? SIGSEG_PBS : UpdateSignalsOnSegment(v->tile, INVALID_DIAGDIR, v->owner);
 
	}
 

	
 
	/* We are leaving a depot, but have to go to the exact same one; re-enter */
 
	if (v->current_order.IsType(OT_GOTO_DEPOT) && v->tile == v->dest_tile) {
 
		/* We need to have a reservation for this to work. */
 
		if (HasDepotWaypointReservation(v->tile)) return true;
 
		SetDepotWaypointReservation(v->tile, true);
 
		if (HasDepotReservation(v->tile)) return true;
 
		SetDepotReservation(v->tile, true);
 
		VehicleEnterDepot(v);
 
		return true;
 
	}
 

	
 
	/* Only leave when we can reserve a path to our destination. */
 
	if (seg_state == SIGSEG_PBS && !TryPathReserve(v) && v->force_proceed == 0) {
 
		/* No path and no force proceed. */
 
		InvalidateWindowClasses(WC_TRAINS_LIST);
 
		MarkTrainAsStuck(v);
 
		return true;
 
	}
 

	
 
	SetDepotWaypointReservation(v->tile, true);
 
	SetDepotReservation(v->tile, true);
 
	if (_settings_client.gui.show_track_reservation) MarkTileDirtyByTile(v->tile);
 

	
 
	VehicleServiceInDepot(v);
 
	InvalidateWindowClasses(WC_TRAINS_LIST);
 
	v->PlayLeaveStationSound();
 

	
 
@@ -3134,13 +3134,13 @@ bool TryPathReserve(Train *v, bool mark_
 
	assert(v->IsFrontEngine());
 

	
 
	/* We have to handle depots specially as the track follower won't look
 
	 * at the depot tile itself but starts from the next tile. If we are still
 
	 * inside the depot, a depot reservation can never be ours. */
 
	if (v->track == TRACK_BIT_DEPOT) {
 
		if (HasDepotWaypointReservation(v->tile)) {
 
		if (HasDepotReservation(v->tile)) {
 
			if (mark_as_stuck) MarkTrainAsStuck(v);
 
			return false;
 
		} else {
 
			/* Depot not reserved, but the next tile might be. */
 
			TileIndex next_tile = TileAddByDiagDir(v->tile, GetRailDepotDirection(v->tile));
 
			if (HasReservedTracks(next_tile, DiagdirReachesTracks(GetRailDepotDirection(v->tile)))) return false;
 
@@ -3178,13 +3178,13 @@ bool TryPathReserve(Train *v, bool mark_
 
		if (mark_as_stuck) MarkTrainAsStuck(v);
 
		return false;
 
	}
 

	
 
	/* If we are in a depot, tentativly reserve the depot. */
 
	if (v->track == TRACK_BIT_DEPOT) {
 
		SetDepotWaypointReservation(v->tile, true);
 
		SetDepotReservation(v->tile, true);
 
		if (_settings_client.gui.show_track_reservation) MarkTileDirtyByTile(v->tile);
 
	}
 

	
 
	DiagDirection exitdir = TrackdirToExitdir(origin.trackdir);
 
	TileIndex     new_tile = TileAddByDiagDir(origin.tile, exitdir);
 
	TrackBits     reachable = TrackdirBitsToTrackBits(TrackStatusToTrackdirBits(GetTileTrackStatus(new_tile, TRANSPORT_RAIL, 0)) & DiagdirReachesTrackdirs(exitdir));
 
@@ -3193,13 +3193,13 @@ bool TryPathReserve(Train *v, bool mark_
 

	
 
	bool res_made = false;
 
	ChooseTrainTrack(v, new_tile, exitdir, reachable, true, &res_made, mark_as_stuck);
 

	
 
	if (!res_made) {
 
		/* Free the depot reservation as well. */
 
		if (v->track == TRACK_BIT_DEPOT) SetDepotWaypointReservation(v->tile, false);
 
		if (v->track == TRACK_BIT_DEPOT) SetDepotReservation(v->tile, false);
 
		return false;
 
	}
 

	
 
	if (HasBit(v->flags, VRF_TRAIN_STUCK)) {
 
		v->load_unload_time_rem = 0;
 
		InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
src/vehicle.cpp
Show inline comments
 
@@ -949,13 +949,13 @@ void VehicleEnterDepot(Vehicle *v)
 
{
 
	switch (v->type) {
 
		case VEH_TRAIN: {
 
			Train *t = Train::From(v);
 
			InvalidateWindowClasses(WC_TRAINS_LIST);
 
			/* Clear path reservation */
 
			SetDepotWaypointReservation(t->tile, false);
 
			SetDepotReservation(t->tile, false);
 
			if (_settings_client.gui.show_track_reservation) MarkTileDirtyByTile(t->tile);
 

	
 
			if (!t->IsFrontEngine()) t = t->First();
 
			UpdateSignalsOnSegment(t->tile, INVALID_DIAGDIR, t->owner);
 
			t->load_unload_time_rem = 0;
 
			ClrBit(t->flags, VRF_TOGGLE_REVERSE);
src/waypoint_cmd.cpp
Show inline comments
 
@@ -184,13 +184,13 @@ CommandCost CmdBuildTrainWaypoint(TileIn
 
			InvalidateWindowData(WC_WAYPOINT_VIEW, wp->index);
 
		}
 
		wp->owner = owner;
 

	
 
		bool reserved = HasBit(GetRailReservationTrackBits(tile), AxisToTrack(axis));
 
		MakeRailWaypoint(tile, owner, axis, GetRailType(tile), wp->index);
 
		SetDepotWaypointReservation(tile, reserved);
 
		SetDepotReservation(tile, reserved);
 
		MarkTileDirtyByTile(tile);
 

	
 
		AllocateSpecToStation(GetCustomStationSpec(STAT_CLASS_WAYP, p1), wp, true);
 

	
 
		wp->delete_ctr = 0;
 
		wp->facilities |= FACIL_TRAIN;
 
@@ -231,18 +231,18 @@ CommandCost RemoveTrainWaypoint(TileInde
 
		wp->sign.MarkDirty();
 
		wp->facilities &= ~FACIL_TRAIN;
 

	
 
		Train *v = NULL;
 
		if (justremove) {
 
			TrackBits tracks = GetRailWaypointBits(tile);
 
			bool reserved = HasDepotWaypointReservation(tile);
 
			bool reserved = HasDepotReservation(tile);
 
			MakeRailNormal(tile, wp->owner, tracks, GetRailType(tile));
 
			if (reserved) SetTrackReservation(tile, tracks);
 
			MarkTileDirtyByTile(tile);
 
		} else {
 
			if (HasDepotWaypointReservation(tile)) {
 
			if (HasDepotReservation(tile)) {
 
				v = GetTrainForReservation(tile, track);
 
				if (v != NULL) FreeTrainTrackReservation(v);
 
			}
 
			DoClearSquare(tile);
 
			AddTrackToSignalBuffer(tile, track, wp->owner);
 
		}
0 comments (0 inline, 0 general)