X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=b1f4b66c755555bca3a567e915171333a1fa3950;hb=refs%2Fheads%2Fmaster-next-patch-release;hp=7b82420cf6dade4071cbc3a4571ecfcf1b0ac408;hpb=c8689f0335cd584d24570046c6eb5a3b75701305;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 7b82420c..b1f4b66c 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -641,8 +641,8 @@ void Delay(unsigned int delay) // Sleep specified number of milliseconds sleep_milliseconds(delay); } -boolean DelayReachedExt(unsigned int *counter_var, unsigned int delay, - unsigned int actual_counter) +boolean DelayReachedExt2(unsigned int *counter_var, unsigned int delay, + unsigned int actual_counter) { if (actual_counter >= *counter_var && actual_counter < *counter_var + delay) @@ -653,34 +653,40 @@ boolean DelayReachedExt(unsigned int *counter_var, unsigned int delay, return TRUE; } -boolean FrameReached(unsigned int *frame_counter_var, unsigned int frame_delay) +boolean DelayReachedExt(DelayCounter *counter, unsigned int actual_counter) { - return DelayReachedExt(frame_counter_var, frame_delay, FrameCounter); + return DelayReachedExt2(&counter->count, counter->value, actual_counter); } -boolean DelayReached(unsigned int *counter_var, unsigned int delay) +boolean FrameReached(DelayCounter *counter) { - return DelayReachedExt(counter_var, delay, Counter()); + return DelayReachedExt(counter, FrameCounter); } -void ResetDelayCounterExt(unsigned int *counter_var, - unsigned int actual_counter) +boolean DelayReached(DelayCounter *counter) { - DelayReachedExt(counter_var, 0, actual_counter); + return DelayReachedExt(counter, Counter()); } -void ResetFrameCounter(unsigned int *frame_counter_var) +void ResetDelayCounterExt(DelayCounter *counter, unsigned int actual_counter) { - FrameReached(frame_counter_var, 0); + DelayReachedExt2(&counter->count, 0, actual_counter); } -void ResetDelayCounter(unsigned int *counter_var) +void ResetFrameCounter(DelayCounter *counter) { - DelayReached(counter_var, 0); + ResetDelayCounterExt(counter, FrameCounter); } -int WaitUntilDelayReached(unsigned int *counter_var, unsigned int delay) +void ResetDelayCounter(DelayCounter *counter) { + ResetDelayCounterExt(counter, Counter()); +} + +int WaitUntilDelayReached(DelayCounter *counter) +{ + unsigned int *counter_var = &counter->count; + unsigned int delay = counter->value; unsigned int actual_counter; int skip_frames = 0; @@ -711,22 +717,22 @@ int WaitUntilDelayReached(unsigned int *counter_var, unsigned int delay) return skip_frames; } -void SkipUntilDelayReached(unsigned int *counter_var, unsigned int delay, +void SkipUntilDelayReached(DelayCounter *counter, int *loop_var, int last_loop_value) { - int skip_frames = WaitUntilDelayReached(counter_var, delay); + int skip_frames = WaitUntilDelayReached(counter); #if 0 #if DEBUG if (skip_frames) Debug("internal:SkipUntilDelayReached", "%d: %d ms -> SKIP %d FRAME(S) [%d ms]", - *loop_var, delay, - skip_frames, skip_frames * delay); + *loop_var, counter->value, + skip_frames, skip_frames * counter->value); else Debug("internal:SkipUntilDelayReached", "%d: %d ms", - *loop_var, delay); + *loop_var, counter->value); #endif #endif @@ -1344,6 +1350,8 @@ void GetOptions(int argc, char *argv[], options.identifier = NULL; options.level_nr = NULL; + options.display_nr = 0; + options.mytapes = FALSE; options.serveronly = FALSE; options.network = FALSE; @@ -1543,6 +1551,28 @@ void GetOptions(int argc, char *argv[], if (option_arg == next_option) options_left++; } + else if (strncmp(option, "-display", option_len) == 0) + { + if (option_arg == NULL) + FailWithHelp("option '%s' requires an argument", option_str); + + if (option_arg == next_option) + options_left++; + + int display_nr = atoi(option_arg); + +#if 1 + // dirty hack: SDL_GetNumVideoDisplays() seems broken on some systems + options.display_nr = display_nr; +#else + options.display_nr = + MAX(0, MIN(display_nr, SDL_GetNumVideoDisplays() - 1)); + + if (display_nr != options.display_nr) + Warn("invalid display %d -- using display %d", + display_nr, options.display_nr); +#endif + } #if defined(PLATFORM_MAC) else if (strPrefix(option, "-psn")) {