src/roadveh_cmd.cpp
changeset 9775 22e256c3bf46
parent 9628 981ba3800c35
child 9921 4dfac3c48507
equal deleted inserted replaced
9774:190734cb1113 9775:22e256c3bf46
   628 	} else if (v->u.road.crashed_ctr >= 2220 && !(v->tick_counter & 0x1F)) {
   628 	} else if (v->u.road.crashed_ctr >= 2220 && !(v->tick_counter & 0x1F)) {
   629 		DeleteLastRoadVeh(v);
   629 		DeleteLastRoadVeh(v);
   630 	}
   630 	}
   631 }
   631 }
   632 
   632 
   633 static void* EnumCheckRoadVehCrashTrain(Vehicle* v, void* data)
   633 static Vehicle *EnumCheckRoadVehCrashTrain(Vehicle *v, void *data)
   634 {
   634 {
   635 	const Vehicle* u = (Vehicle*)data;
   635 	const Vehicle *u = (Vehicle*)data;
   636 
   636 
   637 	return
   637 	return
   638 		v->type == VEH_TRAIN &&
   638 		v->type == VEH_TRAIN &&
   639 		abs(v->z_pos - u->z_pos) <= 6 &&
   639 		abs(v->z_pos - u->z_pos) <= 6 &&
   640 		abs(v->x_pos - u->x_pos) <= 4 &&
   640 		abs(v->x_pos - u->x_pos) <= 4 &&
   763 	int y;
   763 	int y;
   764 	const Vehicle* veh;
   764 	const Vehicle* veh;
   765 	Direction dir;
   765 	Direction dir;
   766 };
   766 };
   767 
   767 
   768 static void* EnumCheckRoadVehClose(Vehicle *v, void* data)
   768 static Vehicle *EnumCheckRoadVehClose(Vehicle *v, void *data)
   769 {
   769 {
   770 	static const int8 dist_x[] = { -4, -8, -4, -1, 4, 8, 4, 1 };
   770 	static const int8 dist_x[] = { -4, -8, -4, -1, 4, 8, 4, 1 };
   771 	static const int8 dist_y[] = { -4, -1, 4, 8, 4, 1, -4, -8 };
   771 	static const int8 dist_y[] = { -4, -1, 4, 8, 4, 1, -4, -8 };
   772 
   772 
   773 	const RoadVehFindData* rvf = (RoadVehFindData*)data;
   773 	const RoadVehFindData *rvf = (RoadVehFindData*)data;
   774 
   774 
   775 	short x_diff = v->x_pos - rvf->x;
   775 	short x_diff = v->x_pos - rvf->x;
   776 	short y_diff = v->y_pos - rvf->y;
   776 	short y_diff = v->y_pos - rvf->y;
   777 
   777 
   778 	return
   778 	return
   799 	rvf.x = x;
   799 	rvf.x = x;
   800 	rvf.y = y;
   800 	rvf.y = y;
   801 	rvf.dir = dir;
   801 	rvf.dir = dir;
   802 	rvf.veh = v;
   802 	rvf.veh = v;
   803 	if (front->u.road.state == RVSB_WORMHOLE) {
   803 	if (front->u.road.state == RVSB_WORMHOLE) {
   804 		u = (Vehicle*)VehicleFromPos(v->tile, &rvf, EnumCheckRoadVehClose);
   804 		u = VehicleFromPos(v->tile, &rvf, EnumCheckRoadVehClose);
   805 		if (u == NULL) u = (Vehicle*)VehicleFromPos(GetOtherTunnelBridgeEnd(v->tile), &rvf, EnumCheckRoadVehClose);
   805 		if (u == NULL) u = (Vehicle*)VehicleFromPos(GetOtherTunnelBridgeEnd(v->tile), &rvf, EnumCheckRoadVehClose);
   806 	} else {
   806 	} else {
   807 		u = (Vehicle*)VehicleFromPosXY(x, y, &rvf, EnumCheckRoadVehClose);
   807 		u = VehicleFromPosXY(x, y, &rvf, EnumCheckRoadVehClose);
   808 	}
   808 	}
   809 
   809 
   810 	/* This code protects a roadvehicle from being blocked for ever
   810 	/* This code protects a roadvehicle from being blocked for ever
   811 	 * If more than 1480 / 74 days a road vehicle is blocked, it will
   811 	 * If more than 1480 / 74 days a road vehicle is blocked, it will
   812 	 * drive just through it. The ultimate backup-code of TTD.
   812 	 * drive just through it. The ultimate backup-code of TTD.
   911 	const Vehicle* v;
   911 	const Vehicle* v;
   912 	TileIndex tile;
   912 	TileIndex tile;
   913 	Trackdir trackdir;
   913 	Trackdir trackdir;
   914 };
   914 };
   915 
   915 
   916 static void* EnumFindVehBlockingOvertake(Vehicle* v, void* data)
   916 static Vehicle *EnumFindVehBlockingOvertake(Vehicle *v, void* data)
   917 {
   917 {
   918 	const OvertakeData* od = (OvertakeData*)data;
   918 	const OvertakeData* od = (OvertakeData*)data;
   919 
   919 
   920 	return
   920 	return
   921 		v->type == VEH_ROAD && v->First() == v && v != od->u && v != od->v ?
   921 		v->type == VEH_ROAD && v->First() == v && v != od->u && v != od->v ?