]> git.earman.xyz Git - sensor-watch.git/commitdiff
Attempt at fixing blackjack win rate counter
authorDavid Volovskiy <devolov@gmail.com>
Fri, 26 Sep 2025 14:02:20 +0000 (10:02 -0400)
committerDavid Volovskiy <devolov@gmail.com>
Sun, 28 Sep 2025 20:33:49 +0000 (16:33 -0400)
watch-faces/complication/blackjack_face.c

index ff4d73a44fa35eca0f4830030b71c00009d27556..654b883e4ad05daf06481fc035fa31c41d0f0314 100755 (executable)
@@ -71,8 +71,7 @@ static bool tap_turned_on = false;
 static game_state_t game_state;\r
 static uint8_t deck[DECK_SIZE] = {0};\r
 static uint8_t current_card = 0;\r
-static bool add_to_games_played = false;\r
-static bool add_to_games_won = false;\r
+static blackjack_face_state_t *g_state = NULL;\r
 hand_info_t player;\r
 hand_info_t dealer;\r
 \r
@@ -219,10 +218,27 @@ static void display_score(uint8_t score, watch_position_t pos) {
     watch_display_text(pos, buf);\r
 }\r
 \r
+static void add_to_game_scores(bool add_to_wins) {\r
+    g_state->games_played++;\r
+    if (g_state->games_played == 0) {\r
+        // Overflow\r
+        g_state->games_played = 1;\r
+        g_state->games_won = add_to_wins ? 1 : 0;\r
+        return;\r
+    }\r
+    if (add_to_wins) {\r
+        g_state->games_won++;\r
+        if (g_state->games_won == 0) {\r
+            // Overflow\r
+            g_state->games_played = 1;\r
+            g_state->games_won = 1;\r
+        }\r
+    }\r
+}\r
+\r
 static void display_win(void) {\r
     game_state = BJ_RESULT;\r
-    add_to_games_played = true;\r
-    add_to_games_won = true;\r
+    add_to_game_scores(true);\r
     watch_display_text_with_fallback(WATCH_POSITION_BOTTOM, "WlN ", " WIN");\r
     display_score(player.score, WATCH_POSITION_SECONDS);\r
     display_score(dealer.score, WATCH_POSITION_TOP_RIGHT);\r
@@ -230,7 +246,7 @@ static void display_win(void) {
 \r
 static void display_lose(void) {\r
     game_state = BJ_RESULT;\r
-    add_to_games_played = true;\r
+    add_to_game_scores(false);\r
     watch_display_text_with_fallback(WATCH_POSITION_BOTTOM, "LOSE", "lOSE");\r
     display_score(player.score, WATCH_POSITION_SECONDS);\r
     display_score(dealer.score, WATCH_POSITION_TOP_RIGHT);\r
@@ -245,7 +261,7 @@ static void display_tie(void) {
 \r
 static void display_bust(void) {\r
     game_state = BJ_RESULT;\r
-    add_to_games_played = true;\r
+    add_to_game_scores(false);\r
     watch_display_text_with_fallback(WATCH_POSITION_BOTTOM, "8UST", "BUST");\r
 }\r
 \r
@@ -332,25 +348,6 @@ static void see_if_dealer_hits(void) {
     }\r
 }\r
 \r
-static void add_to_game_scores(blackjack_face_state_t *state) {\r
-    if (add_to_games_played) {\r
-        add_to_games_played = false;\r
-        state->games_played++;\r
-        if (state->games_played == 0) {\r
-            // Overflow\r
-            state->games_won = 0;\r
-        }\r
-    }\r
-    if (add_to_games_won) {\r
-        add_to_games_won = false;\r
-        state->games_won++;\r
-        if (state->games_won == 0) {\r
-            // Overflow\r
-            state->games_played = 0;\r
-        }\r
-    }\r
-}\r
-\r
 static void handle_button_presses(bool tap_control_on, bool hit) {\r
     switch (game_state)\r
     {\r
@@ -403,6 +400,7 @@ void blackjack_face_setup(uint8_t watch_face_index, void **context_ptr) {
         blackjack_face_state_t *state = (blackjack_face_state_t *)*context_ptr;\r
         state->tap_control_on = false;\r
     }\r
+    g_state = (blackjack_face_state_t *)*context_ptr;\r
 }\r
 \r
 void blackjack_face_activate(void *context) {\r
@@ -414,9 +412,6 @@ void blackjack_face_activate(void *context) {
 \r
 bool blackjack_face_loop(movement_event_t event, void *context) {\r
     blackjack_face_state_t *state = (blackjack_face_state_t *) context;\r
-    if (game_state == BJ_RESULT) {\r
-        add_to_game_scores(state);\r
-    }\r
     switch (event.event_type) {\r
         case EVENT_ACTIVATE:\r
             if (state->tap_control_on) watch_set_indicator(WATCH_INDICATOR_SIGNAL);\r