mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r11845) -Codechange: simplify train collision detection a bit
This commit is contained in:
parent
7d2d4314ec
commit
bfc4d80c8e
|
@ -2805,7 +2805,6 @@ static uint CountPassengersInTrain(const Vehicle* v)
|
||||||
|
|
||||||
struct TrainCollideChecker {
|
struct TrainCollideChecker {
|
||||||
Vehicle *v;
|
Vehicle *v;
|
||||||
const Vehicle *v_skip;
|
|
||||||
uint num;
|
uint num;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2813,21 +2812,17 @@ static void *FindTrainCollideEnum(Vehicle *v, void *data)
|
||||||
{
|
{
|
||||||
TrainCollideChecker* tcc = (TrainCollideChecker*)data;
|
TrainCollideChecker* tcc = (TrainCollideChecker*)data;
|
||||||
|
|
||||||
if (v != tcc->v &&
|
if (v->type != VEH_TRAIN) return NULL;
|
||||||
v != tcc->v_skip &&
|
|
||||||
v->type == VEH_TRAIN &&
|
/* get first vehicle now to make most usual checks faster */
|
||||||
v->u.rail.track != TRACK_BIT_DEPOT &&
|
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->z_pos - tcc->v->z_pos) < 6 &&
|
||||||
abs(v->x_pos - tcc->v->x_pos) < 6 &&
|
abs(v->x_pos - tcc->v->x_pos) < 6 &&
|
||||||
abs(v->y_pos - tcc->v->y_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) */
|
/* two drivers + passengers killed in train tcc->v (if it was not crashed already) */
|
||||||
if (!(tcc->v->vehstatus & VS_CRASHED)) {
|
if (!(tcc->v->vehstatus & VS_CRASHED)) {
|
||||||
tcc->num += 2 + CountPassengersInTrain(tcc->v);
|
tcc->num += 2 + CountPassengersInTrain(tcc->v);
|
||||||
|
@ -2859,7 +2854,6 @@ static void CheckTrainCollision(Vehicle *v)
|
||||||
|
|
||||||
TrainCollideChecker tcc;
|
TrainCollideChecker tcc;
|
||||||
tcc.v = v;
|
tcc.v = v;
|
||||||
tcc.v_skip = v->Next();
|
|
||||||
tcc.num = 0;
|
tcc.num = 0;
|
||||||
|
|
||||||
/* find colliding vehicles */
|
/* find colliding vehicles */
|
||||||
|
|
Loading…
Reference in New Issue