|
@@ -1985,49 +1985,49 @@ static uint32 VehicleEnter_Track(Vehicle
|
|
|
dir = GetRailDepotDirection(tile);
|
|
|
|
|
|
/* calculate the point where the following wagon should be activated */
|
|
|
/* this depends on the length of the current vehicle */
|
|
|
length = v->u.rail.cached_veh_length;
|
|
|
|
|
|
fract_coord_leave =
|
|
|
((_fractcoords_enter[dir] & 0x0F) + // x
|
|
|
(length + 1) * _deltacoord_leaveoffset[dir]) +
|
|
|
(((_fractcoords_enter[dir] >> 4) + // y
|
|
|
((length + 1) * _deltacoord_leaveoffset[dir+4])) << 4);
|
|
|
|
|
|
fract_coord = (x & 0xF) + ((y & 0xF) << 4);
|
|
|
|
|
|
if (_fractcoords_behind[dir] == fract_coord) {
|
|
|
/* make sure a train is not entering the tile from behind */
|
|
|
return 8;
|
|
|
} else if (_fractcoords_enter[dir] == fract_coord) {
|
|
|
if (DiagDirToDir(ReverseDiagDir(dir)) == v->direction) {
|
|
|
/* enter the depot */
|
|
|
v->u.rail.track = 0x80,
|
|
|
v->vehstatus |= VS_HIDDEN; /* hide it */
|
|
|
v->direction = ReverseDir(v->direction);
|
|
|
if (v->next == NULL)
|
|
|
TrainEnterDepot(v, tile);
|
|
|
VehicleEnterDepot(v);
|
|
|
v->tile = tile;
|
|
|
InvalidateWindow(WC_VEHICLE_DEPOT, tile);
|
|
|
return 4;
|
|
|
}
|
|
|
} else if (fract_coord_leave == fract_coord) {
|
|
|
if (DiagDirToDir(dir) == v->direction) {
|
|
|
/* leave the depot? */
|
|
|
if ((v = v->next) != NULL) {
|
|
|
v->vehstatus &= ~VS_HIDDEN;
|
|
|
v->u.rail.track = (DiagDirToAxis(dir) == AXIS_X ? 1 : 2);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
|
|
|
const TileTypeProcs _tile_type_rail_procs = {
|
|
|
DrawTile_Track, /* draw_tile_proc */
|
|
|
GetSlopeZ_Track, /* get_slope_z_proc */
|
|
|
ClearTile_Track, /* clear_tile_proc */
|
|
|
GetAcceptedCargo_Track, /* get_accepted_cargo_proc */
|
|
|
GetTileDesc_Track, /* get_tile_desc_proc */
|