@@ -65,10 +65,8 @@ struct empire_window : public autoconfig_window_t<empire_window> {
65
65
int selected_city = 1 ;
66
66
vec2i min_pos, max_pos;
67
67
vec2i draw_offset;
68
- int focus_button_id;
69
68
int is_scrolling;
70
69
int finished_scroll;
71
- int focus_resource;
72
70
int trade_column_spacing;
73
71
int trade_row_spacing;
74
72
int info_y_traded;
@@ -81,7 +79,8 @@ struct empire_window : public autoconfig_window_t<empire_window> {
81
79
int trade_button_offset_y;
82
80
vec2i start_pos, finish_pos;
83
81
image_desc image, bottom_image, horizontal_bar,
84
- vertical_bar, cross_bar, trade_amount;
82
+ vertical_bar, cross_bar, trade_amount,
83
+ closed_trade_route_hl, open_trade_route, open_trade_route_hl;
85
84
// svector<object_trade_info, 16> buying_goods;
86
85
// svector<object_trade_info, 16> selling_goods;
87
86
@@ -113,6 +112,9 @@ struct empire_window : public autoconfig_window_t<empire_window> {
113
112
arch.r_desc (" vertical_bar" , vertical_bar);
114
113
arch.r_desc (" cross_bar" , cross_bar);
115
114
arch.r_desc (" trade_amount" , trade_amount);
115
+ arch.r_desc (" closed_trade_route_hl" , closed_trade_route_hl);
116
+ arch.r_desc (" open_trade_route" , open_trade_route);
117
+ arch.r_desc (" open_trade_route_hl" , open_trade_route_hl);
116
118
117
119
init ();
118
120
}
@@ -129,6 +131,7 @@ struct empire_window : public autoconfig_window_t<empire_window> {
129
131
void determine_selected_object (const mouse *m);
130
132
void draw_city_info (const empire_object *object);
131
133
void draw_trade_resource (e_resource resource, int trade_now, int trade_max, vec2i offset, e_font font);
134
+ void draw_trade_route (int route_id, e_empire_route_state effect);
132
135
};
133
136
134
137
empire_window g_empire_window;
@@ -137,16 +140,14 @@ void empire_window::init() {
137
140
selected_button = 0 ;
138
141
int selected_object = g_empire_map.selected_object ();
139
142
selected_city = selected_object ? g_empire.get_city_for_object (selected_object - 1 ) : 0 ;
140
- focus_button_id = 0 ;
141
143
142
144
ui[" city_want_sell_items" ].ondraw ([this ] (ui::element *e) { draw_city_want_sell (e); });
143
145
ui[" city_want_buy_items" ].ondraw ([this ] (ui::element *e) { draw_city_want_buy (e); });
144
146
ui[" city_sell_items" ].ondraw ([this ] (ui::element *e) { draw_city_selling (e); });
145
147
ui[" city_buy_items" ].ondraw ([this ] (ui::element *e) { draw_city_buy (e); });
146
148
}
147
149
148
- static void draw_trade_route (int route_id, e_empire_route_state effect) {
149
- auto &data = g_empire_window;
150
+ void empire_window::draw_trade_route (int route_id, e_empire_route_state effect) {
150
151
painter ctx = game.painter ();
151
152
152
153
map_route_object* obj = empire_get_route_object (route_id);
@@ -162,21 +163,21 @@ static void draw_trade_route(int route_id, e_empire_route_state effect) {
162
163
// image_id = image_id_from_group(GROUP_MINIMAP_BUILDING) + 211;
163
164
break ;
164
165
case ROUTE_CLOSED_SELECTED: // highlighted, closed
165
- image_id = image_group (IMG_EMPIRE_ROUTE_HL_CLOSED );
166
+ image_id = image_group (closed_trade_route_hl );
166
167
break ;
167
168
case ROUTE_OPEN: // open
168
- image_id = image_group (IMG_EMPIRE_ROUTE_OPEN );
169
+ image_id = image_group (open_trade_route );
169
170
break ;
170
171
case ROUTE_OPEN_SELECTED: // highlighted, open
171
- image_id = image_group (IMG_EMPIRE_ROUTE_HL_OPEN );
172
+ image_id = image_group (open_trade_route_hl );
172
173
break ;
173
174
}
174
175
175
176
for (int i = 0 ; i < obj->num_points ; i++) {
176
177
const auto &route_point = obj->points [i];
177
178
178
179
// first corner in pair
179
- ImageDraw::img_generic (ctx, image_id, data. draw_offset + route_point.p );
180
+ ImageDraw::img_generic (ctx, image_id, draw_offset + route_point.p );
180
181
181
182
// draw lines connecting the turns
182
183
if (i < obj->num_points - 1 ) {
@@ -189,25 +190,15 @@ static void draw_trade_route(int route_id, e_empire_route_state effect) {
189
190
190
191
float progress = 1.0 ;
191
192
while (progress < len) {
192
- vec2i disp = data. draw_offset + route_point.p + vec2i{(int )(scaled_x * progress), (int )(scaled_y * progress)};
193
+ vec2i disp = draw_offset + route_point.p + vec2i{(int )(scaled_x * progress), (int )(scaled_y * progress)};
193
194
ImageDraw::img_generic (ctx, image_id, disp);
194
195
progress += 1 .0f ;
195
196
}
196
197
}
197
198
}
198
199
}
199
200
200
- static int column_idx (int index) {
201
- return index % 2 ;
202
- }
203
-
204
- static int row_idx (int index) {
205
- return index / 2 ;
206
- }
207
-
208
201
void empire_window::draw_trade_resource (e_resource resource, int trade_now, int trade_max, vec2i offset, e_font font) {
209
- painter ctx = game.painter ();
210
- int img_id = image_id_resource_icon (resource);
211
202
ui.icon (offset + vec2i{ 1 , 1 }, resource, UiFlags_Outline);
212
203
ui.button (" " , offset - vec2i{ 2 , 2 }, vec2i{ 105 , 24 }, fonts_vec{}, UiFlags_NoBody)
213
204
.tooltip ({23 , resource})
@@ -224,20 +215,9 @@ void empire_window::draw_trade_resource(e_resource resource, int trade_now, int
224
215
ui.label (text.c_str (), offset + vec2i{ 40 , 0 }, font);
225
216
226
217
switch (trade_max) {
227
- case 1500 :
228
- case 15 :
229
- ImageDraw::img_generic (ctx, image_group (trade_amount), offset + vec2i{21 , -1 });
230
- break ;
231
-
232
- case 2500 :
233
- case 25 :
234
- ImageDraw::img_generic (ctx, image_group (trade_amount + 1 ), offset + vec2i{17 , -1 });
235
- break ;
236
-
237
- case 4000 :
238
- case 40 :
239
- ImageDraw::img_generic (ctx, image_group (trade_amount + 2 ), offset + vec2i{13 , -1 });
240
- break ;
218
+ case 1500 : case 15 : ui.image (trade_amount, offset + vec2i{21 , -1 }); break ;
219
+ case 2500 : case 25 : ui.image (trade_amount + 1 , offset + vec2i{17 , -1 }); break ;
220
+ case 4000 : case 40 : ui.image (trade_amount + 2 , offset + vec2i{13 , -1 }); break ;
241
221
}
242
222
}
243
223
@@ -294,9 +274,6 @@ void empire_window::draw_city_buy(ui::element *e) {
294
274
if (!empire_object_city_buys_resource (object->id , resource))
295
275
continue ;
296
276
297
- int column_offset = trade_column_spacing * column_idx (index ) + 200 ;
298
- int row_offset = trade_row_spacing * row_idx (index ) + 20 ;
299
-
300
277
const auto &trade_route = city->get_route ();
301
278
int trade_max = trade_route.limit (resource);
302
279
int trade_now = std::min (trade_max, trade_route.traded (resource));
@@ -327,9 +304,6 @@ void empire_window::draw_city_selling(ui::element *e) {
327
304
continue ;
328
305
}
329
306
330
- int column_offset = trade_column_spacing * column_idx (index ) - 150 ;
331
- int row_offset = trade_row_spacing * row_idx (index ) + 20 ;
332
-
333
307
const auto &trade_route = city->get_route ();
334
308
int trade_max = trade_route.limit (resource);
335
309
int trade_now = std::min (trade_max, trade_route.traded (resource));
@@ -437,6 +411,7 @@ void empire_window::determine_selected_object(const mouse *m) {
437
411
finished_scroll = 0 ;
438
412
return ;
439
413
}
414
+
440
415
g_empire_map.select_object (vec2i{ m->x , m->y } - min_pos - vec2i{ 16 , 16 });
441
416
window_invalidate ();
442
417
}
@@ -469,17 +444,13 @@ int empire_window::ui_handle_mouse(const mouse *m) {
469
444
}
470
445
}
471
446
472
- focus_button_id = 0 ;
473
- focus_resource = 0 ;
474
- int button_id;
475
-
476
447
determine_selected_object (m);
448
+
477
449
int selected_object = g_empire_map.selected_object ();
478
450
if (selected_object) {
479
451
const empire_object *obj = empire_object_get (selected_object - 1 );
480
452
if (obj->type == EMPIRE_OBJECT_CITY) {
481
453
selected_city = g_empire.get_city_for_object (selected_object - 1 );
482
- const empire_city *city = g_empire.city (selected_city);
483
454
}
484
455
485
456
if (input_go_back_requested (m, h)) {
@@ -500,7 +471,6 @@ int empire_window::ui_handle_mouse(const mouse *m) {
500
471
}
501
472
502
473
void empire_window::draw_empire_object (const empire_object* obj) {
503
- auto &data = g_empire_window;
504
474
if (obj->type == EMPIRE_OBJECT_LAND_TRADE_ROUTE || obj->type == EMPIRE_OBJECT_SEA_TRADE_ROUTE) {
505
475
if (!g_empire.is_trade_route_open (obj->trade_route_id )) {
506
476
return ;
@@ -525,46 +495,32 @@ void empire_window::draw_empire_object(const empire_object* obj) {
525
495
if (city->type == EMPIRE_CITY_EGYPTIAN_TRADING || city->type == EMPIRE_CITY_FOREIGN_TRADING || city->type == EMPIRE_CITY_PHARAOH_TRADING) {
526
496
e_empire_route_state state = ROUTE_CLOSED;
527
497
if (city->is_open ) {
528
- state = (g_empire_map.selected_object () && data. selected_city == g_empire.get_city_for_object (obj->id ))
498
+ state = (g_empire_map.selected_object () && selected_city == g_empire.get_city_for_object (obj->id ))
529
499
? ROUTE_OPEN_SELECTED
530
500
: ROUTE_OPEN;
531
501
} else {
532
- state = (g_empire_map.selected_object () && data. selected_city == g_empire.get_city_for_object (obj->id ))
502
+ state = (g_empire_map.selected_object () && selected_city == g_empire.get_city_for_object (obj->id ))
533
503
? ROUTE_CLOSED_SELECTED
534
504
: ROUTE_CLOSED;
535
505
}
536
506
draw_trade_route (city->route_id , state);
537
507
}
538
508
539
- int text_group = (g_settings.city_names_style == CITIES_OLD_NAMES)
540
- ? data.text_group_old_names
541
- : data.text_group_new_names ;
542
-
509
+ int text_group = (g_settings.city_names_style == CITIES_OLD_NAMES) ? text_group_old_names : text_group_new_names;
543
510
int letter_height = get_letter_height ((const uint8_t *)" H" , FONT_SMALL_PLAIN);
544
- vec2i text_pos = data. draw_offset + pos + vec2i{0 , -letter_height};
511
+ vec2i text_pos = draw_offset + pos + vec2i{0 , -letter_height};
545
512
546
513
switch (obj->text_align ) {
547
- case 0 :
548
- lang_text_draw_centered_colored (text_group, city->name_id , text_pos.x , text_pos.y , obj->width , FONT_SMALL_PLAIN, COLOR_FONT_DARK_RED);
549
- break ;
550
-
551
- case 1 :
552
- lang_text_draw_centered_colored (text_group, city->name_id , text_pos.x , text_pos.y , obj->width , FONT_SMALL_PLAIN, COLOR_FONT_DARK_RED);
553
- break ;
554
-
555
- case 2 :
556
- lang_text_draw_centered_colored (text_group, city->name_id , text_pos.x , text_pos.y , obj->width , FONT_SMALL_PLAIN, COLOR_FONT_DARK_RED);
557
- break ;
558
-
559
- case 3 :
560
- lang_text_draw_centered_colored (text_group, city->name_id , text_pos.x , text_pos.y , obj->width , FONT_SMALL_PLAIN, COLOR_FONT_DARK_RED);
561
- break ;
514
+ case 0 : ui::label_colored (ui::str (text_group, city->name_id ), text_pos, FONT_SMALL_PLAIN, COLOR_FONT_DARK_RED, obj->width ); break ;
515
+ case 1 : ui::label_colored (ui::str (text_group, city->name_id ), text_pos, FONT_SMALL_PLAIN, COLOR_FONT_DARK_RED, obj->width ); break ;
516
+ case 2 : ui::label_colored (ui::str (text_group, city->name_id ), text_pos, FONT_SMALL_PLAIN, COLOR_FONT_DARK_RED, obj->width ); break ;
517
+ case 3 : ui::label_colored (ui::str (text_group, city->name_id ), text_pos, FONT_SMALL_PLAIN, COLOR_FONT_DARK_RED, obj->width ); break ;
562
518
}
563
519
} else if (obj->type == EMPIRE_OBJECT_TEXT) {
564
520
const full_empire_object* full = empire_get_full_object (obj->id );
565
- vec2i text_pos = data. draw_offset + pos;
521
+ vec2i text_pos = draw_offset + pos;
566
522
567
- lang_text_draw_centered_colored ( 196 , full->city_name_id , text_pos. x - 5 , text_pos. y , 100 , FONT_SMALL_PLAIN, COLOR_FONT_SHITTY_BROWN);
523
+ ui::label_colored ( ui::str ( 196 , full->city_name_id ) , text_pos - vec2i{ 5 , 0 }, FONT_SMALL_PLAIN, COLOR_FONT_SHITTY_BROWN, 100 );
568
524
return ;
569
525
}
570
526
@@ -587,14 +543,12 @@ void empire_window::draw_empire_object(const empire_object* obj) {
587
543
return ;
588
544
}
589
545
590
- painter ctx = game.painter ();
591
546
image_id = image_id_remap (image_id);
592
- const image_t * img = image_get (PACK_GENERAL, image_id);
593
- ImageDraw::img_generic (ctx, PACK_GENERAL, image_id, data.draw_offset + pos);
547
+ const image_t *img = ui::eimage (image_id, draw_offset + pos);
594
548
595
549
if (img && img->animation .speed_id ) {
596
550
int new_animation = empire_object_update_animation (obj, image_id);
597
- ImageDraw::img_generic (ctx, PACK_GENERAL, image_id + new_animation, data. draw_offset + pos + img->animation .sprite_offset );
551
+ ui::eimage ({ PACK_GENERAL, image_id + new_animation }, draw_offset + pos + img->animation .sprite_offset );
598
552
}
599
553
}
600
554
0 commit comments