diff options
author | celestar <celestar@openttd.org> | 2005-02-20 07:47:42 +0000 |
---|---|---|
committer | celestar <celestar@openttd.org> | 2005-02-20 07:47:42 +0000 |
commit | 6154175dc1f1eac4fd769f600b9ff719be93f289 (patch) | |
tree | 40d8347f083126ca5ae7aed3ce32d172c9544f7f | |
parent | 05490e0556f8055571ef5f26590551debe26decd (diff) | |
download | openttd-6154175dc1f1eac4fd769f600b9ff719be93f289.tar.xz |
(svn r1891) -Fix: [ 1143587 ] carriages of newgrfs can be refitted again
-rw-r--r-- | train_cmd.c | 4 | ||||
-rw-r--r-- | train_gui.c | 21 |
2 files changed, 21 insertions, 4 deletions
diff --git a/train_cmd.c b/train_cmd.c index 9443ff93d..d59fd30e9 100644 --- a/train_cmd.c +++ b/train_cmd.c @@ -841,8 +841,12 @@ int32 CmdMoveRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2) if (dst_head->subtype == TS_Front_Engine) UpdateTrainAcceleration(dst_head); InvalidateWindow(WC_VEHICLE_DETAILS, dst_head->index); + /* Update the refit button */ + InvalidateWindowWidget(WC_VEHICLE_VIEW, dst_head->index, 12); } + /* I added this to so that the refit buttons get updated */ + InvalidateWindowWidget(WC_VEHICLE_VIEW, src_head->index, 12); InvalidateWindow(WC_VEHICLE_DEPOT, src_head->tile); RebuildVehicleLists(); } diff --git a/train_gui.c b/train_gui.c index f3809421a..b477cf25b 100644 --- a/train_gui.c +++ b/train_gui.c @@ -809,16 +809,29 @@ static void TrainViewWndProc(Window *w, WindowEvent *e) { switch(e->event) { case WE_PAINT: { - Vehicle *v; + Vehicle *v, *u; StringID str; v = GetVehicle(w->window_number); w->disabled_state = (v->owner == _local_player) ? 0 : 0x380; - if (v->cargo_cap == 0) { - //we cannot refit this engine - SETBIT(w->disabled_state, 12); + SETBIT(w->disabled_state, 12); + + /* See if any carriage can be refitted */ + for ( u = v; u != NULL; u = u->next) { + if (_engine_refit_masks[u->engine_type] != 0) { + CLRBIT(w->disabled_state, 12); + /* We have a refittable carriage, bail out */ + break; + } + } + + /* Above code doesn't seem to handle non-newgrf engines, do it separately + TODO: handle engines which are NOT the head of the train, but don't break wagons */ + if (v->cargo_cap != 0) { + /* we can refit this engine */ + CLRBIT(w->disabled_state, 12); } /* draw widgets & caption */ |