Skip to content

Commit f20a54f

Browse files
committed
ui: empire window borders now load from config js
1 parent 2232c06 commit f20a54f

10 files changed

+74
-47
lines changed

src/empire/empire_object.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
full_empire_object g_empire_objects[MAX_OBJECTS];
2121

22-
void empire_object_foreach(void (*callback)(const empire_object*)) {
22+
void empire_object_foreach(std::function<void(const empire_object*)> callback) {
2323
auto& objects = g_empire_objects;
2424
for (int i = 0; i < MAX_OBJECTS; i++) {
2525
if (objects[i].in_use)

src/empire/empire_object.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#include "core/vec2i.h"
55
#include "game/resource.h"
66

7+
#include <functional>
8+
79
struct empire_object {
810
int id;
911
int type;
@@ -49,7 +51,7 @@ const full_empire_object* empire_get_full_object(int object_id);
4951
const empire_object* empire_object_get(int object_id);
5052
const empire_object* empire_object_get_our_city(void);
5153

52-
void empire_object_foreach(void (*callback)(const empire_object*));
54+
void empire_object_foreach(std::function<void(const empire_object *)> callback);
5355

5456
const empire_object* empire_object_get_battle_icon(int path_id, int year);
5557

src/graphics/boilerplate.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "platform/renderer.h"
55
#include "graphics/font.h"
66
#include "graphics/view/view.h"
7+
#include "graphics/image_desc.h"
78
#include "core/profiler.h"
89
#include "game/game.h"
910

@@ -701,6 +702,12 @@ const image_t* ImageDraw::img_generic(painter &ctx, int pak, int image_id, vec2i
701702
return img;
702703
}
703704

705+
const image_t *ImageDraw::img_generic(painter &ctx, const image_desc &imgd, vec2i p, color color_mask, float scale) {
706+
const image_t *img = image_get(imgd);
707+
graphics_renderer()->draw_image(ctx, img, p.x, p.y, color_mask, scale);
708+
return img;
709+
}
710+
704711
const image_t* ImageDraw::img_generic(painter &ctx, int image_id, vec2i p, color color_mask, float scale, bool internal_offset) {
705712
const image_t* img = image_get(image_id);
706713
vec2i offset{0, 0};

src/graphics/graphics.h

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
struct painter;
99
struct image_t;
10+
struct image_desc;
1011

1112
void graphics_clear_screen();
1213

@@ -37,6 +38,7 @@ void graphics_draw_from_texture(int image_id, vec2i pos, vec2i size);
3738
namespace ImageDraw {
3839
const image_t* img_generic(painter &ctx, int image_id, int x, int y, color color_mask = COLOR_MASK_NONE, float scale = 1.0f);
3940
const image_t* img_generic(painter &ctx, int pak, int image_id, vec2i p, color color_mask = COLOR_MASK_NONE, float scale = 1.0f);
41+
const image_t* img_generic(painter &ctx, const image_desc &img, vec2i p, color color_mask = COLOR_MASK_NONE, float scale = 1.0f);
4042
const image_t* img_generic(painter &ctx, int image_id, vec2i p, color color_mask = COLOR_MASK_NONE, float scale = 1.0f, bool internal_offset = false);
4143
void img_sprite(painter &ctx, int image_id, int x, int y, color color_mask = COLOR_MASK_NONE, float scale = 1.0f, bool alpha = false);
4244
inline void img_sprite(painter &ctx, int image_id, vec2i p, color color_mask = COLOR_MASK_NONE, float scale = 1.0f, bool alpha = false) { img_sprite(ctx, image_id, p.x, p.y, color_mask, scale, alpha); }

src/graphics/image_groups.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ extern const token_holder<e_pack, PACK_UNLOADED, PACK_MAX> e_pack_type_tokens;
203203
#define GROUP_POPULATION_GRAPH_BAR PACK_GENERAL, 157
204204
//#define GROUP_BULLET PACK_GENERAL, 158
205205
//#define GROUP_BUILDING_BARRACKS PACK_GENERAL, 166
206-
#define GROUP_EMPIRE_PANELS PACK_GENERAL, 172
206+
//#define GROUP_EMPIRE_PANELS PACK_GENERAL, 172
207207
//#define GROUP_RESOURCE_STOCK_GAMEMEAT_5 PACK_GENERAL, 205 // 173
208208
//#define GROUP_RESOURCE_STOCK_STRAW_2 PACK_GENERAL, 206
209209
#define GROUP_RESOURCE_STOCK_WEAPONS_2 PACK_GENERAL, 207

src/scenario/invasion.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,11 @@ bool scenario_invasion_exists_upcoming(void) {
134134
return false;
135135
}
136136

137-
void scenario_invasion_foreach_warning(void (*callback)(int x, int y, int image_id)) {
137+
void scenario_invasion_foreach_warning(std::function<void(vec2i, int)> callback) {
138138
auto &data = g_invasion_data;
139139
for (int i = 0; i < MAX_INVASION_WARNINGS; i++) {
140140
if (data.warnings[i].in_use && data.warnings[i].handled)
141-
callback(data.warnings[i].pos.x, data.warnings[i].pos.y, data.warnings[i].image_id);
141+
callback(data.warnings[i].pos, data.warnings[i].image_id);
142142
}
143143
}
144144

src/scenario/invasion.h

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1-
#ifndef SCENARIO_INVASION_H
2-
#define SCENARIO_INVASION_H
1+
#pragma once
32

43
#include "core/buffer.h"
4+
#include "core/vec2i.h"
5+
6+
#include <functional>
57

68
void scenario_invasion_clear(void);
79

810
void scenario_invasion_init(void);
911

1012
bool scenario_invasion_exists_upcoming(void);
1113

12-
void scenario_invasion_foreach_warning(void (*callback)(int x, int y, int image_id));
14+
void scenario_invasion_foreach_warning(std::function<void(vec2i, int)> callback);
1315

1416
int scenario_invasion_count(void);
1517

@@ -22,5 +24,3 @@ void scenario_invasion_start_from_cheat(void);
2224
void scenario_invasion_start_from_console(int attack_type, int size, int invasion_point);
2325

2426
void scenario_invasion_process(void);
25-
26-
#endif // SCENARIO_INVASION_H

src/scripts/imagepaks.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ imagepaks = [
1010
{id: PACK_TEMPLE_RA, name:"Temple_ra", index:32000, system:false}, // 32000 --> 32000 + 239
1111
{id: PACK_TEMPLE_RA, name:"Temple_ra", index:32000, system:false}, // 32000 --> 32000 + 239
1212
{id: PACK_EXPANSION, name:"Expansion", index:23035, system:false}, // 23035 --> 23935
13-
{id: PACK_EMPIRE, name:"Empire", index:23035, system:false}, // 23035 --> 23935
13+
{id: PACK_EMPIRE, name:"Empire", index:20305, system:false}, // 20305 --> 20506 (+177)
1414
//{id: PACK_CUSTOM, name:"Pharaoh_Custom", index:30000, system:false, custom:true}, // 30000 -->
1515
]

src/scripts/ui.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -1406,10 +1406,17 @@ empire_window = {
14061406
trade_resource_offset : 3,
14071407
sell_res_group : 47,
14081408
trade_button_offset_y : 10,
1409+
start_pos : [16, 16],
1410+
finish_pos : [32, 136],
1411+
image : {pack:PACK_EMPIRE, id:1},
1412+
bottom_image : {pack:PACK_GENERAL, id:172, offset:3},
1413+
horizontal_bar : {pack:PACK_GENERAL, id:172, offset:1},
1414+
vertical_bar : {pack:PACK_GENERAL, id:172, offset:0},
1415+
cross_bar : {pack:PACK_GENERAL, id:172, offset:2},
14091416

14101417
ui : {
14111418

1412-
1419+
14131420
}
14141421
}
14151422

src/window/window_empire.cpp

+44-35
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ struct empire_window : public autoconfig_window_t<empire_window> {
148148
int trade_resource_offset;
149149
int sell_res_group;
150150
int trade_button_offset_y;
151+
vec2i start_pos, finish_pos;
152+
image_desc image, bottom_image, horizontal_bar, vertical_bar, cross_bar;
151153
svector<object_trade_info, 16> buying_goods;
152154
svector<object_trade_info, 16> selling_goods;
153155

@@ -177,9 +179,18 @@ struct empire_window : public autoconfig_window_t<empire_window> {
177179
trade_resource_offset = arch.r_int("trade_resource_offset");
178180
sell_res_group = arch.r_int("sell_res_group");
179181
trade_button_offset_y = arch.r_int("trade_button_offset_y");
182+
start_pos = arch.r_vec2i("start_pos");
183+
finish_pos = arch.r_vec2i("finish_pos");
184+
arch.r_desc("image", image);
185+
arch.r_desc("bottom_image", bottom_image);
186+
arch.r_desc("horizontal_bar", horizontal_bar);
187+
arch.r_desc("vertical_bar", vertical_bar);
188+
arch.r_desc("cross_bar", cross_bar);
180189
}
181190

182191
void draw_map();
192+
void draw_empire_object(const empire_object *obj);
193+
void draw_paneling();
183194
};
184195

185196
empire_window g_empire_window;
@@ -465,7 +476,7 @@ static void draw_object_info(void) {
465476
}
466477
}
467478

468-
static void draw_empire_object(const empire_object* obj) {
479+
void empire_window::draw_empire_object(const empire_object* obj) {
469480
auto &data = g_empire_window;
470481
if (obj->type == EMPIRE_OBJECT_LAND_TRADE_ROUTE || obj->type == EMPIRE_OBJECT_SEA_TRADE_ROUTE) {
471482
if (!g_empire.is_trade_route_open(obj->trade_route_id)) {
@@ -561,26 +572,25 @@ static void draw_empire_object(const empire_object* obj) {
561572
}
562573
}
563574

564-
static void draw_invasion_warning(int x, int y, int image_id) {
565-
auto &data = g_empire_window;
566-
painter ctx = game.painter();
567-
ImageDraw::img_generic(ctx, image_id, vec2i{data.draw_offset.x + x, data.draw_offset.y + y});
568-
}
569-
570575
void empire_window::draw_map() {
571576
painter ctx = game.painter();
572-
graphics_set_clip_rectangle(min_pos + vec2i{16, 16}, vec2i{max_pos - min_pos} - vec2i{32, 136});
573577

574-
g_empire_map.set_viewport(max_pos - min_pos - vec2i{32, 136});
578+
graphics_set_clip_rectangle(min_pos + start_pos, vec2i{max_pos - min_pos} - finish_pos);
579+
580+
g_empire_map.set_viewport(max_pos - min_pos - finish_pos);
575581

576-
draw_offset = min_pos + vec2i{16, 16};
582+
draw_offset = min_pos + start_pos;
577583
draw_offset = g_empire_map.adjust_scroll(draw_offset);
578584

579-
ImageDraw::img_generic(ctx, image_id_from_group(GROUP_EMPIRE_MAP), draw_offset);
585+
ImageDraw::img_generic(ctx, image_group(image), draw_offset);
580586

581-
empire_object_foreach(draw_empire_object);
587+
empire_object_foreach([this] (const empire_object *obj) {
588+
draw_empire_object(obj);
589+
});
582590

583-
scenario_invasion_foreach_warning(draw_invasion_warning);
591+
scenario_invasion_foreach_warning([&] (vec2i pos, int image_id) {
592+
ImageDraw::img_generic(ctx, image_id, draw_offset + pos);
593+
});
584594

585595
graphics_reset_clip_rectangle();
586596
}
@@ -613,39 +623,38 @@ static void draw_panel_buttons(const empire_city* city) {
613623
}
614624
}
615625

616-
static void draw_paneling() {
617-
auto &data = g_empire_window;
626+
void empire_window::draw_paneling() {
618627
painter ctx = game.painter();
619-
int image_base = image_id_from_group(GROUP_EMPIRE_PANELS);
620628
// bottom panel background
621-
graphics_set_clip_rectangle(data.min_pos, data.max_pos - data.min_pos);
622-
for (int x = data.min_pos.x; x < data.max_pos.x; x += 70) {
623-
ImageDraw::img_generic(ctx, image_base + 3, vec2i{x, data.max_pos.y - 140});
624-
ImageDraw::img_generic(ctx, image_base + 3, vec2i{x, data.max_pos.y - 100});
625-
ImageDraw::img_generic(ctx, image_base + 3, vec2i{x, data.max_pos.y - 60});
626-
ImageDraw::img_generic(ctx, image_base + 3, vec2i{x, data.max_pos.y - 20});
629+
graphics_set_clip_rectangle(min_pos, max_pos - min_pos);
630+
631+
for (int x = min_pos.x; x < max_pos.x; x += 70) {
632+
ImageDraw::img_generic(ctx, bottom_image, vec2i{x, max_pos.y - 140});
633+
ImageDraw::img_generic(ctx, bottom_image, vec2i{x, max_pos.y - 100});
634+
ImageDraw::img_generic(ctx, bottom_image, vec2i{x, max_pos.y - 60});
635+
ImageDraw::img_generic(ctx, bottom_image, vec2i{x, max_pos.y - 20});
627636
}
628637

629638
// horizontal bar borders
630-
for (int x = data.min_pos.x; x < data.max_pos.x; x += 86) {
631-
ImageDraw::img_generic(ctx, image_base + 1, vec2i{x, data.min_pos.y});
632-
ImageDraw::img_generic(ctx, image_base + 1, vec2i{x, data.max_pos.y - 140});
633-
ImageDraw::img_generic(ctx, image_base + 1, vec2i{x, data.max_pos.y - 16});
639+
for (int x = min_pos.x; x < max_pos.x; x += 86) {
640+
ImageDraw::img_generic(ctx, horizontal_bar, vec2i{x, min_pos.y});
641+
ImageDraw::img_generic(ctx, horizontal_bar, vec2i{x, max_pos.y - 140});
642+
ImageDraw::img_generic(ctx, horizontal_bar, vec2i{x, max_pos.y - 16});
634643
}
635644

636645
// vertical bar borders
637-
for (int y = data.min_pos.y + 16; y < data.max_pos.y; y += 86) {
638-
ImageDraw::img_generic(ctx, image_base, vec2i{data.min_pos.x, y});
639-
ImageDraw::img_generic(ctx, image_base, vec2i{data.max_pos.x - 16, y});
646+
for (int y = min_pos.y + 16; y < max_pos.y; y += 86) {
647+
ImageDraw::img_generic(ctx, vertical_bar, vec2i{min_pos.x, y});
648+
ImageDraw::img_generic(ctx, vertical_bar, vec2i{max_pos.x - 16, y});
640649
}
641650

642651
// crossbars
643-
ImageDraw::img_generic(ctx, image_base + 2, vec2i{data.min_pos.x, data.min_pos.y});
644-
ImageDraw::img_generic(ctx, image_base + 2, vec2i{data.min_pos.x, data.max_pos.y - 140});
645-
ImageDraw::img_generic(ctx, image_base + 2, vec2i{data.min_pos.x, data.max_pos.y - 16});
646-
ImageDraw::img_generic(ctx, image_base + 2, vec2i{data.max_pos.x - 16, data.min_pos.y});
647-
ImageDraw::img_generic(ctx, image_base + 2, vec2i{data.max_pos.x - 16, data.max_pos.y - 140});
648-
ImageDraw::img_generic(ctx, image_base + 2, vec2i{data.max_pos.x - 16, data.max_pos.y - 16});
652+
ImageDraw::img_generic(ctx, cross_bar, vec2i{min_pos.x, min_pos.y});
653+
ImageDraw::img_generic(ctx, cross_bar, vec2i{min_pos.x, max_pos.y - 140});
654+
ImageDraw::img_generic(ctx, cross_bar, vec2i{min_pos.x, max_pos.y - 16});
655+
ImageDraw::img_generic(ctx, cross_bar, vec2i{max_pos.x - 16, min_pos.y});
656+
ImageDraw::img_generic(ctx, cross_bar, vec2i{max_pos.x - 16, max_pos.y - 140});
657+
ImageDraw::img_generic(ctx, cross_bar, vec2i{max_pos.x - 16, max_pos.y - 16});
649658

650659
graphics_reset_clip_rectangle();
651660
}

0 commit comments

Comments
 (0)