19#include <QApplication>
21#include <QElapsedTimer>
28#include <QRadioButton>
30#include <QTableWidget>
58extern QString
split_text(QString text,
bool cut);
61 struct city *pcity,
bool ext);
103 QHBoxLayout *hbox_top;
104 QHBoxLayout *hbox_upkeep;
110 QSizePolicy size_fixed_policy(QSizePolicy::Maximum, QSizePolicy::Maximum,
111 QSizePolicy::Slider);
114 QVBoxLayout *vbox_main;
121 setSizePolicy(size_fixed_policy);
123 fm =
new QFontMetrics(f);
124 isize = fm->height() * 2 / 3;
125 vbox_main =
new QVBoxLayout();
126 hbox =
new QHBoxLayout();
127 vbox =
new QVBoxLayout();
128 hbox_top =
new QHBoxLayout();
135 vbox_main->addLayout(hbox_top);
139 hbox->addLayout(vbox);
140 vbox_main->addLayout(hbox);
141 hbox_upkeep =
new QHBoxLayout;
143 lab =
new QLabel(
"");
145 "citybar.shields",
"",
"",
false);
146 img = spr->
pm->toImage();
148 cropped_img =
img.copy(crop);
149 pix = QPixmap::fromImage(cropped_img);
150 lab->setPixmap(pix.scaledToHeight(isize));
151 hbox_upkeep->addWidget(lab);
152 spacer =
new QSpacerItem(0, isize, QSizePolicy::Expanding,
153 QSizePolicy::Minimum);
154 hbox_upkeep->addSpacerItem(spacer);
157 lab =
new QLabel(
"");
158 lab->setPixmap(spr->
pm->scaledToHeight(isize));
159 hbox_upkeep->addWidget(lab);
160 spacer =
new QSpacerItem(0, isize, QSizePolicy::Expanding,
161 QSizePolicy::Minimum);
162 hbox_upkeep->addSpacerItem(spacer);
164 lab =
new QLabel(
"");
166 "citybar.food",
"",
"",
false);
167 img = spr->
pm->toImage();
169 cropped_img =
img.copy(crop);
170 pix = QPixmap::fromImage(cropped_img);
171 lab->setPixmap(pix.scaledToHeight(isize));
172 hbox_upkeep->addWidget(lab);
173 vbox_main->addLayout(hbox_upkeep);
174 setLayout(vbox_main);
214 "Treasury contains %d gold.",
218 PL_(
"Upgrade as many %s to %s as possible "
219 "for %d gold each?\n%s",
220 "Upgrade as many %s to %s as possible "
221 "for %d gold each?\n%s", price),
226 ask->setStandardButtons(QMessageBox::Cancel | QMessageBox::Ok);
227 ask->setDefaultButton(QMessageBox::Cancel);
228 ask->setAttribute(Qt::WA_DeleteOnClose);
229 connect(ask, &hud_message_box::accepted, [=]() {
259 p.setPen(QColor(palette().
color(QPalette::Highlight)));
293 if (
event->angleDelta().y() < 0) {
331 setParent(
gui()->mapview_wdg);
333 cw->setFixedSize(12, 12);
390 QSizePolicy size_fixed_policy(QSizePolicy::Maximum,
391 QSizePolicy::Maximum,
392 QSizePolicy::Slider);
394 scroll =
new QScrollArea(
this);
395 setSizePolicy(size_fixed_policy);
396 scroll->setWidgetResizable(
true);
397 scroll->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
400 scroll->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);
401 scroll->setProperty(
"city_scroll",
true);
428 struct urd_info *info;
429 struct urd_info *unit_array = (
struct urd_info *)
fc_calloc(
sizeof(
struct urd_info),
utype_count());
430 struct urd_info unit_totals;
435 memset(&unit_totals,
'\0',
sizeof(unit_totals));
444 for (output = 0; output <
O_LAST; output++) {
448 info->active_count++;
451 if (VUT_UTYPE == pcity->production.kind) {
453 info = unit_array +
utype_index(pcity->production.value.utype);
457 num_units =
MAX(num_units, 1);
458 info->building_count += num_units;
465 info = unit_array + utype_id;
468 if (0 == info->active_count && 0 == info->building_count) {
488 setUpdatesEnabled(
false);
491 for (j = 0; j < i; j++) {
493 layout->addWidget(ui, 0, Qt::AlignVCenter);
494 total_len = total_len + ui->sizeHint().width() + 18;
497 total_len = total_len + contentsMargins().left()
498 + contentsMargins().right();
502 setUpdatesEnabled(
true);
503 setFixedWidth(qMin(total_len,
gui()->mapview_wdg->width()));
505 setFixedHeight(ui->height() + 60);
520 setUpdatesEnabled(
false);
521 setMouseTracking(
false);
523 for (j = 0; j < i; j++) {
533 setMouseTracking(
true);
534 setUpdatesEnabled(
true);
553 setMouseTracking(
true);
590 if (
req ==
nullptr) {
599 int startx, starty, nwidth, nheight;
614 rttp->
rect = QRect(startx + (nwidth - text_w) / 2, starty + 4,
618 icon_startx = startx + 5;
628 rttp->
rect = QRect(icon_startx, starty + text_h + 4
629 + (nheight - text_h - 4 - sheight) / 2,
633 icon_startx += swidth + 2;
639 if (VUT_ADVANCE == preq->source.kind
645 rttp->
rect = QRect(icon_startx, starty + text_h + 4
646 + (nheight - text_h - 4 - sheight) / 2,
648 rttp->
timpr = pimprove;
650 icon_startx += swidth + 2;
659 if (VUT_ADVANCE == preq->source.kind
664 rttp->
rect = QRect(icon_startx, starty + text_h + 4
665 + (nheight - text_h - 4 - sheight) / 2,
669 icon_startx += swidth + 2;
715 QPoint
pos =
event->pos();
722 case TECH_PREREQS_KNOWN:
731 }
else if (
event->button() == Qt::RightButton) {
732 for (i = 0; i <
tt_help.count(); i++) {
739 }
else if (rttp->
timpr !=
nullptr) {
743 }
else if (rttp->
tunit !=
nullptr) {
746 }
else if (rttp->
tgov !=
nullptr) {
770 for (i = 0; i <
tt_help.count(); i++) {
776 tt_text = QString(buffer);
777 def_str =
"<p style='white-space:pre'><b>"
781 }
else if (rttp->
timpr !=
nullptr) {
786 }
else if (rttp->
tunit !=
nullptr) {
791 }
else if (rttp->
tgov !=
nullptr) {
794 tt_text = QString(buffer);
796 def_str =
"<p style='white-space:pre'><b>"
803 tt_text = def_str + tt_text.toHtmlEscaped();
860 QSizePolicy size_expanding_policy(QSizePolicy::Expanding,
861 QSizePolicy::Expanding);
862 QSizePolicy size_fixed_policy(QSizePolicy::Minimum, QSizePolicy::Minimum);
871 scroll =
new QScrollArea();
881 progress->setSizePolicy(size_fixed_policy);
889 scroll->setAutoFillBackground(
true);
890 scroll->setPalette(QPalette(QColor(215,215,215)));
892 scroll->setSizePolicy(size_expanding_policy);
898 QObject::connect(
goal_combo, SIGNAL(currentIndexChanged(
int)),
919 gui()->remove_repo_dlg(
"SCI");
929 gui()->gimme_place(
this,
"SCI");
931 gui()->game_tab_widget->setCurrentIndex(
index);
994 str = QString::fromUtf8(text);
1000 if (done <= total) {
1042 for (
int i = 0; i <
curr_list->count(); i++) {
1047 ic = QIcon(*sp->
pm);
1053 for (
int i = 0; i <
goal_list->count(); i++) {
1058 ic = QIcon(*sp->
pm);
1087 for (
int i = 0; i <
goal_combo->count(); i++) {
1166 str = QString(
Q_(
"?tech:None"));
1170 str =
str +
"\n (" + QString::number(percent) +
"%)";
1181 gui()->sw_science->keep_blinking =
true;
1182 gui()->sw_science->set_custom_labels(
str);
1183 gui()->sw_science->sblink();
1185 gui()->sw_science->keep_blinking =
false;
1186 gui()->sw_science->set_custom_labels(
str);
1187 gui()->sw_science->update_final_pixmap();
1189 gui()->update_sidebar_tooltips();
1191 if (
gui()->is_repo_dlg_open(
"SCI")) {
1192 i =
gui()->gimme_index_of(
"SCI");
1194 w =
gui()->game_tab_widget->widget(i);
1205 QHeaderView *header;
1206 QGridLayout *eco_layout =
new QGridLayout;
1214 slist <<
_(
"Type") <<
Q_(
"?Building or Unit type:Name") <<
_(
"Redundant")
1215 <<
_(
"Count") <<
_(
"Cost") <<
_(
"U Total");
1217 eco_widget->setHorizontalHeaderLabels(slist);
1218 eco_widget->setProperty(
"showGrid",
"false");
1219 eco_widget->setProperty(
"selectionBehavior",
"SelectRows");
1220 eco_widget->setEditTriggers(QAbstractItemView::NoEditTriggers);
1221 eco_widget->horizontalHeader()->resizeSections(QHeaderView::Stretch);
1222 eco_widget->verticalHeader()->setVisible(
false);
1223 eco_widget->setSelectionMode(QAbstractItemView::SingleSelection);
1226 header->setSectionResizeMode(1, QHeaderView::Stretch);
1227 header->setStretchLastSection(
true);
1234 eco_layout->addWidget(
eco_widget, 1, 0, 5, 5);
1238 eco_layout->addWidget(
eco_label, 6, 0, 1, 5);
1244 SIGNAL(selectionChanged(
const QItemSelection &,
1245 const QItemSelection &)),
1247 const QItemSelection &)));
1248 setLayout(eco_layout);
1256 gui()->remove_repo_dlg(
"ECO");
1265 gui()->gimme_place(
this,
"ECO");
1267 gui()->game_tab_widget->setCurrentIndex(
index);
1277 int entries_used, building_total, unit_total, tax, i, j;
1279 QTableWidgetItem *
item;
1280 QFont f = QApplication::font();
1283 h = fm.height() + 6;
1291 &building_total, &tax);
1302 pix_scaled = pix->scaledToHeight(h);
1309 for (j = 0; j < 6; j++) {
1310 item =
new QTableWidgetItem;
1313 item->setData(Qt::DecorationRole, pix_scaled);
1314 item->setData(Qt::UserRole,
id);
1317 item->setTextAlignment(Qt::AlignLeft);
1324 item->setData(Qt::DisplayRole, pentry->
count);
1327 item->setData(Qt::DisplayRole, pentry->
cost);
1333 item->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter);
1340 struct unit_entry *pentry = unit_entries + i;
1352 for (j = 0; j < 6; j++) {
1353 item =
new QTableWidgetItem;
1354 item->setTextAlignment(Qt::AlignHCenter);
1358 pix_scaled = pix->scaledToHeight(h);
1359 item->setData(Qt::DecorationRole, pix_scaled);
1361 item->setData(Qt::UserRole,
id);
1364 item->setTextAlignment(Qt::AlignLeft);
1368 item->setData(Qt::DisplayRole, 0);
1371 item->setData(Qt::DisplayRole, pentry->
count);
1374 item->setData(Qt::DisplayRole, pentry->
cost);
1380 item->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter);
1385 fc_snprintf(buf,
sizeof(buf),
_(
"Income: %d Total Costs: %d"),
1386 tax, building_total + unit_total);
1394 const QItemSelection & ds)
1396 QTableWidgetItem *itm;
1409 curr_row = sl.indexes().at(0).row();
1412 qvar = itm->data(Qt::UserRole);
1415 switch (selected.
kind) {
1416 case VUT_IMPROVEMENT:
1423 i = itm->text().toInt();
1451 _(
"Do you really wish to disband every %s (%d total)?"),
1455 ask->setStandardButtons(QMessageBox::Cancel | QMessageBox::Ok);
1456 ask->setDefaultButton(QMessageBox::Cancel);
1457 ask->setAttribute(Qt::WA_DeleteOnClose);
1458 connect(ask, &hud_message_box::accepted, [=]() {
1469 result->setStandardButtons(QMessageBox::Ok);
1470 result->setAttribute(Qt::WA_DeleteOnClose);
1491 _(
"Do you really wish to sell "
1492 "every %s (%d total)?"),
1496 ask->setStandardButtons(QMessageBox::Cancel | QMessageBox::Ok);
1497 ask->setDefaultButton(QMessageBox::Cancel);
1498 ask->setAttribute(Qt::WA_DeleteOnClose);
1499 connect(ask, &hud_message_box::accepted, [=]() {
1512 result->setStandardButtons(QMessageBox::Ok);
1513 result->setAttribute(Qt::WA_DeleteOnClose);
1535 _(
"Do you really wish to sell "
1536 "every redundant %s (%d total)?"),
1540 ask->setStandardButtons(QMessageBox::Cancel | QMessageBox::Ok);
1541 ask->setDefaultButton(QMessageBox::Cancel);
1542 ask->setAttribute(Qt::WA_DeleteOnClose);
1543 connect(ask, &hud_message_box::accepted, [=]() {
1556 result->setStandardButtons(QMessageBox::Ok);
1557 result->setAttribute(Qt::WA_DeleteOnClose);
1567 QGridLayout *end_layout =
new QGridLayout;
1574 slist <<
_(
"Player") <<
_(
"Nation") <<
_(
"Score");
1575 for (i = 0 ; i < col_num - 3; i++) {
1579 end_widget->setHorizontalHeaderLabels(slist);
1580 end_widget->setProperty(
"showGrid",
"false");
1581 end_widget->setProperty(
"selectionBehavior",
"SelectRows");
1582 end_widget->setEditTriggers(QAbstractItemView::NoEditTriggers);
1583 end_widget->verticalHeader()->setVisible(
false);
1584 end_widget->setSelectionMode(QAbstractItemView::SingleSelection);
1585 end_widget->horizontalHeader()->setSectionResizeMode(
1586 QHeaderView::ResizeToContents);
1587 end_layout->addWidget(
end_widget, 1, 0, 5, 5);
1588 setLayout(end_layout);
1597 gui()->remove_repo_dlg(
"END");
1605 gui()->gimme_place(
this,
"END");
1607 gui()->game_tab_widget->setCurrentIndex(
index);
1615 QTableWidgetItem *
item;
1621 for (i = 0; i < col_num; i++) {
1622 item =
new QTableWidgetItem;
1630 item->setData(Qt::DecorationRole, *pix);
1634 item->setText(QString::number(packet->
score));
1635 item->setTextAlignment(Qt::AlignHCenter);
1639 item->setTextAlignment(Qt::AlignHCenter);
1661 if (!
gui()->is_repo_dlg_open(
"SCI")) {
1665 i =
gui()->gimme_index_of(
"SCI");
1666 w =
gui()->game_tab_widget->widget(i);
1668 if (
gui()->game_tab_widget->currentIndex() == i) {
1671 gui()->game_tab_widget->setCurrentWidget(sci_rep);
1685 if (
gui()->is_repo_dlg_open(
"ECO")) {
1686 i =
gui()->gimme_index_of(
"ECO");
1687 if (
gui()->game_tab_widget->currentIndex() == i) {
1688 w =
gui()->game_tab_widget->widget(i);
1693 gui()->update_sidebar_tooltips();
1705 if (!
gui()->is_repo_dlg_open(
"ECO")) {
1710 i =
gui()->gimme_index_of(
"ECO");
1712 w =
gui()->game_tab_widget->widget(i);
1713 if (w->isVisible()) {
1714 gui()->game_tab_widget->setCurrentIndex(0);
1719 gui()->game_tab_widget->setCurrentWidget(eco_rep);
1738 gui()->game_tab_widget->setCurrentIndex(0);
1758 if (
gui()->is_repo_dlg_open(
"END")) {
1759 i =
gui()->gimme_index_of(
"END");
1761 delete gui()->game_tab_widget->widget(i);
1771 if (
gui()->is_repo_dlg_open(
"END")) {
1772 i =
gui()->gimme_index_of(
"END");
1773 gui()->game_tab_widget->setCurrentIndex(i);
1786 if (
gui()->is_repo_dlg_open(
"END")) {
1787 i =
gui()->gimme_index_of(
"END");
1789 w =
gui()->game_tab_widget->widget(i);
1804 if (
gui()->is_repo_dlg_open(
"SCI")) {
1805 i =
gui()->gimme_index_of(
"SCI");
1806 if (
gui()->game_tab_widget->currentIndex() == i) {
1807 w =
gui()->game_tab_widget->widget(i);
1823 if (
gui()->is_repo_dlg_open(
"ECO")) {
1824 i =
gui()->gimme_index_of(
"ECO");
1826 w =
gui()->game_tab_widget->widget(i);
1828 eco_rep->deleteLater();
1841 if (
gui()->is_repo_dlg_open(
"SCI")) {
1842 i =
gui()->gimme_index_of(
"SCI");
1844 w =
gui()->game_tab_widget->widget(i);
1846 sci_rep->deleteLater();
1865 &&
gui()->game_tab_widget->currentIndex() == 0) {
QRect zealous_crop_rect(QImage &p)
struct canvas * qtg_canvas_create(int width, int height)
struct canvas int int struct sprite int int int int height
struct canvas int int struct sprite int int int width
bool city_production_build_units(const struct city *pcity, bool add_production, int *num_units)
#define city_list_iterate(citylist, pcity)
#define city_list_iterate_end
QString split_text(QString text, bool cut)
QString get_tooltip_improvement(const impr_type *building, struct city *pcity, bool ext)
QString cut_helptext(QString text)
QString get_tooltip_unit(const struct unit_type *utype, bool ext)
QPushButton * sell_button
void selection_changed(const QItemSelection &sl, const QItemSelection &ds)
QPushButton * sell_redun_button
QPushButton * disband_button
QTableWidget * eco_widget
static fc_font * instance()
QFont * get_font(QString name)
int set_text_title(QString s1, QString s2, bool return_exec=false)
void set_pixmap(struct universal *target)
void mousePressEvent(QMouseEvent *event)
void create_tooltip_help()
QList< req_tooltip_help * > tt_help
research_diagram(QWidget *parent=0)
void mouseMoveEvent(QMouseEvent *event)
void paintEvent(QPaintEvent *event)
static units_reports * m_instance
void paintEvent(QPaintEvent *event)
void add_item(unittype_item *item)
static units_reports * instance()
virtual void update_menu()
void update_units(bool show=false)
QList< unittype_item * > unittype_list
QHBoxLayout * scroll_layout
void leaveEvent(QEvent *event)
unittype_item(QWidget *parent, unit_type *ut)
QLabel label_info_inbuild
void enterEvent(QEnterEvent *event)
QPushButton upgrade_button
void paintEvent(QPaintEvent *event)
void wheelEvent(QWheelEvent *event)
bool client_is_global_observer(void)
bool client_is_observer(void)
bool can_client_issue_orders(void)
bool client_has_player(void)
cid cid_encode_building(const struct impr_type *pimprove)
struct universal cid_decode(cid id)
cid cid_encode_unit(const struct unit_type *punittype)
void unit_focus_set_and_select(struct unit *punit)
#define can_unit_do_activity_client(_punit_, _act_)
struct unit struct city struct unit struct tile struct extra_type const struct act_prob *act_probs int actor_unit_id struct unit struct unit * punit
#define PL_(String1, String2, n)
const char * government_name_translation(const struct government *pgovern)
#define governments_iterate(NAME_pgov)
#define governments_iterate_end
void get_text_size(int *width, int *height, enum client_font font, const char *text)
void canvas_free(struct canvas *store)
void popup_help_dialog_typed(const char *item, enum help_page_type htype)
void get_sprite_dimensions(struct sprite *sprite, int *width, int *height)
bool comp_less_than(const qlist_item &q1, const qlist_item &q2)
void helptext_government(char *buf, size_t bufsz, struct player *pplayer, const char *user_text, struct government *gov)
void helptext_advance(char *buf, size_t bufsz, struct player *pplayer, const char *user_text, int i)
char * helptext_building(char *buf, size_t bufsz, struct player *pplayer, const char *user_text, const struct impr_type *pimprove)
char * helptext_unit(char *buf, size_t bufsz, struct player *pplayer, const char *user_text, const struct unit_type *utype)
const struct impr_type * valid_improvement(const struct impr_type *pimprove)
struct impr_type * improvement_by_number(const Impr_type_id id)
bool can_sell_building(const struct impr_type *pimprove)
Impr_type_id improvement_number(const struct impr_type *pimprove)
bool is_great_wonder(const struct impr_type *pimprove)
const char * improvement_name_translation(const struct impr_type *pimprove)
#define improvement_iterate_end
#define improvement_iterate(_p)
#define fc_assert_ret(condition)
#define fc_assert(condition)
#define log_error(message,...)
#define fc_calloc(n, esz)
const char *const default_font
struct nation_type * nation_of_player(const struct player *pplayer)
struct client_options gui_options
int dsend_packet_player_tech_goal(struct connection *pc, int tech)
int dsend_packet_player_research(struct connection *pc, int tech)
int dsend_packet_unit_type_upgrade(struct connection *pc, Unit_type_id type)
const char * science_dialog_text(void)
struct player * player_by_number(const int player_id)
const char * player_name(const struct player *pplayer)
#define players_iterate_end
#define players_iterate(_pplayer)
void science_report_dialog_popup(bool raise)
QString get_tooltip_improvement(impr_type *building, struct city *pcity, bool ext)
void endgame_report_dialog_start(const struct packet_endgame_report *packet)
QString split_text(QString text, bool cut)
void real_units_report_dialog_update(void *unused)
void real_economy_report_dialog_update(void *unused)
bool comp_less_than(const qlist_item &q1, const qlist_item &q2)
void popdown_economy_report()
void economy_report_dialog_popup(bool raise)
void popdown_science_report()
void units_report_dialog_popup(bool raise)
void popdown_endgame_report()
void science_report_dialog_redraw(void)
void popdown_units_report()
void toggle_units_report(bool x)
void popup_endgame_report()
QString cut_helptext(QString text)
QString get_tooltip_unit(struct unit_type *unit, bool ext)
void real_science_report_dialog_update(void *unused)
void get_economy_report_units_data(struct unit_entry *entries, int *num_entries_used, int *total_cost)
void get_economy_report_data(struct improvement_entry *entries, int *num_entries_used, int *total_cost, int *total_income)
void sell_all_improvements(const struct impr_type *pimprove, bool redundant_only, char *message, size_t message_sz)
void disband_all_units(const struct unit_type *punittype, bool in_cities_only, char *message, size_t message_sz)
endgame_report_dialog_player
void draw_reqtree(struct reqtree *tree, struct canvas *pcanvas, int canvas_x, int canvas_y, int tt_x, int tt_y, int w, int h)
void get_reqtree_dimensions(struct reqtree *reqtree, int *width, int *height)
Tech_type_id get_tech_on_reqtree(struct reqtree *tree, int x, int y)
void destroy_reqtree(struct reqtree *tree)
struct reqtree * create_reqtree(struct player *pplayer, bool show_all)
#define requirement_vector_iterate_end
#define requirement_vector_iterate(req_vec, preq)
bool research_invention_reachable(const struct research *presearch, const Tech_type_id tech)
const char * research_advance_name_translation(const struct research *presearch, Tech_type_id tech)
struct research * research_get(const struct player *pplayer)
enum tech_state research_invention_state(const struct research *presearch, Tech_type_id tech)
struct packet_ruleset_control control
QTableWidget * end_widget
endgame_report(const struct packet_endgame_report *packet)
void update_report(const struct packet_endgame_player *packet)
char category_name[32][MAX_LEN_NAME]
struct tree_node ** nodes
struct tree_node *** layers
struct research::@75::@77 client
struct research::research_invention inventions[A_ARRAY_SIZE]
GtkProgressBar * progress_bar
QList< qlist_item > * curr_list
research_diagram * res_diag
QList< qlist_item > * goal_list
void current_tech_changed(int index)
void goal_tech_changed(int index)
QComboBox * researching_combo
struct tree_node ** provide
struct tree_node ** require
enum unit_activity activity
const struct unit_type * utype
int fc_snprintf(char *str, size_t n, const char *format,...)
struct advance * advance_by_number(const Tech_type_id atype)
bool is_future_tech(Tech_type_id tech)
const char * advance_name_translation(const struct advance *padvance)
Tech_type_id advance_number(const struct advance *padvance)
#define advance_index_iterate_end
#define advance_index_iterate(_start, _index)
const char * get_science_target_text(double *percent)
const char * get_science_goal_text(Tech_type_id goal)
struct sprite * get_government_sprite(const struct tileset *t, const struct government *gov)
struct sprite * get_building_sprite(const struct tileset *t, const struct impr_type *pimprove)
struct tileset * get_tileset(void)
struct sprite * get_unittype_sprite(const struct tileset *t, const struct unit_type *punittype, enum direction8 facing)
struct sprite * tiles_lookup_sprite_tag_alt(struct tileset *t, enum log_level level, const char *tag, const char *alt, const char *what, const char *name, bool scale)
struct sprite * get_tax_sprite(const struct tileset *t, Output_type_id otype)
struct sprite * get_nation_flag_sprite(const struct tileset *t, const struct nation_type *pnation)
struct sprite * get_tech_sprite(const struct tileset *t, Tech_type_id tech)
const struct unit_type * utype
const struct impr_type * building
#define unit_list_iterate(unitlist, punit)
#define unit_list_iterate_end
const struct unit_type * unit_type_get(const struct unit *punit)
const struct unit_type * can_upgrade_unittype(const struct player *pplayer, const struct unit_type *punittype)
Unit_type_id utype_count(void)
struct unit_type * utype_by_number(const Unit_type_id id)
Unit_type_id utype_number(const struct unit_type *punittype)
Unit_type_id utype_index(const struct unit_type *punittype)
const char * utype_name_translation(const struct unit_type *punittype)
int unit_upgrade_price(const struct player *pplayer, const struct unit_type *from, const struct unit_type *to)
#define unit_type_iterate(_p)
#define unit_type_iterate_end