diff options
-rw-r--r-- | train_gui.c | 113 |
1 files changed, 57 insertions, 56 deletions
diff --git a/train_gui.c b/train_gui.c index eaa1e0b21..f724c028a 100644 --- a/train_gui.c +++ b/train_gui.c @@ -1097,12 +1097,10 @@ void ShowTrainViewWindow(const Vehicle *v) static void TrainDetailsCargoTab(const Vehicle *v, int x, int y) { - int num; - StringID str; - if (v->cargo_cap != 0) { - num = v->cargo_count; - str = STR_8812_EMPTY; + uint num = v->cargo_count; + StringID str = STR_8812_EMPTY; + if (num != 0) { SetDParam(0, v->cargo_type); SetDParam(1, num); @@ -1115,17 +1113,15 @@ static void TrainDetailsCargoTab(const Vehicle *v, int x, int y) static void TrainDetailsInfoTab(const Vehicle *v, int x, int y) { - const RailVehicleInfo *rvi = RailVehInfo(v->engine_type); - - if (!(rvi->flags & RVI_WAGON)) { + if (RailVehInfo(v->engine_type)->flags & RVI_WAGON) { + SetDParam(0, GetCustomEngineName(v->engine_type)); + SetDParam(1, v->value); + DrawString(x, y, STR_882D_VALUE, 0x10); + } else { SetDParam(0, GetCustomEngineName(v->engine_type)); SetDParam(1, v->build_year); SetDParam(2, v->value); DrawString(x, y, STR_882C_BUILT_VALUE, 0x10); - } else { - SetDParam(0, GetCustomEngineName(v->engine_type)); - SetDParam(1, v->value); - DrawString(x, y, STR_882D_VALUE, 0x10); } } @@ -1138,64 +1134,59 @@ static void TrainDetailsCapacityTab(const Vehicle *v, int x, int y) } } -typedef void TrainDetailsDrawerProc(const Vehicle *v, int x, int y); - -static TrainDetailsDrawerProc * const _train_details_drawer_proc[3] = { - TrainDetailsCargoTab, - TrainDetailsInfoTab, - TrainDetailsCapacityTab, -}; static void DrawTrainDetailsWindow(Window *w) { - const Vehicle *v, *u; - uint16 tot_cargo[NUM_CARGO][2]; // count total cargo ([0]-actual cargo, [1]-total cargo) - int i,num,x,y,sel; byte det_tab = WP(w, traindetails_d).tab; + const Vehicle* v; + const Vehicle* u; + AcceptedCargo act_cargo; + AcceptedCargo max_cargo; + uint i; + int num; + int x; + int y; + int sel; - /* Count number of vehicles */ num = 0; - - // det_tab == 3 <-- Total Cargo tab - if (det_tab == 3) // reset tot_cargo array to 0 values - memset(tot_cargo, 0, sizeof(tot_cargo)); - u = v = GetVehicle(w->window_number); - do { - if (det_tab != 3) - num++; - else { - tot_cargo[u->cargo_type][0] += u->cargo_count; - tot_cargo[u->cargo_type][1] += u->cargo_cap; + if (det_tab == 3) { // Total cargo tab + for (i = 0; i < lengthof(act_cargo); i++) { + act_cargo[i] = 0; + max_cargo[i] = 0; } - } while ((u = GetNextVehicle(u)) != NULL); - /* set scroll-amount seperately from counting, as to not - * compute num double for more carriages of the same type - */ - if (det_tab == 3) { + do { + act_cargo[u->cargo_type] += u->cargo_count; + max_cargo[u->cargo_type] += u->cargo_cap; + } while ((u = GetNextVehicle(u)) != NULL); + + /* Set scroll-amount seperately from counting, as to not compute num double + * for more carriages of the same type + */ for (i = 0; i != NUM_CARGO; i++) { - if (tot_cargo[i][1] > 0) // only count carriages that the train has - num++; + if (max_cargo[i] > 0) num++; // only count carriages that the train has } num++; // needs one more because first line is description string + } else { + do { + num++; + } while ((u = GetNextVehicle(u)) != NULL); } SetVScrollCount(w, num); w->disabled_state = 1 << (det_tab + 9); - if (v->owner != _local_player) - w->disabled_state |= (1 << 2); + if (v->owner != _local_player) w->disabled_state |= (1 << 2); - if (!_patches.servint_trains) // disable service-scroller when interval is set to disabled - w->disabled_state |= (1 << 6) | (1 << 7); + // disable service-scroller when interval is set to disabled + if (!_patches.servint_trains) w->disabled_state |= (1 << 6) | (1 << 7); SetDParam(0, v->string_id); SetDParam(1, v->unitnumber); DrawWindowWidgets(w); - num = v->age / 366; - SetDParam(1, num); + SetDParam(1, v->age / 366); x = 2; @@ -1230,6 +1221,9 @@ static void DrawTrainDetailsWindow(Window *w) for (;;) { if (--sel < 0 && sel >= -w->vscroll.cap) { int dx = 0; + int px; + int py; + u = v; do { PalSpriteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v); @@ -1237,23 +1231,30 @@ static void DrawTrainDetailsWindow(Window *w) dx += u->u.rail.cached_veh_length; u = u->next; } while (u != NULL && IsArticulatedPart(u)); - _train_details_drawer_proc[WP(w,traindetails_d).tab](v, x + WagonLengthToPixels(dx) + 2, y + 2); + + px = x + WagonLengthToPixels(dx) + 2; + py = y + 2; + switch (det_tab) { + default: NOT_REACHED(); + case 0: TrainDetailsCargoTab( v, px, py); break; + case 1: TrainDetailsInfoTab( v, px, py); break; + case 2: TrainDetailsCapacityTab(v, px, py); break; + } y += 14; } - if ((v = GetNextVehicle(v)) == NULL) - return; + v = GetNextVehicle(v); + if (v == NULL) return; } } else { // draw total cargo tab DrawString(x, y + 2, STR_013F_TOTAL_CAPACITY_TEXT, 0); for (i = 0; i != NUM_CARGO; i++) { - if (tot_cargo[i][1] > 0 && --sel < 0 && sel > -w->vscroll.cap) { + if (max_cargo[i] > 0 && --sel < 0 && sel > -w->vscroll.cap) { y += 14; - // STR_013F_TOTAL_CAPACITY :{LTBLUE}- {CARGO} ({SHORTCARGO}) - SetDParam(0, i); // {CARGO} #1 - SetDParam(1, tot_cargo[i][0]); // {CARGO} #2 - SetDParam(2, i); // {SHORTCARGO} #1 - SetDParam(3, tot_cargo[i][1]); // {SHORTCARGO} #2 + SetDParam(0, i); // {CARGO} #1 + SetDParam(1, act_cargo[i]); // {CARGO} #2 + SetDParam(2, i); // {SHORTCARGO} #1 + SetDParam(3, max_cargo[i]); // {SHORTCARGO} #2 DrawString(x, y + 2, STR_013F_TOTAL_CAPACITY, 0); } } |