@@ -2416,13 +2416,13 @@ static VehicleEnterTileStatus VehicleEnt
} 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) {
@@ -1547,13 +1547,13 @@ static VehicleEnterTileStatus VehicleEnt
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);
} break;
@@ -951,31 +951,32 @@ uint8 CalcPercentVehicleFilled(const Veh
/* 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();
case VEH_SHIP:
InvalidateWindowClasses(WC_SHIPS_LIST);
Ship::From(v)->state = TRACK_BIT_DEPOT;
RecalcShipStuff(v);
Status change: