Changeset - r12861:5309cab2b296
[Not reviewed]
master
0 3 0
rubidium - 15 years ago 2009-09-01 21:54:59
rubidium@openttd.org
(svn r17363) -Fix [FS#3163] (r16717): feed autoreplace the front of vehicles, otherwise it gets distracted and bails out
3 files changed with 5 insertions and 4 deletions:
0 comments (0 inline, 0 general)
src/rail_cmd.cpp
Show inline comments
 
@@ -2410,25 +2410,25 @@ static VehicleEnterTileStatus VehicleEnt
 

	
 
	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 VETSB_CANNOT_ENTER;
 
	} else if (_fractcoords_enter[dir] == fract_coord) {
 
		if (DiagDirToDir(ReverseDiagDir(dir)) == v->direction) {
 
			/* enter the depot */
 
			v->track = TRACK_BIT_DEPOT,
 
			v->vehstatus |= VS_HIDDEN; // hide it
 
			v->direction = ReverseDir(v->direction);
 
			if (v->Next() == NULL) VehicleEnterDepot(v);
 
			if (v->Next() == NULL) VehicleEnterDepot(v->First());
 
			v->tile = tile;
 

	
 
			InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
 
			return VETSB_ENTERED_WORMHOLE;
 
		}
 
	} 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->track = (DiagDirToAxis(dir) == AXIS_X ? TRACK_BIT_X : TRACK_BIT_Y);
 
			}
src/road_cmd.cpp
Show inline comments
 
@@ -1541,25 +1541,25 @@ static const byte _roadveh_enter_depot_d
 
static VehicleEnterTileStatus VehicleEnter_Road(Vehicle *v, TileIndex tile, int x, int y)
 
{
 
	switch (GetRoadTileType(tile)) {
 
		case ROAD_TILE_DEPOT: {
 
			if (v->type != VEH_ROAD) break;
 

	
 
			RoadVehicle *rv = RoadVehicle::From(v);
 
			if (rv->frame == RVC_DEPOT_STOP_FRAME &&
 
					_roadveh_enter_depot_dir[GetRoadDepotDirection(tile)] == rv->state) {
 
				rv->state = RVSB_IN_DEPOT;
 
				rv->vehstatus |= VS_HIDDEN;
 
				rv->direction = ReverseDir(rv->direction);
 
				if (rv->Next() == NULL) VehicleEnterDepot(rv);
 
				if (rv->Next() == NULL) VehicleEnterDepot(rv->First());
 
				rv->tile = tile;
 

	
 
				InvalidateWindowData(WC_VEHICLE_DEPOT, rv->tile);
 
				return VETSB_ENTERED_WORMHOLE;
 
			}
 
		} break;
 

	
 
		default: break;
 
	}
 
	return VETSB_CONTINUE;
 
}
 

	
src/vehicle.cpp
Show inline comments
 
@@ -945,43 +945,44 @@ uint8 CalcPercentVehicleFilled(const Veh
 
		}
 
	}
 

	
 
	/* Train without capacity */
 
	if (max == 0) return 100;
 

	
 
	/* Return the percentage */
 
	return (count * 100) / max;
 
}
 

	
 
void VehicleEnterDepot(Vehicle *v)
 
{
 
	/* Always work with the front of the vehicle */
 
	assert(v == v->First());
 

	
 
	switch (v->type) {
 
		case VEH_TRAIN: {
 
			Train *t = Train::From(v);
 
			InvalidateWindowClasses(WC_TRAINS_LIST);
 
			/* Clear path reservation */
 
			SetDepotReservation(t->tile, false);
 
			if (_settings_client.gui.show_track_reservation) MarkTileDirtyByTile(t->tile);
 

	
 
			if (!t->IsFrontEngine()) t = t->First();
 
			UpdateSignalsOnSegment(t->tile, INVALID_DIAGDIR, t->owner);
 
			t->load_unload_time_rem = 0;
 
			ClrBit(t->flags, VRF_TOGGLE_REVERSE);
 
			TrainConsistChanged(t, true);
 
			break;
 
		}
 

	
 
		case VEH_ROAD:
 
			InvalidateWindowClasses(WC_ROADVEH_LIST);
 
			if (!RoadVehicle::From(v)->IsRoadVehFront()) v = v->First();
 
			break;
 

	
 
		case VEH_SHIP:
 
			InvalidateWindowClasses(WC_SHIPS_LIST);
 
			Ship::From(v)->state = TRACK_BIT_DEPOT;
 
			RecalcShipStuff(v);
 
			break;
 

	
 
		case VEH_AIRCRAFT:
 
			InvalidateWindowClasses(WC_AIRCRAFT_LIST);
 
			HandleAircraftEnterHangar(Aircraft::From(v));
 
			break;
0 comments (0 inline, 0 general)