1 #include "chief.h"
2
3 #include "city/data_private.h"
4 #include "city/figures.h"
5 #include "city/finance.h"
6 #include "city/health.h"
7 #include "city/houses.h"
8 #include "city/labor.h"
9 #include "city/migration.h"
10 #include "city/military.h"
11 #include "city/population.h"
12 #include "city/resource.h"
13 #include "city/sentiment.h"
14 #include "core/calc.h"
15 #include "graphics/image.h"
16 #include "graphics/lang_text.h"
17 #include "graphics/panel.h"
18 #include "graphics/text.h"
19 #include "scenario/invasion.h"
20 #include "scenario/property.h"
21 #include "translation/translation.h"
22
23
24 #define ADVISOR_HEIGHT 24
25 #define X_OFFSET 232
26
draw_title(int y,int text_id)27 static void draw_title(int y, int text_id)
28 {
29 image_draw(image_group(GROUP_BULLET), 32, y + 1);
30 lang_text_draw(61, text_id, 52, y, FONT_NORMAL_WHITE);
31
32 }
33
draw_background(void)34 static int draw_background(void)
35 {
36 int width;
37
38 outer_panel_draw(0, 0, 40, ADVISOR_HEIGHT);
39 image_draw(image_group(GROUP_ADVISOR_ICONS) + 11, 10, 10);
40
41 lang_text_draw(61, 0, 60, 12, FONT_LARGE_BLACK);
42 inner_panel_draw(24, 60, 37, 17);
43
44 // workers
45 draw_title(66, 1);
46 if (city_labor_unemployment_percentage() > 0) {
47 width = lang_text_draw(61, 12, X_OFFSET, 66, FONT_NORMAL_RED);
48 width += text_draw_percentage(city_labor_unemployment_percentage(), X_OFFSET + width, 66, FONT_NORMAL_RED);
49 text_draw_number(city_labor_workers_unemployed() - city_labor_workers_needed(), '(', ")",
50 X_OFFSET + width, 66, FONT_NORMAL_RED, 0);
51 } else if (city_labor_workers_needed() > 0) {
52 width = lang_text_draw(61, 13, X_OFFSET, 66, FONT_NORMAL_RED);
53 lang_text_draw_amount(8, 12, city_labor_workers_needed(), X_OFFSET + width, 66, FONT_NORMAL_RED);
54 } else {
55 lang_text_draw(61, 14, X_OFFSET, 66, FONT_NORMAL_GREEN);
56 }
57
58 // finance
59 draw_title(86, 2);
60 int treasury = city_finance_treasury();
61 int balance_last_year = city_finance_overview_last_year()->balance;
62 if (treasury > balance_last_year) {
63 width = lang_text_draw(61, 15, X_OFFSET, 86, FONT_NORMAL_GREEN);
64 text_draw_money(treasury - balance_last_year, X_OFFSET + width, 86, FONT_NORMAL_GREEN);
65 } else if (treasury < balance_last_year) {
66 width = lang_text_draw(61, 16, X_OFFSET, 86, FONT_NORMAL_RED);
67 text_draw_money(balance_last_year - treasury, X_OFFSET + width, 86, FONT_NORMAL_RED);
68 } else {
69 lang_text_draw(61, 17, X_OFFSET, 86, FONT_NORMAL_GREEN);
70 }
71
72 // migration
73 draw_title(106, 3);
74 if (city_figures_total_invading_enemies() > 3) {
75 lang_text_draw(61, 79, X_OFFSET, 106, FONT_NORMAL_GREEN);
76 } else if (city_migration_newcomers() >= 5) {
77 lang_text_draw(61, 25, X_OFFSET, 106, FONT_NORMAL_GREEN);
78 } else if (city_migration_no_room_for_immigrants()) {
79 lang_text_draw(61, 18, X_OFFSET, 106, FONT_NORMAL_RED);
80 } else if (city_migration_percentage() >= 80) {
81 lang_text_draw(61, 25, X_OFFSET, 106, FONT_NORMAL_GREEN);
82 } else {
83 int text_group = 61;
84 int text_id;
85 switch (city_migration_no_immigration_cause()) {
86 case NO_IMMIGRATION_LOW_WAGES: text_id = 19; break;
87 case NO_IMMIGRATION_NO_JOBS: text_id = 20; break;
88 case NO_IMMIGRATION_NO_FOOD: text_id = 21; break;
89 case NO_IMMIGRATION_HIGH_TAXES: text_id = 22; break;
90 case NO_IMMIGRATION_MANY_TENTS: text_id = 70; break;
91 case NO_IMMIGRATION_LOW_MOOD: text_id = 71; break;
92 case NO_IMMIGRATION_SQUALOR:
93 text_group = CUSTOM_TRANSLATION;
94 text_id = TR_ADVISOR_CHIEF_NO_IMMIGRATION_SQUALOR;
95 break;
96 default: text_id = 0; break;
97 }
98 if (text_id) {
99 lang_text_draw(text_group, text_id, X_OFFSET, 106, FONT_NORMAL_RED);
100 }
101 }
102
103 // housing capacity
104 image_draw(image_group(GROUP_BULLET), 32, 126 + 1);
105 text_draw(translation_for(TR_HEADER_HOUSING), 52, 126, FONT_NORMAL_WHITE, 0);
106
107 if (!city_population_open_housing_capacity()) {
108 width = text_draw(translation_for(TR_ADVISOR_HOUSING_NO_ROOM), X_OFFSET, 126, FONT_NORMAL_GREEN, 0);
109 } else {
110 width = text_draw(translation_for(TR_ADVISOR_HOUSING_ROOM), X_OFFSET, 126, FONT_NORMAL_GREEN, 0);
111 text_draw_number(city_population_open_housing_capacity(), '@', " ", X_OFFSET + width, 126, FONT_NORMAL_GREEN, 0);
112 }
113
114 // food stocks
115 draw_title(146, 4);
116 if (scenario_property_rome_supplies_wheat()) {
117 lang_text_draw(61, 26, X_OFFSET, 146, FONT_NORMAL_GREEN);
118 } else if (city_resource_food_supply_months() > 0) {
119 width = lang_text_draw(61, 28, X_OFFSET, 146, FONT_NORMAL_GREEN);
120 lang_text_draw_amount(8, 4, city_resource_food_supply_months(), X_OFFSET + width, 146, FONT_NORMAL_GREEN);
121 } else {
122 lang_text_draw(61, 27, X_OFFSET, 146, FONT_NORMAL_RED);
123 }
124
125 // food consumption
126 draw_title(166, 62);
127 if (scenario_property_rome_supplies_wheat()) {
128 lang_text_draw(61, 26, X_OFFSET, 166, FONT_NORMAL_GREEN);
129 } else {
130 int pct = city_resource_food_percentage_produced();
131 if (pct > 150) {
132 lang_text_draw(61, 63, X_OFFSET, 166, FONT_NORMAL_GREEN);
133 } else if (pct > 105) {
134 lang_text_draw(61, 64, X_OFFSET, 166, FONT_NORMAL_GREEN);
135 } else if (pct > 95) {
136 lang_text_draw(61, 65, X_OFFSET, 166, FONT_NORMAL_GREEN);
137 } else if (pct > 75) {
138 lang_text_draw(61, 66, X_OFFSET, 166, FONT_NORMAL_RED);
139 } else if (pct > 30) {
140 lang_text_draw(61, 67, X_OFFSET, 166, FONT_NORMAL_RED);
141 } else if (pct > 0) {
142 lang_text_draw(61, 68, X_OFFSET, 166, FONT_NORMAL_RED);
143 } else {
144 lang_text_draw(61, 69, X_OFFSET, 166, FONT_NORMAL_RED);
145 }
146 }
147
148 // military
149 draw_title(186, 5);
150
151 int food_text = 0;
152 int food_stress = city_data.mess_hall.food_stress_cumulative;
153
154 if (food_stress > 60) {
155 food_text = TR_ADVISOR_LEGION_FOOD_CRITICAL;
156 } else if (food_stress > 40) {
157 food_text = TR_ADVISOR_LEGION_FOOD_NEEDED;
158 }
159 if (food_text && city_figures_soldiers() > 0) {
160 text_draw(translation_for(food_text), X_OFFSET, 186, FONT_NORMAL_RED, 0);
161 } else if (city_figures_imperial_soldiers()) {
162 lang_text_draw(61, 76, X_OFFSET, 186, FONT_NORMAL_RED);
163 } else if (city_figures_enemies()) {
164 lang_text_draw(61, 75, X_OFFSET, 186, FONT_NORMAL_RED);
165 } else if (scenario_invasion_exists_upcoming()) {
166 lang_text_draw(61, 74, X_OFFSET, 186, FONT_NORMAL_RED);
167 } else if (city_military_distant_battle_roman_army_is_traveling()) {
168 lang_text_draw(61, 78, X_OFFSET, 186, FONT_NORMAL_GREEN);
169 } else if (city_military_months_until_distant_battle() > 0) {
170 lang_text_draw(61, 77, X_OFFSET, 186, FONT_NORMAL_RED);
171 } else if (city_figures_soldiers() > 0) { // FIXED was ">=0" (always true)
172 lang_text_draw(61, 73, X_OFFSET, 186, FONT_NORMAL_GREEN);
173 } else {
174 lang_text_draw(61, 72, X_OFFSET, 186, FONT_NORMAL_GREEN);
175 }
176
177 // crime
178 draw_title(206, 6);
179 if (city_figures_rioters()) {
180 lang_text_draw(61, 33, X_OFFSET, 206, FONT_NORMAL_RED);
181 } else if (city_figures_criminals() > 10) {
182 lang_text_draw(61, 32, X_OFFSET, 206, FONT_NORMAL_RED);
183 } else if (city_figures_criminals()) {
184 lang_text_draw(61, 31, X_OFFSET, 206, FONT_NORMAL_RED);
185 } else if (city_figures_protesters() || city_sentiment_crime_cooldown()) {
186 lang_text_draw(61, 30, X_OFFSET, 206, FONT_NORMAL_RED);
187 } else {
188 lang_text_draw(61, 29, X_OFFSET, 206, FONT_NORMAL_GREEN);
189 }
190
191 // health
192 draw_title(226, 7);
193 int health_rate = city_health();
194 if (health_rate >= 40) {
195 lang_text_draw(56, health_rate / 10 + 27, X_OFFSET, 226, FONT_NORMAL_GREEN);
196 } else {
197 lang_text_draw(56, health_rate / 10 + 27, X_OFFSET, 226, FONT_NORMAL_RED);
198 }
199
200 // education
201 house_demands *demands = city_houses_demands();
202 draw_title(246, 8);
203 if (demands->education == 1) {
204 lang_text_draw(61, 39, X_OFFSET, 246, FONT_NORMAL_RED);
205 } else if (demands->education == 2) {
206 lang_text_draw(61, 40, X_OFFSET, 246, FONT_NORMAL_RED);
207 } else if (demands->education == 3) {
208 lang_text_draw(61, 41, X_OFFSET, 246, FONT_NORMAL_RED);
209 } else {
210 lang_text_draw(61, 42, X_OFFSET, 246, FONT_NORMAL_GREEN);
211 }
212
213 // religion
214 draw_title(266, 9);
215 if (demands->religion == 1) {
216 lang_text_draw(61, 46, X_OFFSET, 266, FONT_NORMAL_RED);
217 } else if (demands->religion == 2) {
218 lang_text_draw(61, 47, X_OFFSET, 266, FONT_NORMAL_RED);
219 } else if (demands->religion == 3) {
220 lang_text_draw(61, 48, X_OFFSET, 266, FONT_NORMAL_RED);
221 } else {
222 lang_text_draw(61, 49, X_OFFSET, 266, FONT_NORMAL_GREEN);
223 }
224
225 // entertainment
226 draw_title(286, 10);
227 if (demands->entertainment == 1) {
228 lang_text_draw(61, 43, X_OFFSET, 286, FONT_NORMAL_RED);
229 } else if (demands->entertainment == 2) {
230 lang_text_draw(61, 44, X_OFFSET, 286, FONT_NORMAL_RED);
231 } else {
232 lang_text_draw(61, 45, X_OFFSET, 286, FONT_NORMAL_GREEN);
233 }
234
235 // sentiment
236 draw_title(306, 11);
237 int sentiment = city_sentiment();
238 if (sentiment <= 0) {
239 lang_text_draw(61, 50, X_OFFSET, 306, FONT_NORMAL_RED);
240 } else if (sentiment >= 100) {
241 lang_text_draw(61, 61, X_OFFSET, 306, FONT_NORMAL_GREEN);
242 } else {
243 lang_text_draw(61, sentiment / 10 + 51, X_OFFSET, 306, FONT_NORMAL_GREEN);
244 }
245
246 return ADVISOR_HEIGHT;
247 }
248
window_advisor_chief(void)249 const advisor_window_type *window_advisor_chief(void)
250 {
251 static const advisor_window_type window = {
252 draw_background,
253 0,
254 0,
255 0
256 };
257 return &window;
258 }
259