@@ -3645,28 +3645,24 @@ static void TrainController(Vehicle *v,
/* Not inside depot */
if (IsFrontEngine(v) && !TrainCheckIfLineEnds(v)) return;
uint32 r = VehicleEnterTile(v, gp.new_tile, gp.x, gp.y);
if (HasBit(r, VETS_CANNOT_ENTER)) {
goto invalid_rail;
}
if (HasBit(r, VETS_ENTERED_STATION)) {
TrainEnterStation(v, r >> VETS_STATION_ID_OFFSET);
return;
if (v->Next() == NULL && IsRailDepotTile(v->tile) && HasBit(r, VETS_ENTERED_WORMHOLE)) {
SetDepotWaypointReservation(v->tile, false);
if (_settings_client.gui.show_track_reservation) MarkTileDirtyByTile(v->tile);
if (v->current_order.IsType(OT_LEAVESTATION)) {
v->current_order.Free();
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
} else {
/* A new tile is about to be entered. */
/* Determine what direction we're entering the new tile from */
Direction dir = GetNewVehicleDirectionByTile(gp.new_tile, gp.old_tile);
enterdir = DirToDiagDir(dir);
@@ -1549,24 +1549,28 @@ uint8 CalcPercentVehicleFilled(const Veh
/* Train without capacity */
if (max == 0) return 100;
/* Return the percentage */
return (count * 100) / max;
void VehicleEnterDepot(Vehicle *v)
{
switch (v->type) {
case VEH_TRAIN:
InvalidateWindowClasses(WC_TRAINS_LIST);
/* Clear path reservation */
if (!IsFrontEngine(v)) v = v->First();
UpdateSignalsOnSegment(v->tile, INVALID_DIAGDIR, v->owner);
v->load_unload_time_rem = 0;
ClrBit(v->u.rail.flags, VRF_TOGGLE_REVERSE);
TrainConsistChanged(v, true);
break;
case VEH_ROAD:
InvalidateWindowClasses(WC_ROADVEH_LIST);
if (!IsRoadVehFront(v)) v = v->First();
Status change: