]> git.draconx.ca Git - rrace.git/blobdiff - src/motif.c
motif: Remove console printout when game is finished.
[rrace.git] / src / motif.c
index fbdc9a750a2e86cb934109de3d3e9aebbb8ec791..57e14758af6891afd120949c0e4936fea1619663 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * X11 GUI for slide puzzle game
- * Copyright © 2022 Nick Bowler
+ * Copyright © 2022-2023 Nick Bowler
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -143,14 +143,13 @@ static void timer_tick(void *data, XtIntervalId *id)
 
        if (state->board.x > 4) {
                /* Game is over */
-               state->timer_tick = 0;
+               state->flags &= ~FLAG_TIMER_RUNNING;
                return;
        }
 
-       app = XtWidgetToApplicationContext(state->game);
        ui_timer_update(state, game_elapsed(&state->board));
-       state->timer_tick = XtAppAddTimeOut(app, TIMER_UPDATE_MS,
-                                           timer_tick, state);
+       app = XtWidgetToApplicationContext(state->game);
+       XtAppAddTimeOut(app, TIMER_UPDATE_MS, timer_tick, state);
 }
 
 static void do_input_move(struct app_state *state, int x, int y)
@@ -159,16 +158,7 @@ static void do_input_move(struct app_state *state, int x, int y)
 
        if ((mask = game_do_move(&state->board, x, y)) != 0) {
                if (game_check_goal(&state->board) == 0) {
-                       int_fast32_t ms = game_finish(&state->board);
-                       unsigned min, sec;
-
-                       ui_timer_update(state, ms);
-
-                       sec = ms / 1000, ms %= 1000;
-                       min = sec / 60, sec %= 60;
-                       printf("You won!  Time was %u:%.2u.%.3u\n",
-                              min, sec, (unsigned)ms);
-
+                       ui_timer_update(state, game_finish(&state->board));
                        mask |= ~GOAL_MASK;
                }
 
@@ -178,7 +168,9 @@ static void do_input_move(struct app_state *state, int x, int y)
 
 static void set_view_goal(struct app_state *state, int view_goal)
 {
-       state->view_goal_on_game = !!view_goal;
+       state->flags &= ~FLAG_VIEW_GOAL_ON_GAME;
+       state->flags |= view_goal ? FLAG_VIEW_GOAL_ON_GAME : 0;
+
        x11_redraw_game(state, game_check_goal(&state->board));
 }
 
@@ -231,18 +223,18 @@ static void proc_exit(Widget w, XEvent *e, String *argv, Cardinal *argc)
 
 static void proc_new_game(Widget w, XEvent *e, String *argv, Cardinal *argc)
 {
+       XtAppContext app;
+
        game_reset(&state.board);
 
        x11_redraw_goal(&state, -1, get_shell(w));
        x11_redraw_game(&state, -1);
 
-       if (!state.timer_tick) {
-               XtAppContext app = XtWidgetToApplicationContext(w);
-               state.timer_tick = XtAppAddTimeOut(app, TIMER_UPDATE_MS,
-                                                  timer_tick, &state);
-       }
-
        game_begin(&state.board);
+       if (!(state.flags & FLAG_TIMER_RUNNING)) {
+               state.flags |= FLAG_TIMER_RUNNING;
+               timer_tick(&state, 0);
+       }
 }
 
 static void proc_about(Widget w, XEvent *e, String *argv, Cardinal *argc)
@@ -312,7 +304,7 @@ static XtAppContext app_initialize(int argc, char **argv)
                state.board.game[i] = state.board.goal[i] << GOAL_SHIFT;
        game_finish(&state.board);
 
-       state.use_ewmh_icons = ewmh_probe_wm_icon(shell);
+       state.flags = ewmh_probe_wm_icon(shell);
        XtRealizeWidget(shell);
 
        x11_redraw_goal(&state, 0, shell);