<URL: http://bugs.freeciv.org/Ticket/Display.html?id=40763 >
> if the upkeep for all units is calculated each turn, this information can > be used for the economic report > > depends on ticket 40619, 40759 > > compile tested and also with a short game update the clients to use the upkeep information saved in the unit struct. At the moment the gold upkeep is not displayed correct (only tested with gtk-2.0), but the overall value (the sum in the balance) is calculated correct. In the next days I will not have much time to look into this ...
diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/gui-gtk-2.0/citydlg.c freeciv-2.1.99svn15584.gold5//client/gui-gtk-2.0/citydlg.c --- freeciv-2.1.99svn15584.gold4/client/gui-gtk-2.0/citydlg.c 2009-02-01 19:26:51.000000000 +0100 +++ freeciv-2.1.99svn15584.gold5//client/gui-gtk-2.0/citydlg.c 2009-04-13 21:06:00.530500295 +0200 @@ -1644,14 +1644,8 @@ struct unit_node_vector *nodes; int n, m, i; char buf[30]; - int free_upkeep[O_COUNT]; int free_unhappy = get_city_bonus(pdialog->pcity, EFT_MAKE_CONTENT_MIL); - output_type_iterate(o) { - free_upkeep[o] = get_city_output_bonus(pdialog->pcity, get_output_type(o), - EFT_UNIT_UPKEEP_FREE_PER_CITY); - } output_type_iterate_end; - if (NULL != client.conn.playing && city_owner(pdialog->pcity) != client.conn.playing) { units = pdialog->pcity->info_units_supported; @@ -1711,11 +1705,8 @@ i = 0; unit_list_iterate(units, punit) { struct unit_node *pnode; - int upkeep_cost[O_COUNT]; int happy_cost = city_unit_unhappiness(punit, &free_unhappy); - city_unit_upkeep(punit, upkeep_cost, free_upkeep); - pnode = unit_node_vector_get(nodes, i); if (pnode) { GtkWidget *cmd, *pix; @@ -1725,7 +1716,8 @@ gtk_pixcomm_freeze(GTK_PIXCOMM(pix)); put_unit_gpixmap(punit, GTK_PIXCOMM(pix)); - put_unit_gpixmap_city_overlays(punit, GTK_PIXCOMM(pix), upkeep_cost, happy_cost); + put_unit_gpixmap_city_overlays(punit, GTK_PIXCOMM(pix), punit->upkeep, + happy_cost); gtk_pixcomm_thaw(GTK_PIXCOMM(pix)); g_signal_handlers_disconnect_matched(cmd, diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/gui-gtk-2.0/repodlgs.c freeciv-2.1.99svn15584.gold5//client/gui-gtk-2.0/repodlgs.c --- freeciv-2.1.99svn15584.gold4/client/gui-gtk-2.0/repodlgs.c 2009-01-23 18:28:25.000000000 +0100 +++ freeciv-2.1.99svn15584.gold5//client/gui-gtk-2.0/repodlgs.c 2009-04-13 21:06:00.534498228 +0200 @@ -1202,7 +1202,7 @@ { struct repoinfo { int active_count; - int upkeep[O_MAX]; + int upkeep[O_LAST]; int building_count; }; @@ -1222,23 +1222,14 @@ memset(unitarray, '\0', sizeof(unitarray)); city_list_iterate(client.conn.playing->cities, pcity) { - int free_upkeep[O_COUNT]; - - output_type_iterate(o) { - free_upkeep[o] = get_city_output_bonus(pcity, get_output_type(o), - EFT_UNIT_UPKEEP_FREE_PER_CITY); - } output_type_iterate_end; - unit_list_iterate(pcity->units_supported, punit) { - int upkeep_cost[O_COUNT]; Unit_type_id uti = utype_index(unit_type(punit)); - city_unit_upkeep(punit, upkeep_cost, free_upkeep); (unitarray[uti].active_count)++; if (punit->homecity) { - output_type_iterate(o) { - unitarray[uti].upkeep[o] += upkeep_cost[o]; - } output_type_iterate_end; + output_type_iterate(o) { + unitarray[uti].upkeep[o] += punit->upkeep[o]; + } output_type_iterate_end; } } unit_list_iterate_end; } city_list_iterate_end; diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/gui-sdl/citydlg.c freeciv-2.1.99svn15584.gold5//client/gui-sdl/citydlg.c --- freeciv-2.1.99svn15584.gold4/client/gui-sdl/citydlg.c 2009-01-10 20:17:48.000000000 +0100 +++ freeciv-2.1.99svn15584.gold5//client/gui-sdl/citydlg.c 2009-04-13 21:06:00.538498675 +0200 @@ -616,9 +616,7 @@ int i, step; SDL_Rect src_rect, dest; SDL_Surface *pSurf, *pZoomed; - - int upkeep_cost[O_COUNT]; - int free_upkeep[O_COUNT]; + int free_unhappy; int happy_cost; @@ -642,16 +640,9 @@ free_unhappy = get_city_bonus(pCityDlg->pCity, EFT_MAKE_CONTENT_MIL); happy_cost = city_unit_unhappiness(pUnit, &free_unhappy); - - output_type_iterate(o) { - free_upkeep[o] = get_city_output_bonus(pCityDlg->pCity, get_output_type(o), - EFT_UNIT_UPKEEP_FREE_PER_CITY); - } output_type_iterate_end; - - city_unit_upkeep(pUnit, upkeep_cost, free_upkeep); - i = upkeep_cost[O_SHIELD] + upkeep_cost[O_FOOD] + - upkeep_cost[O_GOLD] + happy_cost; + i = pUnit->upkeep[O_SHIELD] + pUnit->upkeep[O_FOOD] + + pUnit->upkeep[O_GOLD] + happy_cost; if (i * pIcons->pFood->w > pSurf->w / 2) { step = (pSurf->w / 2 - pIcons->pFood->w) / (i - 1); @@ -662,17 +653,17 @@ dest.y = pSurf->h - pIcons->pFood->h - adj_size(2); dest.x = pSurf->w / 8; - for (i = 0; i < upkeep_cost[O_SHIELD]; i++) { + for (i = 0; i < pUnit->upkeep[O_SHIELD]; i++) { alphablit(pIcons->pShield, NULL, pSurf, &dest); dest.x += step; } - for (i = 0; i < upkeep_cost[O_FOOD]; i++) { + for (i = 0; i < pUnit->upkeep[O_FOOD]; i++) { alphablit(pIcons->pFood, NULL, pSurf, &dest); dest.x += step; } - for (i = 0; i < upkeep_cost[O_GOLD]; i++) { + for (i = 0; i < pUnit->upkeep[O_GOLD]; i++) { alphablit(pIcons->pCoin, NULL, pSurf, &dest); dest.x += step; } diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/gui-sdl/repodlgs.c freeciv-2.1.99svn15584.gold5//client/gui-sdl/repodlgs.c --- freeciv-2.1.99svn15584.gold4/client/gui-sdl/repodlgs.c 2009-01-10 20:17:48.000000000 +0100 +++ freeciv-2.1.99svn15584.gold5//client/gui-sdl/repodlgs.c 2009-04-13 21:06:00.542498283 +0200 @@ -58,50 +58,37 @@ /* ===================================================================== */ static struct ADVANCED_DLG *pUnitsDlg = NULL; static struct SMALL_DLG *pUnits_Upg_Dlg = NULL; - + struct units_entry { int active_count; - int upkeep_shield; - int upkeep_food; - int upkeep_gold; + int upkeep[O_LAST]; int building_count; int soonest_completions; }; static void get_units_report_data(struct units_entry *entries, - struct units_entry *total) + struct units_entry *total) { int time_to_build; - int upkeep_cost[O_COUNT]; - int free_upkeep[O_COUNT]; memset(entries, '\0', U_LAST * sizeof(struct units_entry)); memset(total, '\0', sizeof(struct units_entry)); for(time_to_build = 0; time_to_build < U_LAST; time_to_build++) { entries[time_to_build].soonest_completions = FC_INFINITY; } + unit_list_iterate(client.conn.playing->units, pUnit) { Unit_type_id uti = utype_index(unit_type(pUnit)); (entries[uti].active_count)++; (total->active_count)++; if (pUnit->homecity) { output_type_iterate(o) { - free_upkeep[o] = get_city_output_bonus(game_find_city_by_number(pUnit->homecity), - get_output_type(o), EFT_UNIT_UPKEEP_FREE_PER_CITY); + entries[uti].upkeep[o] += punit->upkeep[o]; } output_type_iterate_end; - - city_unit_upkeep(pUnit, upkeep_cost, free_upkeep); - - entries[uti].upkeep_shield += upkeep_cost[O_SHIELD]; - total->upkeep_shield += upkeep_cost[O_SHIELD]; - entries[uti].upkeep_food += upkeep_cost[O_FOOD]; - total->upkeep_food += upkeep_cost[O_FOOD]; - entries[uti].upkeep_gold += upkeep_cost[O_GOLD]; - total->upkeep_gold += upkeep_cost[O_GOLD]; } } unit_list_iterate_end; - + city_list_iterate(client.conn.playing->cities, pCity) { if (VUT_UTYPE == pCity->production.kind) { struct unit_type *pUnitType = pCity->production.value.utype; @@ -405,7 +392,7 @@ pBuf->size.w = pText1->w + adj_size(6); add_to_gui_list(ID_LABEL, pBuf); /* ---------------------------------------------- */ - my_snprintf(cBuf, sizeof(cBuf), "%d", total->upkeep_shield); + my_snprintf(cBuf, sizeof(cBuf), "%d", total->upkeep[O_SHIELD]); pStr = create_str16_from_char(cBuf, adj_font(10)); pStr->style |= (TTF_STYLE_BOLD|SF_CENTER); @@ -415,7 +402,7 @@ pBuf->size.w = pText1->w; add_to_gui_list(ID_LABEL, pBuf); /* ---------------------------------------------- */ - my_snprintf(cBuf, sizeof(cBuf), "%d", total->upkeep_food); + my_snprintf(cBuf, sizeof(cBuf), "%d", total->upkeep[O_FOOD]); pStr = create_str16_from_char(cBuf, adj_font(10)); pStr->style |= (TTF_STYLE_BOLD|SF_CENTER); @@ -425,7 +412,7 @@ pBuf->size.w = pText1->w; add_to_gui_list(ID_LABEL, pBuf); /* ---------------------------------------------- */ - my_snprintf(cBuf, sizeof(cBuf), "%d", total->upkeep_gold); + my_snprintf(cBuf, sizeof(cBuf), "%d", total->upkeep[O_GOLD]); pStr = create_str16_from_char(cBuf, adj_font(10)); pStr->style |= (TTF_STYLE_BOLD|SF_CENTER); @@ -498,7 +485,7 @@ add_to_gui_list(MAX_ID - utype_number(i), pBuf); /* shield upkeep */ - my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep_shield); + my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep[O_SHIELD]); pStr = create_str16_from_char(cBuf, adj_font(10)); pStr->style |= SF_CENTER; pBuf = create_iconlabel(NULL, pWindow->dst, pStr, @@ -511,7 +498,7 @@ add_to_gui_list(MAX_ID - utype_number(i), pBuf); /* food upkeep */ - my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep_food); + my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep[O_FOOD]); pStr = create_str16_from_char(cBuf, adj_font(10)); pStr->style |= SF_CENTER; pBuf = create_iconlabel(NULL, pWindow->dst, pStr, @@ -525,7 +512,7 @@ add_to_gui_list(MAX_ID - utype_number(i), pBuf); /* gold upkeep */ - my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep_gold); + my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep[O_GOLD]); pStr = create_str16_from_char(cBuf, adj_font(10)); pStr->style |= SF_CENTER; pBuf = create_iconlabel(NULL, pWindow->dst, pStr, @@ -912,15 +899,15 @@ copy_chars_to_string16(pBuf->string16, cBuf); pBuf = pBuf->prev; /* shield upkeep */ - my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep_shield); + my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep[O_SHIELD]); copy_chars_to_string16(pBuf->string16, cBuf); pBuf = pBuf->prev; /* food upkeep */ - my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep_food); + my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep[O_FOOD]); copy_chars_to_string16(pBuf->string16, cBuf); pBuf = pBuf->prev; /* gold upkeep */ - my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep_gold); + my_snprintf(cBuf, sizeof(cBuf), "%d", units[utype_index(i)].upkeep[O_GOLD]); copy_chars_to_string16(pBuf->string16, cBuf); pBuf = pBuf->prev; /* building */ @@ -994,12 +981,12 @@ /* total shields cost */ pBuf = pBuf->prev; - my_snprintf(cBuf, sizeof(cBuf), "%d", units_total.upkeep_shield); + my_snprintf(cBuf, sizeof(cBuf), "%d", units_total.upkeep[O_SHIELD]); copy_chars_to_string16(pBuf->string16, cBuf); /* total food cost widget */ pBuf = pBuf->prev; - my_snprintf(cBuf, sizeof(cBuf), "%d", units_total.upkeep_food); + my_snprintf(cBuf, sizeof(cBuf), "%d", units_total.upkeep[O_FOOD]); copy_chars_to_string16(pBuf->string16, cBuf); /* total building count */ diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/gui-win32/citydlg.c freeciv-2.1.99svn15584.gold5//client/gui-win32/citydlg.c --- freeciv-2.1.99svn15584.gold4/client/gui-win32/citydlg.c 2009-01-10 20:17:43.000000000 +0100 +++ freeciv-2.1.99svn15584.gold5//client/gui-win32/citydlg.c 2009-04-13 21:06:00.546497892 +0200 @@ -350,7 +350,6 @@ int i; struct unit_list *plist; struct canvas store; - int free_upkeep[O_COUNT]; int free_unhappy; store.type = CANVAS_DC; @@ -361,49 +360,45 @@ free_unhappy = get_city_bonus(pdialog->pcity, EFT_MAKE_CONTENT_MIL); - output_type_iterate(o) { - free_upkeep[o] = get_city_output_bonus(pdialog->pcity, get_output_type(o), - EFT_UNIT_UPKEEP_FREE_PER_CITY); - } output_type_iterate_end; - if (city_owner(pdialog->pcity) != client.conn.playing) { plist = pdialog->pcity->info_units_supported; } else { plist = pdialog->pcity->units_supported; - } - - for(i = 0; i < NUM_UNITS_SHOWN; i++) { + } + + for(i = 0; i < NUM_UNITS_SHOWN; i++) { RECT rc; - pdialog->support_unit_ids[i]=0; + pdialog->support_unit_ids[i]=0; rc.top=pdialog->supported_y; - rc.left=pdialog->pop_x+i*(tileset_small_sprite_width(tileset)+tileset_tile_width(tileset)); + rc.left=pdialog->pop_x+i*(tileset_small_sprite_width(tileset) + + tileset_tile_width(tileset)); rc.right=rc.left+tileset_tile_width(tileset); - rc.bottom=rc.top+tileset_small_sprite_height(tileset)+tileset_tile_height(tileset); - FillRect(hdc, &rc, - (HBRUSH)GetClassLong(pdialog->mainwindow,GCL_HBRBACKGROUND)); + rc.bottom=rc.top+tileset_small_sprite_height(tileset) + + tileset_tile_height(tileset); + FillRect(hdc, &rc, + (HBRUSH)GetClassLong(pdialog->mainwindow,GCL_HBRBACKGROUND)); } i = 0; - + unit_list_iterate(plist, punit) { - int upkeep_cost[O_COUNT]; int happy_cost = city_unit_unhappiness(punit, &free_unhappy); - - city_unit_upkeep(punit, upkeep_cost, free_upkeep); put_unit(punit, &store, - pdialog->pop_x + i * (tileset_small_sprite_width(tileset) + tileset_tile_width(tileset)), + pdialog->pop_x + i * (tileset_small_sprite_width(tileset) + + tileset_tile_width(tileset)), pdialog->supported_y); put_unit_city_overlays(punit, &store, - pdialog->pop_x + i * (tileset_small_sprite_width(tileset) + tileset_tile_width(tileset)), - pdialog->supported_y, upkeep_cost, happy_cost); + pdialog->pop_x + i * (tileset_small_sprite_width(tileset) + + tileset_tile_width(tileset)), + pdialog->supported_y, punit->upkeep, happy_cost); pdialog->support_unit_ids[i] = punit->id; i++; if (i == NUM_UNITS_SHOWN) { break; } } unit_list_iterate_end; -} +} /************************************************************************** ... diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/gui-win32/repodlgs.c freeciv-2.1.99svn15584.gold5//client/gui-win32/repodlgs.c --- freeciv-2.1.99svn15584.gold4/client/gui-win32/repodlgs.c 2009-01-10 20:17:43.000000000 +0100 +++ freeciv-2.1.99svn15584.gold5//client/gui-win32/repodlgs.c 2009-04-13 21:06:00.546497892 +0200 @@ -597,11 +597,10 @@ { struct repoinfo { int active_count; - int upkeep_shield; - int upkeep_food; - /* int upkeep_gold; FIXME: add gold when gold is implemented --jjm */ + int upkeep[O_LAST]; int building_count; - }; + }; + if(activeunits_dlg) { HWND lv; int i, k, can; @@ -623,23 +622,14 @@ memset(unitarray, '\0', sizeof(unitarray)); city_list_iterate(client.conn.playing->cities, pcity) { - int free_upkeep[O_COUNT]; - - output_type_iterate(o) { - free_upkeep[o] = get_city_output_bonus(pcity, get_output_type(o), - EFT_UNIT_UPKEEP_FREE_PER_CITY); - } output_type_iterate_end; - unit_list_iterate(client.conn.playing->units, punit) { - int upkeep_cost[O_COUNT]; Unit_type_id uti = utype_index(unit_type(punit)); - city_unit_upkeep(punit, upkeep_cost, free_upkeep); (unitarray[uti].active_count)++; if (punit->homecity) { - /* TODO: upkeep for generic output types. */ - unitarray[uti].upkeep_shield += upkeep_cost[O_SHIELD]; - unitarray[uti].upkeep_food += upkeep_cost[O_FOOD]; + output_type_iterate(o) { + unitarray[uti].upkeep[o] += punit->upkeep[o]; + } output_type_iterate_end; } } unit_list_iterate_end; } city_list_iterate_end; @@ -667,15 +657,17 @@ my_snprintf(buf[3], sizeof(buf[3]), "%3d", unitarray[index].active_count); my_snprintf(buf[4], sizeof(buf[4]), "%3d", - unitarray[index].upkeep_shield); + unitarray[index].upkeep[O_SHIELD]); my_snprintf(buf[5], sizeof(buf[5]), "%3d", - unitarray[index].upkeep_food); - fcwin_listview_add_row(lv,k,AU_COL,row); + unitarray[index].upkeep[O_FOOD]); + /* TODO: add upkeep[O_GOLD] here */ + fcwin_listview_add_row(lv,k,AU_COL,row); activeunits_type[k]=(unitarray[index].active_count > 0) ? putype : NULL; k++; unittotals.active_count += unitarray[index].active_count; - unittotals.upkeep_shield += unitarray[index].upkeep_shield; - unittotals.upkeep_food += unitarray[index].upkeep_food; + output_type_iterate(o) { + unittotals.upkeep[0] = unitarray[index].upkeep[o] + } output_type_iterate_end; unittotals.building_count += unitarray[index].building_count; } } unit_type_iterate_end; @@ -684,8 +676,9 @@ buf[1][0]='\0'; my_snprintf(buf[2],sizeof(buf[2]),"%d",unittotals.building_count); my_snprintf(buf[3],sizeof(buf[3]),"%d",unittotals.active_count); - my_snprintf(buf[4],sizeof(buf[4]),"%d",unittotals.upkeep_shield); - my_snprintf(buf[5],sizeof(buf[5]),"%d",unittotals.upkeep_food); + my_snprintf(buf[4],sizeof(buf[4]),"%d",unittotals.upkeep[O_SHIELD]); + my_snprintf(buf[5],sizeof(buf[5]),"%d",unittotals.upkeep[O_FOOD]); + /* TODO: add upkeep[O_GOLD] here */ fcwin_listview_add_row(lv,k,AU_COL,row); EnableWindow(GetDlgItem(activeunits_dlg,ID_MILITARY_UPGRADE),FALSE); ListView_SetColumnWidth(lv,0,LVSCW_AUTOSIZE); diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/gui-xaw/citydlg.c freeciv-2.1.99svn15584.gold5//client/gui-xaw/citydlg.c --- freeciv-2.1.99svn15584.gold4/client/gui-xaw/citydlg.c 2009-03-21 12:19:16.000000000 +0100 +++ freeciv-2.1.99svn15584.gold5//client/gui-xaw/citydlg.c 2009-04-13 21:06:00.550498060 +0200 @@ -1688,14 +1688,8 @@ struct unit_list *plist; int i, j, adj_base; Widget pixcomm; - int free_upkeep[O_COUNT]; int free_unhappy = get_city_bonus(pdialog->pcity, EFT_MAKE_CONTENT_MIL); - output_type_iterate(o) { - free_upkeep[o] = get_city_output_bonus(pdialog->pcity, get_output_type(o), - EFT_UNIT_UPKEEP_FREE_PER_CITY); - } output_type_iterate_end; - if (NULL != client.conn.playing && city_owner(pdialog->pcity) != client.conn.playing) { plist = pdialog->pcity->info_units_supported; @@ -1713,10 +1707,7 @@ j = 0; /* index into list */ unit_list_iterate(plist, punit) { struct canvas store; - int upkeep_cost[O_COUNT]; int happy_cost = city_unit_unhappiness(punit, &free_unhappy); - - city_unit_upkeep(punit, upkeep_cost, free_upkeep); if (j++ < pdialog->support_unit_base) { continue; @@ -1734,8 +1725,8 @@ XawPixcommClear(pixcomm); /* STG */ put_unit(punit, &store, 0, 0); put_unit_pixmap_city_overlays(punit, - XawPixcommPixmap(pixcomm), - upkeep_cost, happy_cost); + XawPixcommPixmap(pixcomm), + punit->upkeep, happy_cost); xaw_expose_now(pixcomm); diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/gui-xaw/repodlgs.c freeciv-2.1.99svn15584.gold5//client/gui-xaw/repodlgs.c --- freeciv-2.1.99svn15584.gold4/client/gui-xaw/repodlgs.c 2009-01-10 20:17:40.000000000 +0100 +++ freeciv-2.1.99svn15584.gold5//client/gui-xaw/repodlgs.c 2009-04-13 21:06:00.550498060 +0200 @@ -1073,9 +1073,7 @@ { struct repoinfo { int active_count; - int upkeep_shield; - int upkeep_food; - /* int upkeep_gold; FIXME: add gold when gold is implemented --jjm */ + int upkeep[O_LAST]; int building_count; }; @@ -1105,23 +1103,14 @@ memset(unitarray, '\0', sizeof(unitarray)); city_list_iterate(client.conn.playing->cities, pcity) { - int free_upkeep[O_COUNT]; - - output_type_iterate(o) { - free_upkeep[o] = get_city_output_bonus(pcity, get_output_type(o), - EFT_UNIT_UPKEEP_FREE_PER_CITY); - } output_type_iterate_end; - unit_list_iterate(client.conn.playing->units, punit) { - int upkeep_cost[O_COUNT]; Unit_type_id uti = utype_index(unit_type(punit)); - city_unit_upkeep(punit, upkeep_cost, free_upkeep); (unitarray[uti].active_count)++; if (punit->homecity) { - /* TODO: upkeep for generic output types. */ - unitarray[uti].upkeep_shield += upkeep_cost[O_SHIELD]; - unitarray[uti].upkeep_food += upkeep_cost[O_FOOD]; + output_type_iterate(o) { + unitarray[uti].upkeep[o] += punit->upkeep[o]; + } output_type_iterate_end; } } unit_list_iterate_end; } city_list_iterate_end; @@ -1148,15 +1137,17 @@ can_upgrade_unittype(client.conn.playing, punittype) != NULL ? '*': '-', unitarray[i].building_count, unitarray[i].active_count, - unitarray[i].upkeep_shield, - unitarray[i].upkeep_food + unitarray[i].upkeep[O_SHIELD], + unitarray[i].upkeep[O_FOOD] + /* TODO: add upkeep[O_GOLD] here */ ); activeunits_list_names_ptrs[k]=activeunits_list_names[k]; activeunits_type[k]=(unitarray[i].active_count > 0) ? i : U_LAST; k++; unittotals.active_count += unitarray[i].active_count; - unittotals.upkeep_shield += unitarray[i].upkeep_shield; - unittotals.upkeep_food += unitarray[i].upkeep_food; + output_type_iterate(o) { + unittotals.upkeep[o] = unitarray[uti].upkeep[o]; + } output_type_iterate_end; unittotals.building_count += unitarray[i].building_count; } } unit_type_iterate_end; @@ -1170,7 +1161,8 @@ my_snprintf(activeunits_total, sizeof(activeunits_total), _("Totals: %9d%9d%9d%9d"), unittotals.building_count, unittotals.active_count, - unittotals.upkeep_shield, unittotals.upkeep_food); + unittotals.upkeep[O_SHIELD], unittotals.upkeep[O_FOOD]); + /* TODO: add upkeep[O_GOLD] here */ xaw_set_label(activeunits_label2, activeunits_total); activeunits_list_names_ptrs[k]=0; diff '--exclude=*svn*' -ur freeciv-2.1.99svn15584.gold4/client/repodlgs_common.c freeciv-2.1.99svn15584.gold5//client/repodlgs_common.c --- freeciv-2.1.99svn15584.gold4/client/repodlgs_common.c 2009-04-11 20:18:01.000000000 +0200 +++ freeciv-2.1.99svn15584.gold5//client/repodlgs_common.c 2009-04-11 20:20:16.000000000 +0200 @@ -113,7 +113,6 @@ int *num_entries_used, int *total_cost) { int count, cost, partial_cost; - int free_upkeep[O_COUNT]; *num_entries_used = 0; *total_cost = 0; @@ -121,7 +120,6 @@ if (NULL == client.conn.playing) { return; } - memset(free_upkeep, 0, O_COUNT * sizeof(*free_upkeep)); unit_type_iterate(unittype) { cost = utype_upkeep_cost(unittype, client.conn.playing, O_GOLD); @@ -135,17 +133,10 @@ partial_cost = 0; city_list_iterate(client.conn.playing->cities, pcity) { - free_upkeep[O_GOLD] = get_city_output_bonus(pcity, get_output_type(O_GOLD), - EFT_UNIT_UPKEEP_FREE_PER_CITY); - unit_list_iterate(pcity->units_supported, punit) { - int upkeep_cost[O_COUNT]; - - city_unit_upkeep(punit, upkeep_cost, free_upkeep); - if (unit_type(punit) == unittype) { count++; - partial_cost += upkeep_cost[O_GOLD]; + partial_cost += punit->upkeep[O_GOLD]; } } unit_list_iterate_end;
_______________________________________________ Freeciv-dev mailing list Freeciv-dev@gna.org https://mail.gna.org/listinfo/freeciv-dev