From fe3ae8e4140bd166879acf4732ff5209d6b22268 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Fri, 3 Feb 2017 20:41:29 +0100 Subject: [PATCH] improved terminal/logfile output of automatic tape replay (progress/summary) --- src/libgame/misc.c | 12 ++++++++++ src/libgame/misc.h | 1 + src/tape.c | 55 ++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 61 insertions(+), 7 deletions(-) diff --git a/src/libgame/misc.c b/src/libgame/misc.c index bd069f92..0c0e82c2 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -222,6 +222,18 @@ void Print(char *format, ...) va_end(ap); } +void PrintNoLog(char *format, ...) +{ + FILE *file = program.log_file_default[LOG_OUT_ID]; + va_list ap; + + va_start(ap, format); + vfprintf(file, format, ap); + va_end(ap); + + fflush(file); +} + void PrintLine(char *line_chars, int line_length) { int i; diff --git a/src/libgame/misc.h b/src/libgame/misc.h index 1e8f039d..6c654cb5 100644 --- a/src/libgame/misc.h +++ b/src/libgame/misc.h @@ -119,6 +119,7 @@ void printf_line(char *, int); void printf_line_with_prefix(char *, char *, int); void Print(char *, ...); +void PrintNoLog(char *, ...); void PrintLine(char *, int); void PrintLineWithPrefix(char *, char *, int); diff --git a/src/tape.c b/src/tape.c index 8c1e059b..f0a8f02d 100644 --- a/src/tape.c +++ b/src/tape.c @@ -455,6 +455,44 @@ void TapeDeactivateDisplayOff(boolean redraw_display) } +/* ========================================================================= */ +/* tape logging functions */ +/* ========================================================================= */ + +void PrintTapeReplayProgress(boolean replay_finished) +{ + static unsigned int counter_last = -1; + unsigned int counter = Counter(); + unsigned int counter_seconds = counter / 1000; + + if (!replay_finished) + { + unsigned int counter_delay = 50; + + if (counter > counter_last + counter_delay) + { + PrintNoLog("\r"); + PrintNoLog("Level %03d [%02d:%02d]: [%02d:%02d] - playing tape ... ", + level_nr, tape.length_seconds / 60, tape.length_seconds % 60, + TapeTime / 60, TapeTime % 60); + + counter_last = counter; + } + } + else + { + PrintNoLog("\r"); + Print("Level %03d [%02d:%02d]: (%02d:%02d.%03d / %.2f %%) - %s.\n", + level_nr, tape.length_seconds / 60, tape.length_seconds % 60, + counter_seconds / 60, counter_seconds % 60, counter % 1000, + (float)counter / tape.length_seconds / 10, + tape.auto_play_level_solved ? "solved" : "NOT SOLVED"); + + counter_last = -1; + } +} + + /* ========================================================================= */ /* tape control functions */ /* ========================================================================= */ @@ -854,6 +892,9 @@ byte *TapePlayAction() tape.delay_played = 0; } + if (tape.auto_play) + PrintTapeReplayProgress(FALSE); + return action; } @@ -1052,7 +1093,7 @@ void AutoPlayTape() if (autoplay_initialized) { /* just finished auto-playing tape */ - Print("%s.\n", tape.auto_play_level_solved ? "solved" : "NOT SOLVED"); + PrintTapeReplayProgress(TRUE); num_levels_played++; @@ -1109,18 +1150,18 @@ void AutoPlayTape() TapeErase(); - Print("Level %03d: ", level_nr); - LoadLevel(level_nr); + if (level.no_level_file || level.no_valid_file) { - Print("(no level)\n"); + Print("Level %03d: (no level)\n", level_nr); + continue; } #if 0 /* ACTIVATE THIS FOR LOADING/TESTING OF LEVELS ONLY */ - Print("(only testing level)\n"); + Print("Level %03d: (only testing level)\n", level_nr); continue; #endif @@ -1133,12 +1174,12 @@ void AutoPlayTape() { num_tape_missing++; - Print("(no tape)\n"); + Print("Level %03d: (no tape)\n", level_nr); continue; } - Print("playing tape ... "); + InitCounter(); TapeStartGamePlaying(); TapeStartWarpForward(global.autoplay_mode); -- 2.34.1