From 407e540638c537e532dbd1b23041ff25e375f5a0 Mon Sep 17 00:00:00 2001 From: Lior Halphon Date: Fri, 28 Jun 2024 17:42:53 +0300 Subject: [PATCH] Fix conflicts between controller-triggered run modes and swipe-triggered run-mode. Fixes #640 --- iOS/GBBackgroundView.h | 1 + iOS/GBViewController.h | 1 + iOS/GBViewController.m | 38 ++++++++++++++++++++++++++++++-------- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/iOS/GBBackgroundView.h b/iOS/GBBackgroundView.h index c36260f..9659588 100644 --- a/iOS/GBBackgroundView.h +++ b/iOS/GBBackgroundView.h @@ -11,4 +11,5 @@ - (void)enterPreviewMode:(bool)showLabel; - (void)reloadThemeImages; +- (void)fadeOverlayOut; @end diff --git a/iOS/GBViewController.h b/iOS/GBViewController.h index 096a6b5..3dd1b85 100644 --- a/iOS/GBViewController.h +++ b/iOS/GBViewController.h @@ -7,6 +7,7 @@ typedef enum { GBRunModeTurbo, GBRunModeRewind, GBRunModePaused, + GBRunModeUnderclock, } GBRunMode; @interface GBViewController : UIViewController analogThreshold) { + [self setRunMode:GBRunModeUnderclock ignoreDynamicSpeed:!button.isAnalog]; if (button.isAnalog && [[NSUserDefaults standardUserDefaults] boolForKey:@"GBDynamicSpeed"]) { GB_set_clock_multiplier(&_gb, 1 - ((button.value - analogThreshold) / (1 - analogThreshold) * 0.75)); } - else { - GB_set_clock_multiplier(&_gb, 0.5); - } + _runModeFromController = true; + [_backgroundView fadeOverlayOut]; } else { - GB_set_clock_multiplier(&_gb, 1.0); + if (self.runMode == GBRunModeUnderclock && _runModeFromController) { + [self setRunMode:GBRunModeNormal]; + _runModeFromController = false; + } } break; default: break; @@ -1030,6 +1045,10 @@ didReceiveNotificationResponse:(UNNotificationResponse *)response [_audioLock signal]; [_audioLock unlock]; } + dispatch_async(dispatch_get_main_queue(), ^{ + self.runMode = GBRunModeNormal; + [_backgroundView fadeOverlayOut]; + }); } @@ -1161,16 +1180,19 @@ didReceiveNotificationResponse:(UNNotificationResponse *)response [_audioClient stop]; } - if (_runMode == GBRunModeNormal || _runMode == GBRunModeTurbo) { + if (_runMode == GBRunModeNormal || _runMode == GBRunModeTurbo || _runMode == GBRunModeUnderclock) { _rewindOver = false; } - if (_runMode == GBRunModeNormal || !([[NSUserDefaults standardUserDefaults] boolForKey:@"GBDynamicSpeed"] && !ignoreDynamicSpeed)) { + if (_runMode == GBRunModeNormal || _runMode == GBRunModeUnderclock || !([[NSUserDefaults standardUserDefaults] boolForKey:@"GBDynamicSpeed"] && !ignoreDynamicSpeed)) { if (_runMode == GBRunModeTurbo) { double multiplier = [[NSUserDefaults standardUserDefaults] doubleForKey:@"GBTurboSpeed"]; GB_set_turbo_mode(&_gb, multiplier == 1, false); GB_set_clock_multiplier(&_gb, multiplier); } + else if (_runMode == GBRunModeUnderclock) { + GB_set_clock_multiplier(&_gb, 0.5); + } else { GB_set_turbo_mode(&_gb, false, false); GB_set_clock_multiplier(&_gb, 1.0);