Explorar o código

new endscreen

Tim Strasser %!s(int64=2) %!d(string=hai) anos
pai
achega
345e0dca52
Modificáronse 2 ficheiros con 49 adicións e 12 borrados
  1. 1 0
      includes/game_state.h
  2. 48 12
      jetpack.c

+ 1 - 0
includes/game_state.h

@@ -15,6 +15,7 @@
 typedef struct {
 typedef struct {
     int points;
     int points;
     int distance;
     int distance;
+    bool new_highscore;
     BARRY barry;
     BARRY barry;
     COIN coins[COINS_MAX];
     COIN coins[COINS_MAX];
     PARTICLE particles[PARTICLES_MAX];
     PARTICLE particles[PARTICLES_MAX];

+ 48 - 12
jetpack.c

@@ -72,6 +72,8 @@ static void storage_game_state_save() {
 
 
 void handle_death() {
 void handle_death() {
     global_state->state = GameStateGameOver;
     global_state->state = GameStateGameOver;
+    global_state->new_highscore = global_state->distance > save_game.max_distance;
+
     if(global_state->distance > save_game.max_distance) {
     if(global_state->distance > save_game.max_distance) {
         save_game.max_distance = global_state->distance;
         save_game.max_distance = global_state->distance;
     }
     }
@@ -79,6 +81,7 @@ void handle_death() {
     if(global_state->points > save_game.max_score) {
     if(global_state->points > save_game.max_score) {
         save_game.max_score = global_state->points;
         save_game.max_score = global_state->points;
     }
     }
+
     storage_game_state_save();
     storage_game_state_save();
 }
 }
 
 
@@ -114,7 +117,8 @@ static void jetpack_game_state_init(GameState* const game_state) {
 
 
     game_state->barry = barry;
     game_state->barry = barry;
     game_state->points = 0;
     game_state->points = 0;
-    game_state->distance = 5000;
+    game_state->distance = 7000;
+    game_state->new_highscore = false;
     game_state->sprites = sprites;
     game_state->sprites = sprites;
     game_state->state = GameStateLife;
     game_state->state = GameStateLife;
     game_state->death_handler = handle_death;
     game_state->death_handler = handle_death;
@@ -198,20 +202,45 @@ static void jetpack_game_render_callback(Canvas* const canvas, void* ctx) {
 
 
     if(game_state->state == GameStateGameOver) {
     if(game_state->state == GameStateGameOver) {
         // Show highscore
         // Show highscore
+        char buffer[24];
 
 
-        char buffer[12];
-        snprintf(buffer, sizeof(buffer), "Dist: %u", game_state->distance);
-        canvas_draw_str_aligned(canvas, 123, 12, AlignRight, AlignBottom, buffer);
+        canvas_set_font(canvas, FontSecondary);
+        canvas_draw_str_aligned(canvas, 64, 5, AlignCenter, AlignTop, "You flew");
 
 
-        snprintf(buffer, sizeof(buffer), "Score: %u", game_state->points);
-        canvas_draw_str_aligned(canvas, 5, 12, AlignLeft, AlignBottom, buffer);
+        snprintf(
+            buffer,
+            sizeof(buffer),
+            game_state->new_highscore ? "%u m (new best)" : "%u m",
+            game_state->distance);
+        canvas_set_font(canvas, FontPrimary);
+        canvas_draw_str_aligned(canvas, 64, 16, AlignCenter, AlignTop, buffer);
+
+        canvas_set_font(canvas, FontSecondary);
+        canvas_draw_str_aligned(canvas, 64, 30, AlignCenter, AlignTop, "and collected");
+
+        snprintf(buffer, sizeof(buffer), "%u coins", game_state->points);
+        canvas_set_font(canvas, FontPrimary);
+        canvas_draw_str_aligned(canvas, 64, 41, AlignCenter, AlignTop, buffer);
+
+        snprintf(buffer, sizeof(buffer), "Your best was %u m", save_game.max_distance);
+        canvas_set_font(canvas, FontSecondary);
+        canvas_draw_str_aligned(canvas, 64, 63, AlignCenter, AlignBottom, buffer);
+
+        canvas_draw_frame(canvas, 0, 3, 128, 49);
 
 
-        canvas_draw_str_aligned(canvas, 64, 34, AlignCenter, AlignCenter, "Highscore:");
-        snprintf(buffer, sizeof(buffer), "Dist: %u", save_game.max_distance);
-        canvas_draw_str_aligned(canvas, 123, 50, AlignRight, AlignBottom, buffer);
+        // char buffer[12];
+        // snprintf(buffer, sizeof(buffer), "Dist: %u", game_state->distance);
+        // canvas_draw_str_aligned(canvas, 123, 12, AlignRight, AlignBottom, buffer);
 
 
-        snprintf(buffer, sizeof(buffer), "Score: %u", save_game.max_score);
-        canvas_draw_str_aligned(canvas, 5, 50, AlignLeft, AlignBottom, buffer);
+        // snprintf(buffer, sizeof(buffer), "Score: %u", game_state->points);
+        // canvas_draw_str_aligned(canvas, 5, 12, AlignLeft, AlignBottom, buffer);
+
+        // canvas_draw_str_aligned(canvas, 64, 34, AlignCenter, AlignCenter, "Highscore:");
+        // snprintf(buffer, sizeof(buffer), "Dist: %u", save_game.max_distance);
+        // canvas_draw_str_aligned(canvas, 123, 50, AlignRight, AlignBottom, buffer);
+
+        // snprintf(buffer, sizeof(buffer), "Score: %u", save_game.max_score);
+        // canvas_draw_str_aligned(canvas, 5, 50, AlignLeft, AlignBottom, buffer);
 
 
         // canvas_draw_str_aligned(canvas, 64, 32, AlignCenter, AlignCenter, "boom.");
         // canvas_draw_str_aligned(canvas, 64, 32, AlignCenter, AlignCenter, "boom.");
 
 
@@ -220,7 +249,7 @@ static void jetpack_game_render_callback(Canvas* const canvas, void* ctx) {
         // }
         // }
     }
     }
 
 
-    canvas_draw_frame(canvas, 0, 0, 128, 64);
+    // canvas_draw_frame(canvas, 0, 0, 128, 64);
 
 
     furi_mutex_release(game_state->mutex);
     furi_mutex_release(game_state->mutex);
 }
 }
@@ -288,6 +317,13 @@ int32_t jetpack_game_app(void* p) {
                     game_state->barry.isBoosting = false;
                     game_state->barry.isBoosting = false;
                 }
                 }
 
 
+                // Reset highscore, for debug purposes
+                if(event.input.type == InputTypeLong && event.input.key == InputKeyLeft) {
+                    save_game.max_distance = 0;
+                    save_game.max_score = 0;
+                    storage_game_state_save();
+                }
+
                 if(event.input.type == InputTypePress) {
                 if(event.input.type == InputTypePress) {
                     switch(event.input.key) {
                     switch(event.input.key) {
                     case InputKeyUp:
                     case InputKeyUp: