(svn r11845) -Codechange: simplify train collision detection a bit

This commit is contained in:
smatz 2008-01-13 23:53:33 +00:00
parent 7d2d4314ec
commit bfc4d80c8e
1 changed files with 7 additions and 13 deletions

View File

@ -2805,7 +2805,6 @@ static uint CountPassengersInTrain(const Vehicle* v)
struct TrainCollideChecker {
Vehicle *v;
const Vehicle *v_skip;
uint num;
};
@ -2813,21 +2812,17 @@ static void *FindTrainCollideEnum(Vehicle *v, void *data)
{
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 @@ static void CheckTrainCollision(Vehicle *v)
TrainCollideChecker tcc;
tcc.v = v;
tcc.v_skip = v->Next();
tcc.num = 0;
/* find colliding vehicles */