Cache whether a train may have a depot or bridge speed restriction
This commit is contained in:
@@ -591,15 +591,22 @@ int Train::GetCurrentMaxSpeed() const
|
||||
}
|
||||
}
|
||||
|
||||
for (const Train *u = this; u != NULL; u = u->Next()) {
|
||||
if (_settings_game.vehicle.train_acceleration_model == AM_REALISTIC && u->track == TRACK_BIT_DEPOT) {
|
||||
max_speed = min(max_speed, 61);
|
||||
break;
|
||||
}
|
||||
if (HasBit(this->flags, VRF_CONSIST_SPEED_REDUCTION)) {
|
||||
ClrBit(const_cast<Train *>(this)->flags, VRF_CONSIST_SPEED_REDUCTION);
|
||||
for (const Train *u = this; u != NULL; u = u->Next()) {
|
||||
if (u->track == TRACK_BIT_DEPOT) {
|
||||
SetBit(const_cast<Train *>(this)->flags, VRF_CONSIST_SPEED_REDUCTION);
|
||||
if (_settings_game.vehicle.train_acceleration_model == AM_REALISTIC) {
|
||||
max_speed = min(max_speed, 61);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Vehicle is on the middle part of a bridge. */
|
||||
if (u->track & TRACK_BIT_WORMHOLE && !(u->vehstatus & VS_HIDDEN)) {
|
||||
max_speed = min(max_speed, GetBridgeSpec(GetBridgeType(u->tile))->speed);
|
||||
/* Vehicle is on the middle part of a bridge. */
|
||||
if (u->track & TRACK_BIT_WORMHOLE && !(u->vehstatus & VS_HIDDEN)) {
|
||||
SetBit(const_cast<Train *>(this)->flags, VRF_CONSIST_SPEED_REDUCTION);
|
||||
max_speed = min(max_speed, GetBridgeSpec(GetBridgeType(u->tile))->speed);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -945,6 +952,7 @@ CommandCost CmdBuildRailVehicle(TileIndex tile, DoCommandFlag flags, const Engin
|
||||
v->y_pos = y;
|
||||
v->z_pos = GetSlopePixelZ(x, y);
|
||||
v->track = TRACK_BIT_DEPOT;
|
||||
SetBit(v->flags, VRF_CONSIST_SPEED_REDUCTION);
|
||||
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
||||
v->spritenum = rvi->image_index;
|
||||
v->cargo_type = e->GetDefaultCargoType();
|
||||
@@ -5167,6 +5175,7 @@ Train* CmdBuildVirtualRailWagon(const Engine *e)
|
||||
|
||||
v->owner = _current_company;
|
||||
v->track = TRACK_BIT_DEPOT;
|
||||
SetBit(v->flags, VRF_CONSIST_SPEED_REDUCTION);
|
||||
v->vehstatus = VS_HIDDEN | VS_DEFPAL;
|
||||
|
||||
v->SetWagon();
|
||||
@@ -5238,6 +5247,7 @@ Train* CmdBuildVirtualRailVehicle(EngineID eid, bool lax_engine_check, StringID
|
||||
v->tile = 0; // INVALID_TILE;
|
||||
v->owner = _current_company;
|
||||
v->track = TRACK_BIT_DEPOT;
|
||||
SetBit(v->flags, VRF_CONSIST_SPEED_REDUCTION);
|
||||
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
||||
v->spritenum = rvi->image_index;
|
||||
v->cargo_type = e->GetDefaultCargoType();
|
||||
|
Reference in New Issue
Block a user