Skip to content

Commit ca57faf

Browse files
author
s.kushnirenko
committed
ui: add salary button to personal mansion info window
1 parent 95aa827 commit ca57faf

8 files changed

+58
-11
lines changed

src/building/building.h

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class io_buffer;
2020
class building;
2121
struct object_info;
2222
struct painter;
23+
struct mouse;
2324

2425
constexpr uint32_t MAX_BUILDINGS = 4000;
2526
constexpr uint32_t MAX_FIGURES_PER_BUILDING = 8;
@@ -388,6 +389,7 @@ class building_impl {
388389
virtual void update_day() {}
389390
virtual void window_info_background(object_info &ctx) {}
390391
virtual void window_info_foreground(object_info &ctx) {}
392+
virtual int window_info_handle_mouse(const mouse *m, object_info &c) { return 0; }
391393
virtual bool draw_ornaments_and_animations_height(vec2i point, tile2i tile, painter &ctx);
392394
virtual e_overlay get_overlay() const { return OVERLAY_NONE; }
393395
virtual bool need_road_access() const { return true; }

src/building/building_mansion.cpp

+37-1
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,47 @@
33
#include "window/building/common.h"
44
#include "graphics/elements/panel.h"
55
#include "graphics/elements/lang_text.h"
6+
#include "graphics/text.h"
7+
#include "graphics/elements/button.h"
8+
#include "graphics/elements/generic_button.h"
9+
#include "city/emperor.h"
10+
#include "city/victory.h"
11+
#include "city/finance.h"
12+
#include "city/ratings.h"
13+
14+
struct window_info_mansion {
15+
int focus_button_id;
16+
};
17+
18+
static void button_set_salary(int rank, int param2) {
19+
if (!city_victory_has_won()) {
20+
city_emperor_set_salary_rank(rank);
21+
city_finance_update_salary();
22+
city_ratings_update_kingdom_explanation();
23+
//window_advisors_show();
24+
}
25+
}
26+
27+
window_info_mansion g_window_info_mansion;
28+
29+
static generic_button imperial_buttons[] = {
30+
{40, 90, 400, 20, button_set_salary, button_none, 0, 0},
31+
};
632

733
void building_mansion::window_info_background(object_info &c) {
834
c.help_id = 78;
35+
c.go_to_advisor.left_a = ADVISOR_IMPERIAL;
936
window_building_play_sound(&c, "wavs/gov_palace.wav");
1037
outer_panel_draw(c.offset, c.width_blocks, c.height_blocks);
1138
lang_text_draw_centered(103, 0, c.offset.x, c.offset.y + 10, 16 * c.width_blocks, FONT_LARGE_BLACK_ON_LIGHT);
1239
window_building_draw_description_at(c, 16 * c.height_blocks - 143, 103, 1);
13-
}
40+
41+
button_border_draw(c.offset.x + 40, c.offset.y + 90, 400, 20, g_window_info_mansion.focus_button_id == 2);
42+
int width = lang_text_draw(52, city_emperor_salary_rank() + 4, c.offset.x + 40, c.offset.y + 94, FONT_NORMAL_WHITE_ON_DARK);
43+
width += text_draw_number(city_emperor_salary_amount(), '@', " ", c.offset.x + 40 + width, c.offset.y + 94, FONT_NORMAL_WHITE_ON_DARK);
44+
lang_text_draw(52, 3, c.offset.x + 40 + width, c.offset.y + 94, FONT_NORMAL_WHITE_ON_DARK);
45+
}
46+
47+
int building_mansion::window_info_handle_mouse(const mouse *m, object_info &c) {
48+
return generic_buttons_handle_mouse(m, 0, 0, imperial_buttons, 8, &g_window_info_mansion.focus_button_id);
49+
}

src/building/building_mansion.h

+1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ class building_mansion : public building_impl {
66
public:
77
building_mansion(building &b) : building_impl(b) {}
88
virtual void window_info_background(object_info &ctx) override;
9+
virtual int window_info_handle_mouse(const mouse *m, object_info &c) override;
910
virtual e_sound_channel_city sound_channel() const override { return SOUND_CHANNEL_CITY_MANSION; }
1011
};

src/window/advisor/imperial.cpp src/window/advisor/advisor_imperial.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#include "imperial.h"
1+
#include "advisor_imperial.h"
22
#include "city/city_data.h"
33

44
#include "city/emperor.h"
@@ -78,6 +78,7 @@ static int get_request_status(int index) {
7878
}
7979
return 0;
8080
}
81+
8182
static void draw_request(int index, const scenario_request* request) {
8283
if (index >= 5) {
8384
return;
@@ -162,6 +163,7 @@ static int draw_background(void) {
162163

163164
return ADVISOR_HEIGHT;
164165
}
166+
165167
static void draw_foreground(void) {
166168
inner_panel_draw(64, 324, 32, 6);
167169

@@ -170,9 +172,11 @@ static void draw_foreground(void) {
170172
int width = lang_text_draw(52, 1, 72, 372, FONT_NORMAL_WHITE_ON_DARK);
171173
text_draw_money(city_emperor_personal_savings(), 80 + width, 372, FONT_NORMAL_WHITE_ON_DARK);
172174

175+
//
173176
button_border_draw(320, 367, 250, 20, focus_button_id == 1);
174177
lang_text_draw_centered(52, 2, 320, 372, 250, FONT_NORMAL_WHITE_ON_DARK);
175178

179+
// button set salary
176180
button_border_draw(70, 393, 500, 20, focus_button_id == 2);
177181
width = lang_text_draw(52, city_emperor_salary_rank() + 4, 120, 398, FONT_NORMAL_WHITE_ON_DARK);
178182
width += text_draw_number(city_emperor_salary_amount(), '@', " ", 120 + width, 398, FONT_NORMAL_WHITE_ON_DARK);

src/window/advisor/advisor_imperial.h

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#pragma once
2+
3+
#include "window/advisors.h"
4+
5+
const advisor_window_type* window_advisor_imperial(void);
6+

src/window/advisor/imperial.h

-8
This file was deleted.

src/window/advisors.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
#include "window/advisor/financial.h"
2727
#include "window/advisor/advisor_health.h"
2828
#include "window/advisor/housing.h"
29-
#include "window/advisor/imperial.h"
29+
#include "window/advisor/advisor_imperial.h"
3030
#include "window/advisor/labor.h"
3131
#include "window/advisor/military.h"
3232
#include "window/advisor/monuments.h"
@@ -131,6 +131,7 @@ static void set_advisor_window() {
131131
data.current_advisor_window = nullptr;
132132
}
133133
}
134+
134135
static void set_advisor(int advisor) {
135136
auto &data = g_window_advisors;
136137
data.current_advisor = advisor;
@@ -201,6 +202,7 @@ static void draw_background(void) {
201202
data.advisor_height = data.current_advisor_window->draw_background();
202203
graphics_reset_dialog();
203204
}
205+
204206
static void draw_foreground(void) {
205207
auto &data = g_window_advisors;
206208
graphics_set_to_dialog();

src/window/window_building_info.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -868,6 +868,7 @@ static int handle_specific_building_info_mouse(const mouse *m) {
868868
} else if (context.figure.drawn) {
869869
return window_building_handle_mouse_figure_list(m, &context);
870870
} else if (context.type == BUILDING_INFO_BUILDING) {
871+
building *b = building_get(context.building_id);
871872
switch (building_get(context.building_id)->type) {
872873
case BUILDING_BAZAAR:
873874
if (context.storage_show_special_orders)
@@ -906,6 +907,9 @@ static int handle_specific_building_info_mouse(const mouse *m) {
906907
else
907908
window_building_handle_mouse_warehouse(m, &context);
908909
break;
910+
911+
default:
912+
b->dcast()->window_info_handle_mouse(m, context);
909913
}
910914
}
911915
return 0;

0 commit comments

Comments
 (0)