SameBoy | Accurate GB/GBC emulator |
| download: https://git.y1.nz/archives/sameboy.tar.gz | |
| README | Files | Log | Refs | LICENSE |
commit 407e540638c537e532dbd1b23041ff25e375f5a0 parent 8db2490077b67577200816dc77936dc56d9288d6 Author: Lior Halphon <LIJI32@gmail.com> Date: Fri, 28 Jun 2024 17:42:53 +0300 Fix conflicts between controller-triggered run modes and swipe-triggered run-mode. Fixes #640 Diffstat:
| M | iOS/GBBackgroundView.h | 1 | + |
| M | iOS/GBViewController.h | 1 | + |
| M | iOS/GBViewController.m | 38 | ++++++++++++++++++++++++++++++-------- |
3 files changed, 32 insertions(+), 8 deletions(-)
diff --git 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 @@ -7,6 +7,7 @@ typedef enum { GBRunModeTurbo, GBRunModeRewind, GBRunModePaused, + GBRunModeUnderclock, } GBRunMode; @interface GBViewController : UIViewController <UIApplicationDelegate, diff --git a/iOS/GBViewController.m b/iOS/GBViewController.m @@ -60,6 +60,8 @@ __weak GCController *_lastController; dispatch_queue_t _cameraQueue; + + bool _runModeFromController; } static void loadBootROM(GB_gameboy_t *gb, GB_boot_rom_t type) @@ -390,9 +392,14 @@ static void rumbleCallback(GB_gameboy_t *gb, double amp) if (button.isAnalog && [[NSUserDefaults standardUserDefaults] boolForKey:@"GBDynamicSpeed"]) { GB_set_clock_multiplier(&_gb, (button.value - analogThreshold) / (1 - analogThreshold) * 3 + 1); } + _runModeFromController = true; + [_backgroundView fadeOverlayOut]; } else { - [self setRunMode:GBRunModeNormal]; + if (self.runMode == GBRunModeTurbo && _runModeFromController) { + [self setRunMode:GBRunModeNormal]; + _runModeFromController = false; + } } break; case GBRewind: @@ -401,22 +408,30 @@ static void rumbleCallback(GB_gameboy_t *gb, double amp) if (button.isAnalog && [[NSUserDefaults standardUserDefaults] boolForKey:@"GBDynamicSpeed"]) { GB_set_clock_multiplier(&_gb, (button.value - analogThreshold) / (1 - analogThreshold) * 4); } + _runModeFromController = true; + [_backgroundView fadeOverlayOut]; } else { - [self setRunMode:GBRunModeNormal]; + if (self.runMode == GBRunModeRewind && _runModeFromController) { + [self setRunMode:GBRunModeNormal]; + _runModeFromController = false; + } } break; case GBUnderclock: if (button.value > 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);
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.