mirror of https://github.com/OpenTTD/OpenTTD
(svn r23773) -Change: [NewGRF] Update all cached train properties if a train vehicle enters a new railtype.
parent
7e78d15e58
commit
9232a2ef0c
|
@ -1658,7 +1658,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
/* Railtype changed, update trains as when entering different track */
|
/* Railtype changed, update trains as when entering different track */
|
||||||
for (Train **v = affected_trains.Begin(); v != affected_trains.End(); v++) {
|
for (Train **v = affected_trains.Begin(); v != affected_trains.End(); v++) {
|
||||||
(*v)->RailtypeChanged();
|
(*v)->ConsistChanged(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -530,6 +530,9 @@ void FixupTrainLengths()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Update all cached properties after moving the vehicle chain around. */
|
||||||
|
Train::From(v)->ConsistChanged(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,8 +116,6 @@ struct Train FINAL : public GroundVehicle<Train, VEH_TRAIN> {
|
||||||
|
|
||||||
void ConsistChanged(bool same_length);
|
void ConsistChanged(bool same_length);
|
||||||
|
|
||||||
void RailtypeChanged();
|
|
||||||
|
|
||||||
int UpdateSpeed();
|
int UpdateSpeed();
|
||||||
|
|
||||||
void UpdateAcceleration();
|
void UpdateAcceleration();
|
||||||
|
|
|
@ -112,20 +112,6 @@ void CheckTrainsLengths()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Update visual effect, power and acceleration caches.
|
|
||||||
* Called when a vehicle in the consist enters a different railtype.
|
|
||||||
*/
|
|
||||||
void Train::RailtypeChanged()
|
|
||||||
{
|
|
||||||
for (Train *u = this; u != NULL; u = u->Next()) {
|
|
||||||
/* The wagon-is-powered-state should not change, so the weight does not change. */
|
|
||||||
u->UpdateVisualEffect(false);
|
|
||||||
}
|
|
||||||
this->PowerChanged();
|
|
||||||
if (this->IsFrontEngine()) this->UpdateAcceleration();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Recalculates the cached stuff of a train. Should be called each time a vehicle is added
|
* Recalculates the cached stuff of a train. Should be called each time a vehicle is added
|
||||||
* to/removed from the chain, and when the game is loaded.
|
* to/removed from the chain, and when the game is loaded.
|
||||||
|
@ -1589,9 +1575,6 @@ void ReverseTrainSwapVeh(Train *v, int l, int r)
|
||||||
SwapTrainFlags(&a->gv_flags, &a->gv_flags);
|
SwapTrainFlags(&a->gv_flags, &a->gv_flags);
|
||||||
UpdateStatusAfterSwap(a);
|
UpdateStatusAfterSwap(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update power of the train in case tiles were different rail type. */
|
|
||||||
v->RailtypeChanged();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3246,7 +3229,7 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse)
|
||||||
v->tile = gp.new_tile;
|
v->tile = gp.new_tile;
|
||||||
|
|
||||||
if (GetTileRailType(gp.new_tile) != GetTileRailType(gp.old_tile)) {
|
if (GetTileRailType(gp.new_tile) != GetTileRailType(gp.old_tile)) {
|
||||||
v->First()->RailtypeChanged();
|
v->First()->ConsistChanged(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
v->track = chosen_track;
|
v->track = chosen_track;
|
||||||
|
|
Loading…
Reference in New Issue