Changeset - r9699:1f93d59ccf9d
[Not reviewed]
master
0 1 0
smatz - 16 years ago 2008-07-23 18:23:12
smatz@openttd.org
(svn r13806) -Fix [FS#2162]: checking for train waiting at other side of two-way signal was broken
1 file changed with 11 insertions and 9 deletions:
0 comments (0 inline, 0 general)
src/train_cmd.cpp
Show inline comments
 
@@ -2905,13 +2905,13 @@ static void CheckTrainCollision(Vehicle 
 

	
 
static void *CheckVehicleAtSignal(Vehicle *v, void *data)
 
{
 
	Direction dir = *(Direction*)data;
 

	
 
	if (v->type == VEH_TRAIN && IsFrontEngine(v)) {
 
		DirDiff diff = ChangeDirDiff(DirDifference(v->direction, dir), DIRDIFF_90RIGHT);
 

	
 
		if (diff == DIRDIFF_90RIGHT || (v->cur_speed <= 5 && diff <= DIRDIFF_REVERSE)) return v;
 
	DiagDirection exitdir = *(DiagDirection *)data;
 

	
 
	/* front engine of a train, not inside wormhole or depot */
 
	if (v->type == VEH_TRAIN && IsFrontEngine(v) && (v->u.rail.track & TRACK_BIT_MASK) != 0) {
 
		if (v->cur_speed <= 5 && TrainExitDir(v->direction, v->u.rail.track) == exitdir) return v;
 
	}
 

	
 
	return NULL;
 
}
 

	
 
@@ -3004,11 +3004,13 @@ static void TrainController(Vehicle *v, 
 
							v->subspeed = 0;
 
							v->progress = 255 - 10;
 
							if (++v->load_unload_time_rem < _settings_game.pf.wait_twoway_signal * 73) {
 
								TileIndex o_tile = gp.new_tile + TileOffsByDiagDir(enterdir);
 
								Direction rdir = ReverseDir(dir);
 
								DiagDirection exitdir = TrackdirToExitdir(i);
 
								TileIndex o_tile = TileAddByDiagDir(gp.new_tile, exitdir);
 

	
 
								exitdir = ReverseDiagDir(exitdir);
 

	
 
								/* check if a train is waiting on the other side */
 
								if (VehicleFromPos(o_tile, &rdir, &CheckVehicleAtSignal) == NULL) return;
 
								if (VehicleFromPos(o_tile, &exitdir, &CheckVehicleAtSignal) == NULL) return;
 
							}
 
						}
 
						goto reverse_train_direction;
0 comments (0 inline, 0 general)