示例#1
0
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);
    }
}
示例#2
0
文件: wldlg.c 项目: jheusala/freeciv
/****************************************************************
  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);
    }
  }
}
示例#3
0
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;
}