]> git.earman.xyz Git - sensor-watch.git/commitdiff
Added second fuel mode where we don't recharge the fuel if it hits zero.
authorDavid Volovskiy <devolov@gmail.com>
Thu, 25 Jul 2024 01:08:35 +0000 (21:08 -0400)
committerDavid Volovskiy <devolov@gmail.com>
Tue, 3 Sep 2024 20:20:11 +0000 (16:20 -0400)
movement/watch_faces/complication/endless_runner_face.c

index bf8e3ac84c4cf40d2e85f09a7eaa70bb39c64425..6009015516a280c317538f119f726b59bd031c68 100644 (file)
@@ -46,6 +46,7 @@ typedef enum {
     DIFF_NORM,      //      FREQ FPS;       MIN_ZEROES 0's min;  Jump is JUMP_FRAMES frames
     DIFF_HARD,      //      FREQ FPS;  MIN_ZEROES_HARD 0's min;  jump is JUMP_FRAMES frames
     DIFF_FUEL,      // Mode where the top-right displays the amoount of fuel that you can be above the ground for, dodging obstacles. When on the ground, your fuel recharges.
+    DIFF_FUEL_1,    // Same as DIFF_FUEL, but if your fuel is 0, then you won't recharge
     DIFF_COUNT
 } RunnerDifficulty;
 
@@ -232,6 +233,10 @@ static void add_to_score(endless_runner_state_t *state) {
 
 static void display_fuel(uint8_t subsecond, uint8_t difficulty) {
     char buf[4];
+    if (difficulty == DIFF_FUEL_1 && game_state.fuel == 0 && subsecond % 4 == 0) {
+        watch_display_string("  ", 2);  // Blink the 0 fuel to show it cannot be refilled.
+        return;
+    }
     sprintf(buf, "%2d", game_state.fuel);
     watch_display_string(buf, 2);
 }
@@ -264,12 +269,15 @@ static void display_difficulty(uint16_t difficulty) {
     case DIFF_FUEL:
         watch_display_string(" F", 2);
         break;
+    case DIFF_FUEL_1:
+        watch_display_string("1F", 2);
+        break;
     case DIFF_NORM:
     default:
         watch_display_string(" N", 2);
         break;
     }
-    game_state.fuel_mode = difficulty == DIFF_FUEL;
+    game_state.fuel_mode = difficulty >= DIFF_FUEL && difficulty <= DIFF_FUEL_1;
 }
 
 static void change_difficulty(endless_runner_state_t *state) {
@@ -464,7 +472,7 @@ static void update_game(endless_runner_state_t *state, uint8_t subsecond) {
         if (game_state.fuel_mode) {
             for (int i = 0; i < JUMP_FRAMES_FUEL_RECHARGE; i++)
             {
-                if(game_state.fuel >= JUMP_FRAMES_FUEL)
+                if(game_state.fuel >= JUMP_FRAMES_FUEL || (state -> difficulty == DIFF_FUEL_1 && !game_state.fuel))
                     break;
                 game_state.fuel++;
             }