From cdc175020cca5c76c4df626a6ba83b97e2719a13 Mon Sep 17 00:00:00 2001 From: Shadow15510 Date: Sat, 6 Nov 2021 20:39:36 +0100 Subject: [PATCH] Add minimap and fix bug on building --- CMakeLists.txt | 1 + assets-fx/mini_tileset.png | Bin 0 -> 30409 bytes src/core.c | 42 +++++++++++++++++++++++++------------ src/core.h | 4 ++-- src/display.c | 38 ++++++++++++++++++++++++++++----- src/display.h | 3 +++ src/menus.c | 8 +++---- 7 files changed, 72 insertions(+), 24 deletions(-) create mode 100644 assets-fx/mini_tileset.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 42bf048..07823e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,7 @@ set(ASSETS) set(ASSETS_fx assets-fx/calccity.png assets-fx/large_tileset.png + assets-fx/mini_tileset.png assets-fx/large_water.png assets-fx/title.png assets-fx/fn_keys.png diff --git a/assets-fx/mini_tileset.png b/assets-fx/mini_tileset.png new file mode 100644 index 0000000000000000000000000000000000000000..6b5f37bd4aca9c7410ca39b955eafb047078aba4 GIT binary patch literal 30409 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 = 0; exit_build_mode(camera, &build_mode); if (key == KEY_F1) building = menu_12(calccity, camera, map, &build_mode, 1); @@ -214,8 +215,8 @@ void main_loop(struct calccity *calccity, struct camera *camera, struct map *map // Build validation if (key == KEY_SHIFT && can_build(calccity, camera, map, &building)) { - unsigned short loc_x = building.size[0] * floor(camera->cursor_x / (floor(camera->cursor_size[0] / 8) + 1)); - unsigned short loc_y = building.size[1] * floor(camera->cursor_y / (floor(camera->cursor_size[1] / 8) + 1)); + unsigned short loc_x = building.size[0] * floor(camera->x + camera->cursor_x / (floor(camera->cursor_size[0] / 8) + 1)); + unsigned short loc_y = building.size[1] * floor(camera->y + camera->cursor_y / (floor(camera->cursor_size[1] / 8) + 1)); int index = 0; for (int y = loc_y; y < loc_y + building.size[1]; y ++) { @@ -236,40 +237,55 @@ void main_loop(struct calccity *calccity, struct camera *camera, struct map *map } -int keyboard_managment(struct camera *camera, const int key) +void keyboard_managment(struct camera *camera, const int key) { - - int end = 0; switch (key) { case KEY_UP: - if (camera->cursor_y > 0) camera->cursor_y --; + if (!camera->zoom && camera->cursor_y > 0) camera->cursor_y --; else if (camera->y > 0) camera->y --; break; case KEY_RIGHT: if (camera->cursor_x < 14) camera->cursor_x ++; - else if (camera->x < 42) camera->x ++; + else + { + if (!camera->zoom && camera->x < 42) camera->x ++; + if (camera->zoom && camera->x < 35) camera->x ++; + } break; case KEY_DOWN: if (camera->cursor_y < 6) camera->cursor_y ++; - else if (camera->y < 46) camera->y ++; + else + { + if (!camera->zoom && camera->y < 46) camera->y ++; + if (camera->zoom && camera->y < 43) camera->y ++; + } break; case KEY_LEFT: - if (camera->cursor_x > 0) camera->cursor_x --; + if (!camera->zoom && camera->cursor_x > 0) camera->cursor_x --; else if (camera->x > 0) camera->x --; break; + + case KEY_PLUS: + camera->zoom = 0; + break; + + case KEY_MINUS: + if (camera->x > 35) camera->x = 35; + if (camera->y > 43) camera->y = 43; + camera->zoom = 1; + break; } - return end; } bool can_build(struct calccity *calccity, struct camera *camera, struct map *map, struct building *building) { - unsigned short loc_x = building->size[0] * floor(camera->cursor_x / (floor(camera->cursor_size[0] / 8) + 1)); - unsigned short loc_y = building->size[1] * floor(camera->cursor_y / (floor(camera->cursor_size[1] / 8) + 1)); + unsigned short loc_x = building->size[0] * floor(camera->x + camera->cursor_x / (floor(camera->cursor_size[0] / 8) + 1)); + unsigned short loc_y = building->size[1] * floor(camera->y + camera->cursor_y / (floor(camera->cursor_size[1] / 8) + 1)); // Not enougth money if (calccity->misc[0] < building->cost) diff --git a/src/core.h b/src/core.h index 0c78355..0373fc4 100644 --- a/src/core.h +++ b/src/core.h @@ -17,11 +17,11 @@ int rtc_key(void); // next_step : compute in-game time void next_step(struct calccity *calccity); -// main_loop : game main loop +// main_loop : game main loop, manage key, menu, map actualization and building void main_loop(struct calccity *calccity, struct camera *camera, struct map *map); // keyboard_managment : get the key, manage input and open menus -int keyboard_managment(struct camera *camera, const int key); +void keyboard_managment(struct camera *camera, const int key); // can_build : test if the build is legit bool can_build(struct calccity *calccity, struct camera *camera, struct map *map, struct building *building); diff --git a/src/display.c b/src/display.c index b72f820..4e18858 100644 --- a/src/display.c +++ b/src/display.c @@ -19,8 +19,16 @@ void title_screen(void) void display_main(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); + if (camera->zoom == 0) + { + display_large_map(calccity, camera, map); + display_around(calccity, camera, disp_cursor); + } + else + { + display_mini_map(camera, map); + display_around(calccity, camera, 0); + } } @@ -34,6 +42,7 @@ void display_large_map(struct calccity *calccity, struct camera *camera, struct for (int x = 0; x < 8; x ++) { int cam_x = x + camera->x, cam_y = y + camera->y; + // Water if (cam_y > 49 || cam_x > 49 || map->data[cam_y][cam_x] == 139) dsubimage(3 + x * 15, y * 15, &img_large_water, 15 * calccity->blinker, 0, 15 * (calccity->blinker + 1), 15, DIMAGE_NONE); @@ -41,9 +50,9 @@ void display_large_map(struct calccity *calccity, struct camera *camera, struct { unsigned tile_id = map->data[cam_y][cam_x]; unsigned int tile_x = 15 * (tile_id % 10); - unsigned int tile_y = 15 * (tile_id / 10); - - dsubimage(3 + x * 15, y * 15, &img_large_tileset, tile_x, tile_y, 15, 15, DIMAGE_NONE); + unsigned int tile_y = 15 * (tile_id / 10); + + dsubimage(3 + x * 15, y * 15, &img_large_tileset, tile_x, tile_y, 15, 15, DIMAGE_NONE); } } } @@ -51,6 +60,25 @@ void display_large_map(struct calccity *calccity, struct camera *camera, struct } +void display_mini_map(struct camera *camera, struct map *map) +{ + extern const bopti_image_t img_mini_tileset; + + for (int y = 0; y < 7; y ++) + { + for (int x = 0; x < 15; x ++) + { + int cam_x = x + camera->x, cam_y = y + camera->y; + + unsigned tile_id = map->data[cam_y][cam_x]; + unsigned int tile_x = 8 * (tile_id % 10); + unsigned int tile_y = 8 * (tile_id / 10); + + dsubimage(3 + x * 8, y * 8, &img_mini_tileset, tile_x, tile_y, 8, 8, DIMAGE_NONE); + } + } +} + void display_around(struct calccity *calccity, struct camera *camera, const int disp_cursor) { extern const bopti_image_t img_fn_keys; diff --git a/src/display.h b/src/display.h index 2230ca6..7987788 100644 --- a/src/display.h +++ b/src/display.h @@ -13,6 +13,9 @@ void display_main(struct calccity *calccity, struct camera *camera, struct map * // 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_mini_map : display the current state of the mini map +void display_mini_map(struct camera *camera, struct map *map); + // display_around : display the screen frame and cursor void display_around(struct calccity *calccity, struct camera *camera, const int disp_cursor); diff --git a/src/menus.c b/src/menus.c index c375d2a..7b899e5 100644 --- a/src/menus.c +++ b/src/menus.c @@ -233,13 +233,13 @@ void menu_5(struct calccity *calccity) for (int i = 0; i < 8; i ++) { - if (values[i + scroll] < 0) + if (i + scroll == 0 || i + scroll == 9 || i + scroll == 14 || i + scroll == 21) { - drect(5, 7 + i * 7, 127, 13 + i * 7, C_BLACK); - dtext(12, 8 + i * 7, C_WHITE, names[i + scroll]); + drect(5, 7 * i + 7, 127, 7 * i + 13, C_BLACK); + dtext(12, 7 * i + 8, C_WHITE, names[i + scroll]); } else - dprint(7, 8 + i * 7, C_BLACK, "%s %lu", names[i + scroll], values[i + scroll]); + dprint(7, 7 * i + 8, C_BLACK, "%s %lu", names[i + scroll], values[i + scroll]); } dupdate();