struct sprite* city_get_production_image(struct city* pCity) { int kind = pCity->production.kind; if(kind == VUT_UTYPE) { struct unit_type *pUnitType = pCity->production.value.utype; return get_unittype_sprite(tileset, pUnitType); } else { struct impr_type *pImprove = pCity->production.value.building; return get_building_sprite(tileset, pImprove); } }
/**************************************************************** Render worklist cell *****************************************************************/ static void cell_render_func(GtkTreeViewColumn *col, GtkCellRenderer *rend, GtkTreeModel *model, GtkTreeIter *it, gpointer data) { gint cid; struct universal target; gtk_tree_model_get(model, it, 0, &cid, -1); target = cid_production(cid); if (GTK_IS_CELL_RENDERER_PIXBUF(rend)) { GdkPixbuf *pix; struct sprite *sprite; if (VUT_UTYPE == target.kind) { sprite = sprite_scale(get_unittype_sprite(tileset, target.value.utype, DIR8_SOUTH, TRUE), max_unit_width, max_unit_height); } else { sprite = get_building_sprite(tileset, target.value.building); } pix = sprite_get_pixbuf(sprite); g_object_set(rend, "pixbuf", pix, NULL); g_object_unref(G_OBJECT(pix)); if (VUT_UTYPE == target.kind) { free_sprite(sprite); } } else { struct city **pcity = data; gint column; char *row[4]; char buf[4][64]; guint i; gboolean useless; for (i = 0; i < ARRAY_SIZE(row); i++) { row[i] = buf[i]; } column = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(rend), "column")); get_city_dialog_production_row(row, sizeof(buf[0]), target, *pcity); g_object_set(rend, "text", row[column], NULL); if (NULL != *pcity && VUT_IMPROVEMENT == target.kind) { useless = is_improvement_redundant(*pcity, target.value.building); /* Mark building redundant if we are really certain that there is * no use for it. */ g_object_set(rend, "strikethrough", useless, NULL); } else { g_object_set(rend, "strikethrough", FALSE, NULL); } } }
PyObject* get_buildable_improvements_in_city(struct city* pCity) { PyObject* list = PyList_New(0); bool can_build; improvement_iterate(pImprove) { can_build = can_player_build_improvement_now(client.conn.playing, pImprove); can_build = can_build && can_city_build_improvement_now(pCity, pImprove); if(can_build) { const char* name = improvement_name_translation(pImprove); //int turns = city_turns_to_build(pCity, cid_production(cid_encode_building(pImprove)), TRUE); int stock = pCity->shield_stock; int cost = impr_build_shield_cost(pImprove); PyList_Append(list, Py_BuildValue( "lisiii()O", (long)pImprove, VUT_IMPROVEMENT, name, -1, stock, cost, (PyObject*)get_building_sprite(tileset, pImprove) )); } } improvement_iterate_end; return list; }