From b1c3ed89b9873df250cbb6e695789173b178eb55 Mon Sep 17 00:00:00 2001 From: Shadow15510 Date: Thu, 27 May 2021 22:09:01 +0200 Subject: [PATCH] Add mutations menus cursor, and background, and improve plane's traffic. --- CMakeLists.txt | 2 +- Plague.g1a | Bin 43424 -> 43848 bytes assets-fx/cursor.png | Bin 0 -> 698 bytes assets-fx/piece.png | Bin 629 -> 0 bytes assets-fx/pieces.png | Bin 8760 -> 0 bytes assets-fx/planes.png | Bin 677 -> 4995 bytes src/core.c | 60 ++++++++++++++++++++++++++++++++++--------- src/core.h | 23 +++++++++++++---- src/display_engine.c | 9 ++++--- src/display_engine.h | 2 +- src/main.c | 9 ------- 11 files changed, 73 insertions(+), 32 deletions(-) create mode 100644 assets-fx/cursor.png delete mode 100644 assets-fx/piece.png delete mode 100644 assets-fx/pieces.png diff --git a/CMakeLists.txt b/CMakeLists.txt index b6f3adf..5e3e91b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,7 +24,7 @@ set(ASSETS_fx assets-fx/planes.png assets-fx/bground.png assets-fx/mutations.png - assets-fx/piece.png + assets-fx/cursor.png assets-fx/title.png assets-fx/mutations_table/abilities_1.txt assets-fx/mutations_table/abilities_2.txt diff --git a/Plague.g1a b/Plague.g1a index d6987f59da0b459496312222db3f522681c284bc..11751509d5c7a40c46863e3d89df2004f140dba5 100644 GIT binary patch delta 4356 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 S#y!dUv8Nydk}j46`~Mf4Fx{8{ diff --git a/assets-fx/planes.png b/assets-fx/planes.png index fae3c21925ca0e6cdcee66c30f80bf9a6c42486c..5995dc05c06651bace4df4689c1ab315ee183bfb 100644 GIT binary patch literal 4995 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 +#include #include #include "core.h" @@ -45,13 +47,7 @@ void next_frame(struct game *current_game) int get_inputs(const int background, int *mutation_menu) { - int opt = GETKEY_DEFAULT & ~GETKEY_REP_ARROWS; - int timeout = 1; - - key_event_t ev = getkey_opt(opt, &timeout); - if(ev.type == KEYEV_NONE) return background; - - int key = ev.key; + int key = rtc_key(); if (key == KEY_OPTN && (background == 1 || background == 2)) return (background % 2) + 1; if (key == KEY_VARS) return 3; @@ -98,15 +94,55 @@ int get_inputs(const int background, int *mutation_menu) } +int rtc_key(void) +{ + int opt = GETKEY_DEFAULT & ~GETKEY_REP_ARROWS; + int timeout = 1; + + key_event_t ev = getkey_opt(opt, &timeout); + if(ev.type == KEYEV_NONE) return 0; + + return ev.key; +} + + +int callback_tick(volatile int *tick) +{ + *tick = 1; + return TIMER_CONTINUE; +} + + void manage_mutation(struct game *current_game, const int mutation_menu) { int key = 0, end = 0; - int cursor_x = 1, cursor_y = 1; - while (!end) - { - display_mutation(current_game, mutation_menu, cursor_x, cursor_y); - key = getkey().key; + struct cursor c = {0, 0, 0}; + static volatile int tick = 1; + int t = timer_configure(TIMER_ANY, CURSOR_TICK*1000, GINT_CALL(callback_tick, &tick)); + if (t >= 0) timer_start(t); + + + while (!end) + { + // Cursor blinking gestion + while (!tick) sleep(); + tick = 0; + c.display = (c.display + 1) % 2; + + // Display the mutation menu + display_mutation(current_game, mutation_menu, c); + + // Get the key + key = rtc_key(); + if (key == KEY_EXIT) end = 1; + + + if (key == KEY_LEFT && c.x > 0) c.x--; + if (key == KEY_RIGHT && c.x < 7) c.x++; + if (key == KEY_UP && c.y > 0) c.y--; + if (key == KEY_DOWN && c.y < 3) c.y++; } + if (t >= 0) timer_stop(t); } diff --git a/src/core.h b/src/core.h index 87a3f51..cf93a01 100644 --- a/src/core.h +++ b/src/core.h @@ -1,9 +1,9 @@ #ifndef _PLAGUE_CORE_H #define _PLAGUE_CORE_H - // Duration for internal clock #define ENGINE_TICK 50 +#define CURSOR_TICK 200 // Number of planes on screen #define NB_PLANES 5 @@ -11,7 +11,6 @@ // Number of humans #define TOTAL_POP 10000000000 - // game : all statistics of the current game struct game { @@ -38,7 +37,6 @@ struct game struct plane *planes[NB_PLANES + 1]; }; - // plane : information about planes struct plane { @@ -51,20 +49,35 @@ struct plane // Coordinates of the plane's destination int dest_x, dest_y; - //Coordinates of the plane's departure + // Coordinates of the plane's departure int depa_x, depa_y; }; +//cursor : cursor information for mutations selection +struct cursor +{ + // Cursor's coordinates + int x, y; + + // If the cursor should be displayed + int display; +}; + // get_inputs : detect and manage inputs int get_inputs(const int background, int *mutation_menu); - // next_frame : compute the plane's positions void next_frame(struct game *current_game); +// rtc_key : get the key with RTC system +int rtc_key(void); + +// callback_timer : basic timer +int callback_tick(volatile int *tick); // manage_mutation : an independant sub-programm which allow to select, buy and see the mutations. void manage_mutation(struct game *current_game, const int mutation_menu); + #endif /* _PLAGUE_CORE_H */ \ No newline at end of file diff --git a/src/display_engine.c b/src/display_engine.c index 4d4ac48..3fae5b4 100644 --- a/src/display_engine.c +++ b/src/display_engine.c @@ -79,10 +79,10 @@ void display_foreground(const int background, const struct game *current_game) } -void display_mutation(const struct game *current_game, const int mutation_menu, const int cursor_x, const int cursor_y) +void display_mutation(const struct game *current_game, const int mutation_menu, const struct cursor c) { extern const bopti_image_t img_mutations; - extern bopti_image_t img_piece; + extern bopti_image_t img_cursor; // Load symptoms extern struct mutation_table mt_symptoms_1; @@ -122,14 +122,15 @@ void display_mutation(const struct game *current_game, const int mutation_menu, } dclear(C_WHITE); + display_background(5); for (int i = 0 ; i < 4 ; i++) { for (int j = 0 ; j < 8; j++) { - if (table[i][j]) dsubimage(i*16, j*16, &img_mutations, 16 * (mutation_menu - 1), 0, 16 * (table[i][j] - 1), 15, 15); + if (table[i][j]) dsubimage(j*16, i*16, &img_mutations, 16 * (mutation_menu - 1), 16 * (table[i][j] - 1), 15, 15, DIMAGE_NONE); } } - dimage(16 * (cursor_x - 1), 16 * (cursor_y - 1), &img_piece); + dsubimage((16 * c.x) - 1, (16 * c.y) - 1, &img_cursor, 0, 17 * (c.display), 17, 17, DIMAGE_NONE); dupdate(); } diff --git a/src/display_engine.h b/src/display_engine.h index ffe944e..e9c7e9c 100644 --- a/src/display_engine.h +++ b/src/display_engine.h @@ -8,7 +8,7 @@ void display_background(const int background); void display_foreground(const int background, const struct game *current_game); // display_mutation : display the mutation selection screen -void display_mutation(const struct game *current_game, const int mutation_menu, const int cursor_x, const int cursor_y); +void display_mutation(const struct game *current_game, const int mutation_menu, const struct cursor c); // init_mat : copy src into dest void init_mat(int x, int y, int dest[][x], int src[][x]); diff --git a/src/main.c b/src/main.c index abb3ba2..7d94cbc 100644 --- a/src/main.c +++ b/src/main.c @@ -19,9 +19,6 @@ static void title_screen(void); // main_loop : display background, foreground and manage inputs void main_loop(struct game *current_game); -// callback_timer : basic timer -int callback_tick(volatile int *tick); - int main(void) { @@ -117,9 +114,3 @@ void main_loop(struct game *current_game) if (t >= 0) timer_stop(t); } - -int callback_tick(volatile int *tick) -{ - *tick = 1; - return TIMER_CONTINUE; -}