2021-11-04 18:08:43 +01:00
|
|
|
#include <gint/keyboard.h>
|
|
|
|
#include <gint/display.h>
|
2021-11-05 16:37:09 +01:00
|
|
|
#include <stdlib.h>
|
2021-11-04 18:08:43 +01:00
|
|
|
|
|
|
|
#include "menus.h"
|
|
|
|
|
|
|
|
|
2022-02-06 10:22:25 +01:00
|
|
|
struct building menu_12(struct calccity *calccity, struct camera *camera, struct map *map, int *build_mode, int menu)
|
2021-11-04 18:08:43 +01:00
|
|
|
{
|
2021-11-05 16:37:09 +01:00
|
|
|
extern const bopti_image_t img_fn_1;
|
2021-11-06 14:23:42 +01:00
|
|
|
extern const bopti_image_t img_fn_2;
|
2021-11-07 16:44:29 +01:00
|
|
|
extern const struct building buildings[42];
|
2021-11-04 18:08:43 +01:00
|
|
|
|
2021-11-06 14:23:42 +01:00
|
|
|
int key = 0, end = 0, x = 0, y = 0;
|
2021-11-05 16:39:45 +01:00
|
|
|
|
2021-11-05 17:33:19 +01:00
|
|
|
while (!end)
|
2021-11-04 18:08:43 +01:00
|
|
|
{
|
|
|
|
dclear(C_WHITE);
|
2021-11-06 14:23:42 +01:00
|
|
|
display_main(calccity, camera, map, 0);
|
|
|
|
|
|
|
|
if (menu == 1)
|
|
|
|
{
|
|
|
|
drect(3, 57, 19, 64, C_INVERT);
|
|
|
|
dimage(3, 11, &img_fn_1);
|
|
|
|
drect(9 * x + 4, 9 * y + 12, 9 * x + 11, 9 * y + 19, C_INVERT);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
drect(21, 57, 39, 64, C_INVERT);
|
|
|
|
dimage(20, 11, &img_fn_2);
|
|
|
|
drect(9 * x + 21, 9 * y + 12, 9 * x + 28, 9 * y + 19, C_INVERT);
|
|
|
|
|
|
|
|
}
|
2021-11-05 16:37:09 +01:00
|
|
|
dupdate();
|
2021-11-04 18:08:43 +01:00
|
|
|
|
2021-11-05 16:37:09 +01:00
|
|
|
key = rtc_key();
|
2021-11-04 18:08:43 +01:00
|
|
|
switch (key)
|
|
|
|
{
|
|
|
|
case KEY_UP:
|
2021-11-05 16:37:09 +01:00
|
|
|
if (y > 0) y --;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case KEY_LEFT:
|
|
|
|
if (x > 0) x --;
|
2021-11-04 18:08:43 +01:00
|
|
|
break;
|
|
|
|
|
|
|
|
case KEY_DOWN:
|
2021-11-05 16:37:09 +01:00
|
|
|
if (y < 4) y ++;
|
2021-11-04 18:08:43 +01:00
|
|
|
break;
|
|
|
|
|
2021-11-05 16:37:09 +01:00
|
|
|
case KEY_RIGHT:
|
2021-11-06 14:23:42 +01:00
|
|
|
if (x < (1 + menu)) x ++;
|
2021-11-05 16:37:09 +01:00
|
|
|
break;
|
|
|
|
|
2021-11-05 17:33:19 +01:00
|
|
|
case KEY_ALPHA:
|
|
|
|
end = 2;
|
|
|
|
break;
|
|
|
|
|
2021-11-05 16:37:09 +01:00
|
|
|
case KEY_SHIFT:
|
2021-11-05 17:33:19 +01:00
|
|
|
end = 1;
|
2021-11-05 16:37:09 +01:00
|
|
|
break;
|
2022-02-06 10:22:25 +01:00
|
|
|
|
|
|
|
case KEY_F1:
|
|
|
|
menu = 1;
|
|
|
|
x = 0;
|
|
|
|
y = 0;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case KEY_F2:
|
|
|
|
menu = 2;
|
|
|
|
x = 0;
|
|
|
|
y = 0;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case KEY_F4:
|
|
|
|
menu_4(calccity);
|
|
|
|
end = 2;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case KEY_F5:
|
|
|
|
menu_5(calccity);
|
|
|
|
end = 2;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case KEY_F6:
|
|
|
|
menu_6(calccity);
|
|
|
|
end = 2;
|
|
|
|
break;
|
2021-11-05 16:37:09 +01:00
|
|
|
}
|
2021-11-04 18:08:43 +01:00
|
|
|
}
|
2021-11-06 14:23:42 +01:00
|
|
|
|
2021-11-05 17:33:19 +01:00
|
|
|
if (end == 1)
|
|
|
|
{
|
2021-11-06 14:23:42 +01:00
|
|
|
if (menu == 1)
|
2021-11-07 16:44:29 +01:00
|
|
|
{
|
|
|
|
*build_mode = x + y * 3;
|
2021-11-06 14:23:42 +01:00
|
|
|
return buildings[x + y * 3];
|
2021-11-07 16:44:29 +01:00
|
|
|
}
|
2021-11-06 14:23:42 +01:00
|
|
|
else
|
2021-11-07 16:44:29 +01:00
|
|
|
{
|
|
|
|
*build_mode = 15 + x + y * 4;
|
2021-11-06 14:23:42 +01:00
|
|
|
return buildings[15 + x + y * 4];
|
2021-11-07 16:44:29 +01:00
|
|
|
}
|
2021-11-05 17:33:19 +01:00
|
|
|
}
|
2021-11-07 16:44:29 +01:00
|
|
|
|
2021-11-05 17:33:19 +01:00
|
|
|
else
|
|
|
|
{
|
2021-11-07 16:44:29 +01:00
|
|
|
*build_mode = -1;
|
2021-11-06 14:23:42 +01:00
|
|
|
struct building default_building = {0};
|
2021-11-05 17:33:19 +01:00
|
|
|
return default_building;
|
|
|
|
}
|
2021-11-06 14:23:42 +01:00
|
|
|
|
2021-11-04 18:08:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void menu_4(struct calccity *calccity)
|
|
|
|
{
|
|
|
|
int choice = 0, key = 0;
|
|
|
|
int opt = GETKEY_DEFAULT & ~GETKEY_MOD_SHIFT & ~GETKEY_MOD_ALPHA & GETKEY_REP_ARROWS;
|
|
|
|
int timeout = 0;
|
|
|
|
|
|
|
|
while (key != KEY_ALPHA)
|
|
|
|
{
|
|
|
|
dclear(C_WHITE);
|
|
|
|
drect(0, 0, 127, 6, C_BLACK);
|
|
|
|
dtext(24, 1, C_WHITE, "TAXES & FONDS");
|
|
|
|
|
|
|
|
dhline(0, C_BLACK);
|
|
|
|
dhline(63, C_BLACK);
|
|
|
|
dvline(0, C_BLACK);
|
|
|
|
dvline(127, C_BLACK);
|
|
|
|
|
|
|
|
dtext(7, 8, C_BLACK, "TAXE HABITATION");
|
|
|
|
dtext(7, 15, C_BLACK, "TAXE COMMERCE");
|
|
|
|
dtext(7, 22, C_BLACK, "TAXE INDUSTRIE");
|
|
|
|
dtext(7, 29, C_BLACK, "TAXE EXPORT");
|
|
|
|
dtext(7, 36, C_BLACK, "FOND POLICE");
|
|
|
|
dtext(7, 43, C_BLACK, "FOND POMPIER");
|
|
|
|
dtext(7, 50, C_BLACK, "FOND ECOLE");
|
|
|
|
dtext(7, 57, C_BLACK, "FOND S.SOCIALE");
|
|
|
|
|
|
|
|
for (int i = 0; i < 4; i ++)
|
|
|
|
{
|
|
|
|
dprint(97, 8 + i * 7, C_BLACK, "%d%%", calccity->taxes[i]);
|
|
|
|
dprint(97, 36 + i * 7, C_BLACK, "%d%%", calccity->funds[i]);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
dtext(2, 8 + choice * 7, C_BLACK, ">");
|
|
|
|
dtext(121, 8 + choice * 7, C_BLACK, "<");
|
|
|
|
dupdate();
|
|
|
|
|
|
|
|
key = getkey_opt(opt, &timeout).key;
|
|
|
|
switch (key)
|
|
|
|
{
|
|
|
|
case KEY_UP:
|
|
|
|
if (choice > 0) choice --;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case KEY_DOWN:
|
|
|
|
if (choice < 7) choice ++;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case KEY_LEFT:
|
2021-11-07 18:31:23 +01:00
|
|
|
if (choice < 4 && calccity->taxes[choice] > 0) calccity->taxes[choice] --;
|
|
|
|
if (choice >= 4 && calccity->funds[choice - 4] > 0) calccity->funds[choice - 4] --;
|
2021-11-04 18:08:43 +01:00
|
|
|
break;
|
|
|
|
|
|
|
|
case KEY_RIGHT:
|
2021-11-07 18:31:23 +01:00
|
|
|
if (choice < 4 && calccity->taxes[choice] < 100) calccity->taxes[choice] ++;
|
|
|
|
if (choice >= 4 && calccity->funds[choice - 4] < 100) calccity->funds[choice - 4] ++;
|
2021-11-04 18:08:43 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2021-11-05 16:37:09 +01:00
|
|
|
void menu_5(struct calccity *calccity)
|
|
|
|
{
|
|
|
|
int scroll = 0, key = 0;
|
|
|
|
int opt = GETKEY_DEFAULT & GETKEY_REP_ARROWS;
|
|
|
|
int timeout = 0;
|
|
|
|
|
2021-11-07 16:44:29 +01:00
|
|
|
static const char *names[27] = {
|
2021-11-05 16:37:09 +01:00
|
|
|
"GENERAL",
|
|
|
|
"ARGENT",
|
|
|
|
"POPULATION",
|
2021-11-07 16:44:29 +01:00
|
|
|
"BONHEUR",
|
2021-11-05 16:37:09 +01:00
|
|
|
"LOGEMENT",
|
|
|
|
"SANTE",
|
|
|
|
"EDUCATION",
|
|
|
|
"NOURRITURE",
|
|
|
|
"TRAVAIL",
|
|
|
|
"TRANSPORT",
|
|
|
|
"SECURITE",
|
|
|
|
"CRIME",
|
2021-11-07 18:31:23 +01:00
|
|
|
"INCENDIE",
|
|
|
|
"NUCLEAIRE",
|
2021-11-05 16:37:09 +01:00
|
|
|
"POLLUTION",
|
|
|
|
"ECONOMIE",
|
|
|
|
"COMMERCE",
|
|
|
|
"INDUSTRIE",
|
|
|
|
"PRODUCTION",
|
|
|
|
"IMPORT",
|
|
|
|
"EXPORT",
|
|
|
|
"COUT ANNUEL",
|
|
|
|
"DIVERS",
|
2021-11-07 16:44:29 +01:00
|
|
|
"EAU",
|
|
|
|
"ENERGIE",
|
2021-11-05 16:37:09 +01:00
|
|
|
"DECHETS",
|
2021-11-07 18:31:23 +01:00
|
|
|
"TOMBES",
|
2021-11-05 16:37:09 +01:00
|
|
|
};
|
|
|
|
|
2021-11-07 16:44:29 +01:00
|
|
|
long values[27] = {0};
|
2021-11-05 16:37:09 +01:00
|
|
|
int offset = 0;
|
|
|
|
|
2021-11-07 16:44:29 +01:00
|
|
|
for (int i = 0; i < 27; i ++)
|
2021-11-05 16:37:09 +01:00
|
|
|
{
|
|
|
|
switch (i)
|
|
|
|
{
|
2021-11-07 16:44:29 +01:00
|
|
|
case 0: case 10: case 15: case 22:
|
2021-11-06 14:23:42 +01:00
|
|
|
values[i] = 0;
|
2021-11-05 16:37:09 +01:00
|
|
|
offset ++;
|
|
|
|
break;
|
|
|
|
|
2021-11-07 16:44:29 +01:00
|
|
|
case 1: case 2:
|
|
|
|
values[i] = calccity->misc[i - 1];
|
2021-11-05 16:37:09 +01:00
|
|
|
offset ++;
|
|
|
|
break;
|
|
|
|
|
2021-11-07 16:44:29 +01:00
|
|
|
case 3:
|
|
|
|
values[i] = calccity->stat[22];
|
2021-11-05 16:37:09 +01:00
|
|
|
offset ++;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 23:
|
2021-11-07 16:44:29 +01:00
|
|
|
values[i] = calccity->stat[17] - calccity->stat[16];
|
|
|
|
offset --;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 24:
|
|
|
|
values[i] = calccity->stat[19] - calccity->stat[18];
|
|
|
|
offset --;
|
2021-11-05 16:37:09 +01:00
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
values[i] = calccity->stat[i - offset];
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
while (key != KEY_ALPHA)
|
|
|
|
{
|
|
|
|
dclear(C_WHITE);
|
|
|
|
|
|
|
|
// Title
|
|
|
|
drect(0, 0, 127, 6, C_BLACK);
|
|
|
|
dtext(27, 1, C_WHITE, "STATISTIQUES");
|
|
|
|
|
|
|
|
// Frame
|
|
|
|
dhline(0, C_BLACK);
|
|
|
|
dhline(63, C_BLACK);
|
|
|
|
dvline(0, C_BLACK);
|
|
|
|
dvline(127, C_BLACK);
|
|
|
|
|
|
|
|
// Scroll bar
|
|
|
|
dline(5, 6, 5, 63, C_BLACK);
|
2021-11-07 16:44:29 +01:00
|
|
|
drect(2, scroll + 8, 3, 8 + scroll + 34, C_BLACK);
|
2021-11-05 16:37:09 +01:00
|
|
|
|
|
|
|
for (int i = 0; i < 8; i ++)
|
|
|
|
{
|
2021-11-07 16:44:29 +01:00
|
|
|
if (i + scroll == 0 || i + scroll == 10 || i + scroll == 15 || i + scroll == 22)
|
2021-11-05 16:37:09 +01:00
|
|
|
{
|
2021-11-06 20:39:36 +01:00
|
|
|
drect(5, 7 * i + 7, 127, 7 * i + 13, C_BLACK);
|
2022-02-06 10:22:25 +01:00
|
|
|
dtext(20, 7 * i + 8, C_WHITE, names[i + scroll]);
|
2021-11-05 16:37:09 +01:00
|
|
|
}
|
|
|
|
else
|
2022-02-06 10:22:25 +01:00
|
|
|
{
|
|
|
|
dprint(7, 7 * i + 8, C_BLACK, "%s", names[i + scroll]);
|
|
|
|
dprint(60, 7 * i + 8, C_BLACK, "%d", values[i + scroll]);
|
|
|
|
}
|
2021-11-05 16:37:09 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
dupdate();
|
|
|
|
|
|
|
|
key = getkey_opt(opt, &timeout).key;
|
|
|
|
|
|
|
|
switch (key)
|
|
|
|
{
|
|
|
|
case KEY_UP:
|
|
|
|
if (scroll > 0) scroll --;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case KEY_DOWN:
|
2021-11-07 16:44:29 +01:00
|
|
|
if (scroll < 19) scroll ++;
|
2021-11-05 16:37:09 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2021-11-04 18:08:43 +01:00
|
|
|
int menu_6(struct calccity *calccity)
|
|
|
|
{
|
|
|
|
int choice = 0, key = 0;
|
|
|
|
int opt = GETKEY_DEFAULT & ~GETKEY_MOD_SHIFT & ~GETKEY_MOD_ALPHA & GETKEY_REP_ARROWS;
|
|
|
|
int timeout = 0;
|
|
|
|
|
|
|
|
while (key != KEY_ALPHA)
|
|
|
|
{
|
2021-11-05 16:37:09 +01:00
|
|
|
int prcnt = 100 - (calccity->time_speed * 100 / 7500);
|
2021-11-04 18:08:43 +01:00
|
|
|
|
|
|
|
dclear(C_WHITE);
|
|
|
|
|
|
|
|
drect(0, 0, 127, 6, C_BLACK);
|
2021-11-05 16:37:09 +01:00
|
|
|
dtext(42, 1, C_WHITE, "OPTIONS");
|
2021-11-04 18:08:43 +01:00
|
|
|
|
|
|
|
dhline(0, C_BLACK);
|
|
|
|
dhline(63, C_BLACK);
|
|
|
|
dvline(0, C_BLACK);
|
|
|
|
dvline(127, C_BLACK);
|
|
|
|
|
|
|
|
dtext(7, 9, C_BLACK, "ANIMATIONS ");
|
|
|
|
dtext(7, 16, C_BLACK, "CATASTROPHES");
|
|
|
|
dtext(7, 23, C_BLACK, "VITESSE DU JEU");
|
|
|
|
dtext(7, 30, C_BLACK, "QUITTER LE JEU");
|
|
|
|
dtext(7, 37, C_BLACK, "REPRENDRE");
|
|
|
|
|
|
|
|
if (calccity->animation)
|
|
|
|
dtext(85, 9, C_BLACK, "on");
|
|
|
|
else
|
|
|
|
dtext(85, 9, C_BLACK, "off");
|
|
|
|
|
|
|
|
if (calccity->disaster)
|
|
|
|
dtext(85, 16, C_BLACK, "on");
|
|
|
|
else
|
|
|
|
dtext(85, 16, C_BLACK, "off");
|
|
|
|
|
2022-02-06 10:22:25 +01:00
|
|
|
dprint(85, 23, C_BLACK, "%d%%", prcnt + 1);
|
2021-11-04 18:08:43 +01:00
|
|
|
|
|
|
|
|
|
|
|
dtext(2, 9 + choice * 7, C_BLACK, ">");
|
|
|
|
dtext(121, 9 + choice * 7, C_BLACK, "<");
|
|
|
|
dupdate();
|
|
|
|
|
|
|
|
key = getkey_opt(opt, &timeout).key;
|
|
|
|
|
|
|
|
switch (key)
|
|
|
|
{
|
|
|
|
case KEY_UP:
|
|
|
|
if (choice > 0) choice --;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case KEY_DOWN:
|
|
|
|
if (choice < 4) choice ++;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case KEY_SHIFT:
|
|
|
|
switch (choice)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
calccity->animation = (calccity->animation + 1) % 2;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
calccity->disaster = (calccity->disaster + 1) % 2;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
return 1;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 4:
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case KEY_LEFT:
|
|
|
|
if (choice == 2 && calccity->time_speed < 10000) calccity->time_speed += 100;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case KEY_RIGHT:
|
|
|
|
if (choice == 2 && calccity->time_speed > 100) calccity->time_speed -= 100;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|