<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
[email protected]
https://mail.gna.org/listinfo/freeciv-dev