git.y1.nz

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:
MiOS/GBBackgroundView.h1+
MiOS/GBViewController.h1+
MiOS/GBViewController.m38++++++++++++++++++++++++++++++--------
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.