From 3fed055c92320e389e88229195934ab837404a9c Mon Sep 17 00:00:00 2001 From: Shadow15510 Date: Fri, 5 Nov 2021 16:37:09 +0100 Subject: [PATCH] bug on F1 menu --- CMakeLists.txt | 2 + assets-fx/brownout.png | Bin 0 -> 6613 bytes assets-fx/fn_1.png | Bin 0 -> 318 bytes assets-fx/fn_2.png | Bin 0 -> 480 bytes assets-fx/large_tileset.png | Bin 5392 -> 31972 bytes assets-fx/title.png | Bin 866 -> 16719 bytes src/calccity.c | 420 +++++++++++++++++++++++++++++++++++- src/calccity.h | 91 ++++++-- src/core.c | 131 +++++++---- src/core.h | 7 +- src/display.c | 27 ++- src/display.h | 6 +- src/menus.c | 238 ++++++++++++-------- src/menus.h | 3 + 14 files changed, 770 insertions(+), 155 deletions(-) create mode 100644 assets-fx/brownout.png create mode 100644 assets-fx/fn_1.png create mode 100644 assets-fx/fn_2.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f999b1..6123a1b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,8 @@ set(ASSETS_fx assets-fx/large_water.png assets-fx/title.png assets-fx/fn_keys.png + assets-fx/fn_1.png + assets-fx/fn_2.png ) set(ASSETS_cg) diff --git a/assets-fx/brownout.png b/assets-fx/brownout.png new file mode 100644 index 0000000000000000000000000000000000000000..5ff8eab870f6008e345aa0290492501bb42bcea5 GIT binary patch literal 6613 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 J$Yg)ye*i@XrqTca literal 0 HcmV?d00001 diff --git a/assets-fx/fn_1.png b/assets-fx/fn_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a5d3ab2c98ce7b1344723126bdaabed493132040 GIT binary patch literal 318 zcmV-E0m1%>P))B4-n7T%CTokJ-0+Y%G`Bj+nf2%9;iT_cstD_Y`W4f< zmGLTt?<0}}h)*enNHY6;hTfaX_#^f0qg_d*?24j@BHBSir1Mr3H55xr(l0SBeh9vW z6dJ@oX~rq!)bzd#)}8+V4LViTIYyUS5e1S$4;MdxxTEBQytuMRcYcU#mqYH!POjJ` zDmkdi&i}=>504lBCuUn9&M1rM;GHG9?38^Wi;DmD-1#mQBD=!1f9Kz~7a)C2L01mH QJOBUy07*qoM6N<$f}b~)2mk;8 literal 0 HcmV?d00001 diff --git a/assets-fx/fn_2.png b/assets-fx/fn_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f6925dbc110c67a367eb72bf02cdbd5fa59cefb9 GIT binary patch literal 480 zcmV<60U!Q}P)JqNh*Oa*7glAn0mpS*1R zgD3k^Bl05`P+>A-`eTp*0Q2Dsi5joeATvL|*j98xbg8My#wr8Jv{j4Yv0R6NGv3^JE{)Y_{nbQ{;qh z<$5tC&-Ym5*8JPJTkj@m4$Ktoq+%O{-ISpVfa5yUo8<0&*8|tId)^iR*LCkoFMkhm zTp`s2(r$B*>(Ba=yF=pu(sC>T&GG;OYvk2$`BfIZkAiBAkB&Uoi}==s3{Fr8E!Ll0 zt;@VXGGX6$0R@s*ns$ByY9tfqc_h{GZV!2qtN}TX@1rdX3R%8>zsJ{PN!`nr-^2%d WJ!Y$OH=N%90000 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 X8nNzmIsBRc000R9NkvXXu0mjfcg@?- diff --git a/assets-fx/title.png b/assets-fx/title.png index af7c008e1fc3cc7c2538b1536007699ac6ec0cef..dcface33f8ede187a6a58d2dd47fe3eb25236ee8 100644 GIT binary patch literal 16719 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 RhJO|(WF!>DD@Bb0{|}~SvMT@p delta 856 zcmX@##Q2D9fvRc7v7|ftIx;Y9?C1WI$O_~uBzpw;GB8xBF)%c=0965n z8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-GzbiZkO;9AdkJo)7O>#DHpFGtK16d z2R%UfEKe855R22Pm;60M0%h1gEcez^+QMGHmc?_u;-i(#j;7UoU3`~vTLRt)xG26} zXZ>!U%cTGG>(K7}fe9SR)P+?e^zrCu4? zevztB6FPZe_t}66jW*fcqJ9JP``H!=X z*TjpkmgudADYwhr_J9yxvZ)-)?>H ze`zvTtwQ2Ehxl8aeXjLBpN>wsutfi9(@VCF@PCX+43{rBtZr+F-KZ*S_?DA%{_T=) zmp*zPoz<}QsLw0r<_l2`>K}^NPUW5ZLD0j(EAmaFHz$7wL&ycKf+Nc}_ShU?T4Q*d zd5YB&Q>_GU1Ey*0ty@3;ap#OOJ<7p3Yu~b_r|F_xkKd@OH$THf#LmTK%lW>zMxXWGU|M>kxkd8qL*1zd ztIV4v8QrJ<`u*5Dmb?4*&wZ +#include struct calccity { - // human's statistics = {happyness, health, education, housing, work, food} - unsigned long humans[6]; - // population evolution = {population, birth_rate, death_rate, immigration, emigration} - unsigned long population[5]; + // main statistics + /* + housing, + health, + education, + food, + work, + transport, - // trade statistics = {import, export, production, commercial, industrial, annual_cost} - unsigned long trade[6]; + crime, + firehazard, + nuclearhazard, + pollution, - // production = {water, power} - unsigned long production[2]; + commercial, + industrial, + production, + import, + export, + annual_cost, + + water_consumption, + power_consumption, + power_supply, + grabage + graves, + */ + unsigned long stat[21]; - // consumption = {water, power} - unsigned long consumption[2]; - - // some others statistics = {treasure, crime, safety, fire_hazard, nuclear_hazard, pollution, transport, grabage, graves} + // some others statistics = {treasure, population, safety, hapyness, birth_rate, death_rate, immigration, emigration, water_supply} unsigned long misc[9]; - + // taxes in percents on {housing, trade, industry, export} unsigned int taxes[4]; @@ -49,6 +64,7 @@ struct camera int zoom; int cursor_x, cursor_y; + int cursor_size[2]; }; @@ -58,6 +74,53 @@ struct map }; +struct building +{ + char *name; + + unsigned char *id; + int cost; + unsigned char size[2]; + + /* + housing, + health, + education, + food, + work, + transport, + + crime, + firehazard, + nuclearhazard, + pollution, + + commercial, + industrial, + production, + import, + export, + annual_cost, + + water_consumption, + power_consumption, + power_supply, + grabage + graves, + */ + unsigned int stat[21]; + + // commercial, industrial, export + unsigned int taxes[3]; + + // police, firemen, education, heathcare + unsigned int funds[4]; + +}; + + #define ENGINE_TICK 100 +static const struct building buildings[41]; + #endif /* _CALCCITY_H */ \ No newline at end of file diff --git a/src/core.c b/src/core.c index ad1796d..75f2692 100644 --- a/src/core.c +++ b/src/core.c @@ -1,8 +1,10 @@ #include -#include +#include #include #include #include +#include +#include #include "core.h" @@ -44,6 +46,8 @@ void default_values(struct calccity *calccity, struct camera *camera, struct map memset(camera, 0, sizeof *camera); camera->cursor_x = 2; camera->cursor_y = 2; + camera->cursor_size[0] = 8; + camera->cursor_size[1] = 8; // Initialisation of struct map @@ -151,8 +155,6 @@ void main_loop(struct calccity *calccity, struct camera *camera, struct map *map int end = 0, key = 0; - //int build_mode = 0; - while (!end) { // Real-time clock system @@ -160,33 +162,14 @@ void main_loop(struct calccity *calccity, struct camera *camera, struct map *map tick = 0; next_step(calccity); - - // Display map - display_large_map(calccity, camera, map); - display_around(calccity, camera); + + dclear(C_WHITE); + main_display(calccity, camera, map, 1); + dupdate(); // Get and manage input key = rtc_key(); - keyboard_managment(calccity, camera, key); - - // Open the menu - switch (calccity->menu) - { - // Tax and funds - case 4: - menu_4(calccity); - break; - - case 5: - menu_5(calccity); - break; - - // Options - case 6: - end = menu_6(calccity); - break; - } - calccity->menu = 0; + end = keyboard_managment(calccity, camera, map, key); } // Free timer @@ -194,8 +177,10 @@ void main_loop(struct calccity *calccity, struct camera *camera, struct map *map } -void keyboard_managment(struct calccity *calccity, struct camera *camera, const int key) +int keyboard_managment(struct calccity *calccity, struct camera *camera, struct map *map, const int key) { + + int end = 0; switch (key) { case KEY_UP: @@ -204,12 +189,12 @@ void keyboard_managment(struct calccity *calccity, struct camera *camera, const break; case KEY_RIGHT: - if (camera->cursor_x < 14) camera->cursor_x ++; + if (camera->cursor_x < floor(120 / camera->cursor_size[0]) - 1) camera->cursor_x ++; else if (camera->x < 42) camera->x ++; break; case KEY_DOWN: - if (camera->cursor_y < 6) camera->cursor_y ++; + if (camera->cursor_y < floor(57 / camera->cursor_size[1]) - 1) camera->cursor_y ++; else if (camera->y < 46) camera->y ++; break; @@ -218,29 +203,95 @@ void keyboard_managment(struct calccity *calccity, struct camera *camera, const else if (camera->x > 0) camera->x --; break; - case KEY_F1: - calccity->menu = 1; + int build_mode = 0; + struct building selected_building = menu_1(calccity, camera, map, &build_mode); + + if (build_mode) + build(calccity, camera, map, &selected_building); break; case KEY_F2: - calccity->menu = 2; - break; - - case KEY_F3: - calccity->menu = 3; break; case KEY_F4: - calccity->menu = 4; + menu_4(calccity); break; case KEY_F5: - calccity->menu = 5; + menu_5(calccity); break; case KEY_F6: - calccity->menu = 6; + end = menu_6(calccity); break; } + return end; +} + + +void build(struct calccity *calccity, struct camera *camera, struct map *map, struct building *building) +{ + // Timer initialisation + static volatile int tick = 1; + int t = timer_configure(TIMER_ANY, ENGINE_TICK*1000, GINT_CALL(callback_tick, &tick)); + if (t >= 0) timer_start(t); + + // Adjust cursor size + camera->cursor_size[0] = building->size[0] * 15; + camera->cursor_size[1] = building->size[1] * 15; + camera->cursor_x = 1; + camera->cursor_y = 1; + + int key = 0, end = 0; + + while (!end) + { + // Real-time clock system + while (!tick) sleep(); + tick = 0; + + next_step(calccity); + + dclear(C_WHITE); + main_display(calccity, camera, map, 1); + + dprint_opt(4, 8, C_BLACK, C_WHITE, DTEXT_LEFT, DTEXT_TOP, "$%d %d,%d", building->cost, building->size[0], building->size[1]); + dprint_opt(4, 15, C_BLACK, C_WHITE, DTEXT_LEFT, DTEXT_TOP, "%s", building->name); + dupdate(); + + key = rtc_key(); + switch (key) + { + case KEY_UP: + if (camera->cursor_y > 0) camera->cursor_y --; + else if (camera->y > 0) camera->y --; + break; + + case KEY_RIGHT: + if (camera->cursor_x < floor(120 / camera->cursor_size[0]) - 1) camera->cursor_x ++; + else if (camera->x < 42) camera->x ++; + break; + + case KEY_DOWN: + if (camera->cursor_y < floor(57 / camera->cursor_size[1]) - 1) camera->cursor_y ++; + else if (camera->y < 46) camera->y ++; + break; + + case KEY_LEFT: + if (camera->cursor_x > 0) camera->cursor_x --; + else if (camera->x > 0) camera->x --; + break; + + case KEY_ALPHA: + end = 1; + break; + + case KEY_SHIFT: + end = 1; + break; + } + } + + if (t >= 0) timer_stop(t); } \ No newline at end of file diff --git a/src/core.h b/src/core.h index 408ea95..8d33b79 100644 --- a/src/core.h +++ b/src/core.h @@ -20,7 +20,10 @@ void next_step(struct calccity *calccity); // main_loop : game main loop void main_loop(struct calccity *calccity, struct camera *camera, struct map *map); -// keyboard_managment : get the key and manage input -void keyboard_managment(struct calccity *calccity, struct camera *camera, const int key); +// keyboard_managment : get the key, manage input and open menus +int keyboard_managment(struct calccity *calccity, struct camera *camera, struct map *map, const int key); + +// build : manage the build +void build(struct calccity *calccity, struct camera *camera, struct map *map, struct building *building); #endif /* _CORE_H */ \ No newline at end of file diff --git a/src/display.c b/src/display.c index a6ef94b..0b1d6c6 100644 --- a/src/display.c +++ b/src/display.c @@ -1,5 +1,6 @@ #include #include +#include #include "display.h" @@ -15,13 +16,19 @@ void title_screen(void) } +void main_display(struct calccity *calccity, struct camera *camera, struct map *map, const int disp_cursor) +{ + // Display map + display_large_map(calccity, camera, map); + display_around(calccity, camera, disp_cursor); +} + + void display_large_map(struct calccity *calccity, struct camera *camera, struct map *map) { extern const bopti_image_t img_large_tileset; extern const bopti_image_t img_large_water; - dclear(C_WHITE); - for (int y = 0; y < 4; y++) { for (int x = 0; x < 8; x ++) @@ -44,7 +51,7 @@ void display_large_map(struct calccity *calccity, struct camera *camera, struct } -void display_around(struct calccity *calccity, struct camera *camera) +void display_around(struct calccity *calccity, struct camera *camera, const int disp_cursor) { extern const bopti_image_t img_fn_keys; @@ -61,11 +68,13 @@ void display_around(struct calccity *calccity, struct camera *camera) dprint_opt(4, 1, C_BLACK, C_WHITE, DTEXT_LEFT, DTEXT_TOP, "%d-%d", calccity->month, calccity->year); // Cursor - drect_border(8 * camera->cursor_x + 3, 8 * camera->cursor_y, 8 * camera->cursor_x + 11, 8 * camera->cursor_y + 8, C_WHITE, 1, C_BLACK); - dline(8 * camera->cursor_x + 6, 8 * camera->cursor_y + 4, 8 * camera->cursor_x + 8, 8 * camera->cursor_y + 4, C_BLACK); - dline(8 * camera->cursor_x + 7, 8 * camera->cursor_y + 3, 8 * camera->cursor_x + 7, 8 * camera->cursor_y + 5, C_BLACK); - - - dupdate(); + if (disp_cursor) + { + int middle_x = floor(camera->cursor_size[0] / 2) + 3; + int middle_y = floor(camera->cursor_size[1] / 2); + drect_border(camera->cursor_size[0] * camera->cursor_x + 3, camera->cursor_size[1] * camera->cursor_y, camera->cursor_size[0] * camera->cursor_x + 3 + camera->cursor_size[0], camera->cursor_size[1] * camera->cursor_y + camera->cursor_size[1], C_WHITE, 1, C_BLACK); + dline(camera->cursor_size[0] * camera->cursor_x + middle_x - 1, camera->cursor_size[1] * camera->cursor_y + middle_y , camera->cursor_size[0] * camera->cursor_x + middle_x + 1, camera->cursor_size[1] * camera->cursor_y + middle_y , C_BLACK); + dline(camera->cursor_size[0] * camera->cursor_x + middle_x , camera->cursor_size[1] * camera->cursor_y + middle_y - 1, camera->cursor_size[0] * camera->cursor_x + middle_x , camera->cursor_size[1] * camera->cursor_y + middle_y + 1, C_BLACK); + } } diff --git a/src/display.h b/src/display.h index 9e4f937..8f146ce 100644 --- a/src/display.h +++ b/src/display.h @@ -2,14 +2,18 @@ #define _DISPLAY_H #include "calccity.h" +#include "core.h" // title_screen : display title screen void title_screen(void); +// main_display : the general display function +void main_display(struct calccity *calccity, struct camera *camera, struct map *map, const int disp_cursor); + // display_large_map : display the current state of the large map void display_large_map(struct calccity *calccity, struct camera *camera, struct map *map); // display_around : display the screen frame and cursor -void display_around(struct calccity *calccity, struct camera *camera); +void display_around(struct calccity *calccity, struct camera *camera, const int disp_cursor); #endif /* _DISPLAY_H */ \ No newline at end of file diff --git a/src/menus.c b/src/menus.c index 425c888..29509ca 100644 --- a/src/menus.c +++ b/src/menus.c @@ -1,113 +1,57 @@ #include #include -#include +#include #include "menus.h" -void menu_5(struct calccity *calccity) +struct building menu_1(struct calccity *calccity, struct camera *camera, struct map *map, int *build_mode) { - int scroll = 0, key = 0; - int opt = GETKEY_DEFAULT & GETKEY_REP_ARROWS; - int timeout = 0; - - static const char *names[23] = { - "GENERAL", - "ARGENT", - "POPULATION", - "BONHEUR", - "SANTE", - "EDUCATION", - "LOGEMENT", - "TRAVAIL", - "NOURRITURE", - "EAU", - "ENERGIE", - "TRANSPORT", - "DECHETS", - "TOMBES", - "RISQUES", - "CRIME", - "RISQUE INCENDIE", - "RISQUE NUCLEAIRE", - "POLLUTION", - "COMMERCE", - "PRODUCTION", - "IMPORT", - "EXPORT" - }; - - long int values[23] = { - -1, - calccity->misc[0], - calccity->population[0], - calccity->humans[0], - calccity->humans[1], - calccity->humans[2], - calccity->humans[3], - calccity->humans[4], - calccity->humans[5], - calccity->production[0], - calccity->production[1], - calccity->misc[6], - calccity->misc[7], - calccity->misc[8], - -1, - calccity->misc[1], - calccity->misc[3], - calccity->misc[4], - calccity->misc[5], - -1, - calccity->trade[2], - calccity->trade[0], - calccity->trade[1] - }; + extern const bopti_image_t img_fn_1; + int key = 0, x = 0, y = 0; while (key != KEY_ALPHA) { dclear(C_WHITE); - - // Title - drect(0, 0, 127, 6, C_BLACK); - dtext(27, 1, C_WHITE, "STATISTIQUES"); + display_large_map(calccity, camera, map); + display_around(calccity, camera, 0); + drect(3, 57, 19, 64, C_INVERT); - // 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); - drect(2, scroll + 8, 3, 8 + scroll + 38, C_BLACK); - - for (int i = 0; i < 8; i ++) - { - if (values[i + scroll] < 0) - { - drect(5, 7 + i * 7, 127, 13 + i * 7, C_BLACK); - dtext(12, 8 + i * 7, C_WHITE, names[i + scroll]); - } - else - dprint(7, 8 + i * 7, C_BLACK, "%s %lu", names[i + scroll], values[i + scroll]); - } + dimage(3, 11, &img_fn_1); + drect(9 * x + 4, 9 * y + 12, 9 * x + 4 + 7, 9 * y + 12 + 7, C_INVERT); dupdate(); - - key = getkey_opt(opt, &timeout).key; + + struct building default_building = buildings[x + 3 * y]; + + key = rtc_key(); switch (key) { case KEY_UP: - if (scroll > 0) scroll --; + if (y > 0) y --; + break; + + case KEY_LEFT: + if (x > 0) x --; break; case KEY_DOWN: - if (scroll < 15) scroll ++; + if (y < 4) y ++; + break; + + case KEY_RIGHT: + if (x < 2) x ++; + break; + + case KEY_SHIFT: + *build_mode = 1; + return buildings[x + y * 3]; break; } - } + *build_mode = 0; + return default_building; } @@ -174,6 +118,124 @@ void menu_4(struct calccity *calccity) } +void menu_5(struct calccity *calccity) +{ + int scroll = 0, key = 0; + int opt = GETKEY_DEFAULT & GETKEY_REP_ARROWS; + int timeout = 0; + + static const char *names[28] = { + "GENERAL", + "ARGENT", + "POPULATION", + "LOGEMENT", + "SANTE", + "EDUCATION", + "NOURRITURE", + "TRAVAIL", + "TRANSPORT", + "SECURITE", + "CRIME", + "RISQUE INCENDIE", + "RISQUE NUCLEAIRE", + "POLLUTION", + "ECONOMIE", + "COMMERCE", + "INDUSTRIE", + "PRODUCTION", + "IMPORT", + "EXPORT", + "COUT ANNUEL", + "DIVERS", + "CONSO. EAU", + "PRODU. EAU", + "CONSO. ENERGIE", + "PRODU. ENERGIE", + "DECHETS", + "TOMBES" + }; + + long values[28] = {0}; + int offset = 0; + + for (int i = 0; i < 28; i ++) + { + switch (i) + { + case 0: case 9: case 14: case 21: + values[i] = -1; + offset ++; + break; + + case 1: + values[i] = calccity->misc[0]; + offset ++; + break; + + case 2: + values[i] = calccity->misc[1]; + offset ++; + break; + + case 23: + values[i] = calccity->misc[8]; + offset ++; + 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); + drect(2, scroll + 8, 3, 8 + scroll + 33, C_BLACK); + + for (int i = 0; i < 8; i ++) + { + if (values[i + scroll] < 0) + { + drect(5, 7 + i * 7, 127, 13 + i * 7, C_BLACK); + dtext(12, 8 + i * 7, C_WHITE, names[i + scroll]); + } + else + dprint(7, 8 + i * 7, C_BLACK, "%s %lu", names[i + scroll], values[i + scroll]); + } + + dupdate(); + + key = getkey_opt(opt, &timeout).key; + + switch (key) + { + case KEY_UP: + if (scroll > 0) scroll --; + break; + + case KEY_DOWN: + if (scroll < 20) scroll ++; + break; + } + + } +} + + int menu_6(struct calccity *calccity) { int choice = 0, key = 0; @@ -182,12 +244,12 @@ int menu_6(struct calccity *calccity) while (key != KEY_ALPHA) { - int prcnt = 100 - (calccity->time_speed * 100 / 10000); + int prcnt = 100 - (calccity->time_speed * 100 / 7500); dclear(C_WHITE); drect(0, 0, 127, 6, C_BLACK); - dtext(39, 1, C_WHITE, "OPTIONS"); + dtext(42, 1, C_WHITE, "OPTIONS"); dhline(0, C_BLACK); dhline(63, C_BLACK); diff --git a/src/menus.h b/src/menus.h index d1d3caa..bfb02c9 100644 --- a/src/menus.h +++ b/src/menus.h @@ -2,7 +2,10 @@ #define _MENUS_H #include "calccity.h" +#include "core.h" +// menu_1 : building 1 +struct building menu_1(struct calccity *calccity, struct camera *camera, struct map *map, int *build_mode); // menu_4 : tax and funds void menu_4(struct calccity *calccity);