Skip to content

Commit 710f65e

Browse files
committed
ui: request button config moved to js
1 parent 5f864ce commit 710f65e

File tree

6 files changed

+80
-38
lines changed

6 files changed

+80
-38
lines changed

src/graphics/elements/ui.h

+2
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ struct element {
119119
virtual void image(image_desc) {}
120120
virtual image_desc image() const { return {}; }
121121
virtual void font(int) {}
122+
virtual e_font font() const { return FONT_INVALID; }
122123
virtual void width(int v) { size.x = v; }
123124
virtual int value() const { return 0; }
124125
virtual void select(bool v) {}
@@ -250,6 +251,7 @@ struct elabel : public element {
250251
virtual void text(pcstr) override;
251252
virtual void text_color(color) override;
252253
virtual void font(int) override;
254+
virtual e_font font() const override { return _font; }
253255
virtual void width(int) override;
254256
};
255257

src/platform/renderer_filters.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
#include "imgui/imgui.h"
55
#include "imgui/imgui_internal.h"
66
#include "widget/debug_console.h"
7+
#include "platform/platform.h"
78

89
#include <SDL.h>
910

1011
ANK_REGISTER_PROPS_ITERATOR(config_load_filter_properties);
1112

12-
#if !defined(GAME_PLATFORM_ANDROID)
13+
#if defined(GAME_PLATFORM_WIN) || defined(GAME_PLATFORM_LINUX)
1314
#include "gpupixel.h"
1415

1516
struct renderer_filter_t {

src/scripts/ui.js

+9
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,15 @@ advisor_imperial_window = {
500500
rating_label : label({pos:[460, 24]}),
501501
rating_advice : multiline({pos:[60, 46], wrap: 500}),
502502
inner_panel : inner_panel({pos:[32, 90], size:[36, 14] }),
503+
button_request : dummy({pos:[38, 96], size:[562, 45],
504+
ui : {
505+
button_request_icon : dummy({pos:[7, 7]}),
506+
button_request_amount : dummy({pos:[30, 7], font: FONT_NORMAL_WHITE_ON_DARK}),
507+
button_request_months : dummy({pos:[310, 7], font: FONT_NORMAL_WHITE_ON_DARK}),
508+
button_request_saved : dummy({pos:[30, 25], font: FONT_NORMAL_WHITE_ON_DARK}),
509+
button_request_allow : dummy({pos:[310, 25], font: FONT_NORMAL_WHITE_ON_DARK}),
510+
}
511+
}),
503512

504513
bottom_panel : inner_panel({pos:[64, 324], size:[32, 6] }),
505514
send_gift : button({pos:[320, 362], size:[250, 24], text:{group:52, id:49}, tooltip:[68, 133] }),

src/window/advisor/advisor_imperial.cpp

+61-31
Original file line numberDiff line numberDiff line change
@@ -35,29 +35,34 @@ enum E_STATUS {
3535

3636
static int get_request_status(int index) {
3737
scenario_request request = scenario_request_get_visible(index);
38-
if (request.is_valid()) {
39-
if (request.resource == RESOURCE_DEBEN) {
40-
if (city_finance_treasury() <= request.amount) {
41-
return STATUS_NOT_ENOUGH_RESOURCES;
42-
}
43-
} else if (request.resource == RESOURCE_TROOPS) {
44-
if (city_military_months_until_distant_battle() > 0 && !city_military_distant_battle_kingdome_army_is_traveling_forth()) {
45-
if (g_city.military.total_batalions <= 0) {
46-
return STATUS_NO_LEGIONS_AVAILABLE;
47-
} else if (g_city.military.kingdome_service_batalions <= 0) {
48-
return STATUS_NO_LEGIONS_SELECTED;
49-
} else {
50-
return STATUS_CONFIRM_SEND_LEGIONS;
51-
}
52-
}
53-
} else {
54-
if (city_resource_count((e_resource)request.resource) < request.resource_amount()) {
55-
return STATUS_NOT_ENOUGH_RESOURCES;
56-
}
57-
}
58-
return request.event_id;
38+
if (!request.is_valid()) {
39+
return -1;
5940
}
60-
return -1;
41+
42+
if (request.resource == RESOURCE_DEBEN && city_finance_treasury() <= request.amount) {
43+
return STATUS_NOT_ENOUGH_RESOURCES;
44+
}
45+
46+
if (request.resource == RESOURCE_TROOPS
47+
&& city_military_months_until_distant_battle() > 0
48+
&& !city_military_distant_battle_kingdome_army_is_traveling_forth()) {
49+
50+
if (g_city.military.total_batalions <= 0) {
51+
return STATUS_NO_LEGIONS_AVAILABLE;
52+
}
53+
54+
if (g_city.military.kingdome_service_batalions <= 0) {
55+
return STATUS_NO_LEGIONS_SELECTED;
56+
}
57+
58+
return STATUS_CONFIRM_SEND_LEGIONS;
59+
}
60+
61+
if (city_resource_count(request.resource) < request.resource_amount()) {
62+
return STATUS_NOT_ENOUGH_RESOURCES;
63+
}
64+
65+
return request.event_id;
6166
}
6267

6368
void ui::advisor_imperial_window::draw_foreground() {
@@ -81,6 +86,12 @@ int ui::advisor_imperial_window::draw_background() {
8186
return 0;
8287
}
8388

89+
void ui::advisor_imperial_window::load(archive arch, pcstr section) {
90+
autoconfig_window::load(arch, section);
91+
92+
93+
}
94+
8495
void ui::advisor_imperial_window::handle_request(int index) {
8596
int status = get_request_status(index);
8697
// in C3, the enums are offset by two! (I have not fixed this)
@@ -93,15 +104,19 @@ void ui::advisor_imperial_window::handle_request(int index) {
93104
case STATUS_NO_LEGIONS_AVAILABLE:
94105
window_ok_dialog_show("#popup_dialog_no_legions_available");
95106
break;
107+
96108
case STATUS_NO_LEGIONS_SELECTED:
97109
window_ok_dialog_show("#popup_dialog_no_legions_selected");
98110
break;
111+
99112
case STATUS_CONFIRM_SEND_LEGIONS:
100113
window_ok_dialog_show("#popup_dialog_send_troops");
101114
break;
115+
102116
case STATUS_NOT_ENOUGH_RESOURCES:
103117
window_ok_dialog_show("#popup_dialog_not_enough_goods");
104118
break;
119+
105120
default:
106121
window_yes_dialog_show("#popup_dialog_send_goods", [selected_request_id = index] {
107122
scenario_request_dispatch(selected_request_id);
@@ -114,7 +129,14 @@ void ui::advisor_imperial_window::ui_draw_foreground() {
114129
ui.begin_widget(pos);
115130
ui.draw();
116131

117-
int num_requests = 0;
132+
const auto &button_request = ui["button_request"];
133+
const auto &button_request_icon = ui["button_request_icon"];
134+
const auto &button_request_amount = ui["button_request_amount"];
135+
const auto &button_request_months = ui["button_request_months"];
136+
const auto &button_request_saved = ui["button_request_saved"];
137+
const auto &button_request_allow = ui["button_request_allow"];
138+
139+
int start_req_index = 0;
118140
if (city_military_months_until_distant_battle() > 0
119141
&& !city_military_distant_battle_kingdome_army_is_traveling_forth()) {
120142

@@ -138,18 +160,26 @@ void ui::advisor_imperial_window::ui_draw_foreground() {
138160
bstring128 distant_strenght_text;
139161
distant_strenght_text.printf("%s %s %d", ui::str(52, strength_text_id), ui::str(8, 4), city_military_months_until_distant_battle());
140162
ui.label(distant_strenght_text, vec2i{80, 120}, FONT_NORMAL_WHITE_ON_DARK);
141-
num_requests = 1;
163+
start_req_index = 1;
142164
}
143165

166+
const vec2i icon_offset = button_request_icon.pos - button_request.pos;
167+
const vec2i amount_offset = button_request_amount.pos - button_request.pos;
168+
const vec2i months_offset = button_request_months.pos - button_request.pos;
169+
const vec2i saved_offset = button_request_saved.pos - button_request.pos;
170+
const vec2i allow_offset = button_request_allow.pos - button_request.pos;
171+
144172
auto requests = scenario_get_visible_requests();
145-
for (int index = num_requests, size = std::min<int>(5, (int)requests.size()); index < size; ++index) {
173+
int num_requests = std::min<int>(5, (int)requests.size());
174+
for (int index = start_req_index; index < num_requests; ++index) {
146175
const scenario_request &request = requests[index];
147176

148-
ui.button("", vec2i{38, 96 + 42 * index}, vec2i{560, 42})
177+
vec2i request_pos = button_request.pos + vec2i{ 0, index * button_request.size.y };
178+
ui.button("", request_pos, button_request.size)
149179
.onclick([this, index] (int, int) {
150180
this->handle_request(index);
151181
});
152-
ui.icon(vec2i{45, 103 + 42 * index}, request.resource);
182+
ui.icon(request_pos + icon_offset, request.resource);
153183

154184
bstring256 amount_text;
155185
bstring256 month_to_comply;
@@ -160,10 +190,10 @@ void ui::advisor_imperial_window::ui_draw_foreground() {
160190
int quat = stack_proper_quantity(request_amount, request.resource);
161191

162192
amount_text.printf("%u %s", quat, ui::str(23, request.resource));
163-
ui.label(amount_text, vec2i{65, 102 + 42 * index}, FONT_NORMAL_WHITE_ON_DARK);
193+
ui.label(amount_text, request_pos + amount_offset, button_request_amount.font());
164194

165195
month_to_comply.printf("%s %u %s", ui::str(8, 4), request.months_to_comply, ui::str(12, 2));
166-
ui.label(month_to_comply, vec2i{310, 102 + 42 * index}, FONT_NORMAL_WHITE_ON_DARK);
196+
ui.label(month_to_comply, request_pos + months_offset, button_request_months.font());
167197

168198
if (request.resource == RESOURCE_DEBEN) {
169199
// request for money
@@ -180,8 +210,8 @@ void ui::advisor_imperial_window::ui_draw_foreground() {
180210
allow_str = (amount_stored < request_amount) ? ui::str(52, 48) : ui::str(52, 47);
181211
}
182212

183-
ui.label(saved_resources, vec2i{40, 120 + 42 * index}, FONT_NORMAL_WHITE_ON_DARK);
184-
ui.label(allow_str, vec2i{310, 120 + 42 * index}, FONT_NORMAL_WHITE_ON_DARK);
213+
ui.label(saved_resources, request_pos + saved_offset, button_request_saved.font());
214+
ui.label(allow_str, request_pos + allow_offset, button_request_allow.font());
185215
}
186216

187217
if (!num_requests) {

src/window/advisor/advisor_imperial.h

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ struct advisor_imperial_window : public advisor_window_t<advisor_imperial_window
1313
virtual void draw_foreground() override;
1414
virtual void init() override {}
1515

16+
virtual void load(archive arch, pcstr) override;
17+
1618
void handle_request(int index);
1719

1820
static advisor_window *instance();

src/window/window_info_storageyard.cpp

+4-6
Original file line numberDiff line numberDiff line change
@@ -63,23 +63,21 @@ void info_window_storageyard::draw_background(object_info *c) {
6363
auto &data = g_window_building_distribution;
6464
data.building_id = c->building_id;
6565

66-
if (!c->has_road_access) {
67-
ui["warning_text"] = ui::str(69, 25);
68-
}
69-
66+
ui["warning_text"] = !c->has_road_access ? ui::str(69, 25) : "";
7067
ui["storing"].text_var("#granary_storing %u #granary_units", warehouse->total_stored());
7168
ui["free_space"].text_var("#granary_space_for %u #granary_units", warehouse->freespace());
7269

7370
const resource_list &resources = city_resource_get_available();
74-
int gidx = 0;
71+
7572
auto _icon = [] (int idx) { bstring32 id_icon; id_icon.printf("good%u_icon", idx); return id_icon; };
7673
auto _text = [] (int idx) { bstring32 id_text; id_text.printf("good%u_text", idx); return id_text; };
7774

78-
for (int i = 0; i < 8; ++i) {
75+
for (int gidx = 0; gidx < 8; ++gidx) {
7976
ui[_icon(gidx)].image(RESOURCE_NONE);
8077
ui[_text(gidx)] = "";
8178
}
8279

80+
int gidx = 0;
8381
for (const auto &r : resources) {
8482
int loads = warehouse->amount(r.type);
8583
if (loads) {

0 commit comments

Comments
 (0)