Changeset - r15439:c3d2564d153b
[Not reviewed]
master
0 3 0
michi_cc - 14 years ago 2010-07-09 14:14:17
michi_cc@openttd.org
(svn r20098) -Fix [FS#3898]: A train reversing in a station would sometimes fail to release its reserved path.
3 files changed with 13 insertions and 6 deletions:
0 comments (0 inline, 0 general)
src/train.h
Show inline comments
 
@@ -41,6 +41,9 @@ enum VehicleRailFlags {
 

	
 
	/* used to mark a train that can't get a path reservation */
 
	VRF_TRAIN_STUCK    = 8,
 

	
 
	/* used to mark a train that is just leaving a station */
 
	VRF_LEAVING_STATION = 9,
 
};
 

	
 
/** Modes for ignoring signals. */
src/train_cmd.cpp
Show inline comments
 
@@ -3808,8 +3808,17 @@ static bool TrainLocoHandler(Train *v, b
 
		v->wait_counter = 0;
 
		v->cur_speed = 0;
 
		v->subspeed = 0;
 
		ClrBit(v->flags, VRF_LEAVING_STATION);
 
		ReverseTrainDirection(v);
 
		return true;
 
	} else if (HasBit(v->flags, VRF_LEAVING_STATION)) {
 
		/* Try to reserve a path when leaving the station as we
 
		 * might not be marked as wanting a reservation, e.g.
 
		 * when an overlength train gets turned around in a station. */
 
		if (UpdateSignalsOnSegment(v->tile, TrackdirToExitdir(v->GetVehicleTrackdir()), v->owner) == SIGSEG_PBS || _settings_game.pf.reserve_paths) {
 
			TryPathReserve(v, true, true);
 
		}
 
		ClrBit(v->flags, VRF_LEAVING_STATION);
 
	}
 

	
 
	v->HandleLoading(mode);
src/vehicle.cpp
Show inline comments
 
@@ -1635,12 +1635,7 @@ void Vehicle::LeaveStation()
 
		/* Trigger station animation (trains only) */
 
		if (IsTileType(this->tile, MP_STATION)) StationAnimationTrigger(st, this->tile, STAT_ANIM_TRAIN_DEPARTS);
 

	
 
		/* Try to reserve a path when leaving the station as we
 
		 * might not be marked as wanting a reservation, e.g.
 
		 * when an overlength train gets turned around in a station. */
 
		if (UpdateSignalsOnSegment(this->tile, TrackdirToExitdir(this->GetVehicleTrackdir()), this->owner) == SIGSEG_PBS || _settings_game.pf.reserve_paths) {
 
			TryPathReserve(Train::From(this), true, true);
 
		}
 
		SetBit(Train::From(this)->flags, VRF_LEAVING_STATION);
 
	}
 
}
 

	
0 comments (0 inline, 0 general)