(svn r11845) -Codechange: simplify train collision detection a bit
authorsmatz
Sun, 13 Jan 2008 23:53:33 +0000
changeset 8777 51c8adbd661b
parent 8776 4a65bbcd6935
child 8778 787d7fe77e9c
(svn r11845) -Codechange: simplify train collision detection a bit
src/train_cmd.cpp
--- a/src/train_cmd.cpp	Sun Jan 13 22:27:06 2008 +0000
+++ b/src/train_cmd.cpp	Sun Jan 13 23:53:33 2008 +0000
@@ -2805,7 +2805,6 @@
 
 struct TrainCollideChecker {
 	Vehicle *v;
-	const Vehicle *v_skip;
 	uint num;
 };
 
@@ -2813,21 +2812,17 @@
 {
 	TrainCollideChecker* tcc = (TrainCollideChecker*)data;
 
-	if (v != tcc->v &&
-			v != tcc->v_skip &&
-			v->type == VEH_TRAIN &&
-			v->u.rail.track != TRACK_BIT_DEPOT &&
+	if (v->type != VEH_TRAIN) return NULL;
+
+	/* get first vehicle now to make most usual checks faster */
+	Vehicle *coll = v->First();
+
+	/* can't collide with own wagons && can't crash in depot && not too far */
+	if (coll != tcc->v && v->u.rail.track != TRACK_BIT_DEPOT &&
 			abs(v->z_pos - tcc->v->z_pos) < 6 &&
 			abs(v->x_pos - tcc->v->x_pos) < 6 &&
 			abs(v->y_pos - tcc->v->y_pos) < 6 ) {
 
-		Vehicle *coll = v->First();
-
-		/* it can't collide with its own wagons */
-		if (tcc->v == coll ||
-			(tcc->v->u.rail.track == TRACK_BIT_WORMHOLE && (tcc->v->direction & 2) != (v->direction & 2)))
-			return NULL;
-
 		/* two drivers + passengers killed in train tcc->v (if it was not crashed already) */
 		if (!(tcc->v->vehstatus & VS_CRASHED)) {
 			tcc->num += 2 + CountPassengersInTrain(tcc->v);
@@ -2859,7 +2854,6 @@
 
 	TrainCollideChecker tcc;
 	tcc.v = v;
-	tcc.v_skip = v->Next();
 	tcc.num = 0;
 
 	/* find colliding vehicles */