mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-09-02 17:33:15 +02:00
Fix conflicts between controller-triggered run modes and swipe-triggered run-mode. Fixes #640
This commit is contained in:
@@ -11,4 +11,5 @@
|
|||||||
|
|
||||||
- (void)enterPreviewMode:(bool)showLabel;
|
- (void)enterPreviewMode:(bool)showLabel;
|
||||||
- (void)reloadThemeImages;
|
- (void)reloadThemeImages;
|
||||||
|
- (void)fadeOverlayOut;
|
||||||
@end
|
@end
|
||||||
|
@@ -7,6 +7,7 @@ typedef enum {
|
|||||||
GBRunModeTurbo,
|
GBRunModeTurbo,
|
||||||
GBRunModeRewind,
|
GBRunModeRewind,
|
||||||
GBRunModePaused,
|
GBRunModePaused,
|
||||||
|
GBRunModeUnderclock,
|
||||||
} GBRunMode;
|
} GBRunMode;
|
||||||
|
|
||||||
@interface GBViewController : UIViewController <UIApplicationDelegate,
|
@interface GBViewController : UIViewController <UIApplicationDelegate,
|
||||||
|
@@ -60,6 +60,8 @@
|
|||||||
__weak GCController *_lastController;
|
__weak GCController *_lastController;
|
||||||
|
|
||||||
dispatch_queue_t _cameraQueue;
|
dispatch_queue_t _cameraQueue;
|
||||||
|
|
||||||
|
bool _runModeFromController;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void loadBootROM(GB_gameboy_t *gb, GB_boot_rom_t type)
|
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"]) {
|
if (button.isAnalog && [[NSUserDefaults standardUserDefaults] boolForKey:@"GBDynamicSpeed"]) {
|
||||||
GB_set_clock_multiplier(&_gb, (button.value - analogThreshold) / (1 - analogThreshold) * 3 + 1);
|
GB_set_clock_multiplier(&_gb, (button.value - analogThreshold) / (1 - analogThreshold) * 3 + 1);
|
||||||
}
|
}
|
||||||
|
_runModeFromController = true;
|
||||||
|
[_backgroundView fadeOverlayOut];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
[self setRunMode:GBRunModeNormal];
|
if (self.runMode == GBRunModeTurbo && _runModeFromController) {
|
||||||
|
[self setRunMode:GBRunModeNormal];
|
||||||
|
_runModeFromController = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GBRewind:
|
case GBRewind:
|
||||||
@@ -401,22 +408,30 @@ static void rumbleCallback(GB_gameboy_t *gb, double amp)
|
|||||||
if (button.isAnalog && [[NSUserDefaults standardUserDefaults] boolForKey:@"GBDynamicSpeed"]) {
|
if (button.isAnalog && [[NSUserDefaults standardUserDefaults] boolForKey:@"GBDynamicSpeed"]) {
|
||||||
GB_set_clock_multiplier(&_gb, (button.value - analogThreshold) / (1 - analogThreshold) * 4);
|
GB_set_clock_multiplier(&_gb, (button.value - analogThreshold) / (1 - analogThreshold) * 4);
|
||||||
}
|
}
|
||||||
|
_runModeFromController = true;
|
||||||
|
[_backgroundView fadeOverlayOut];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
[self setRunMode:GBRunModeNormal];
|
if (self.runMode == GBRunModeRewind && _runModeFromController) {
|
||||||
|
[self setRunMode:GBRunModeNormal];
|
||||||
|
_runModeFromController = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GBUnderclock:
|
case GBUnderclock:
|
||||||
if (button.value > analogThreshold) {
|
if (button.value > analogThreshold) {
|
||||||
|
[self setRunMode:GBRunModeUnderclock ignoreDynamicSpeed:!button.isAnalog];
|
||||||
if (button.isAnalog && [[NSUserDefaults standardUserDefaults] boolForKey:@"GBDynamicSpeed"]) {
|
if (button.isAnalog && [[NSUserDefaults standardUserDefaults] boolForKey:@"GBDynamicSpeed"]) {
|
||||||
GB_set_clock_multiplier(&_gb, 1 - ((button.value - analogThreshold) / (1 - analogThreshold) * 0.75));
|
GB_set_clock_multiplier(&_gb, 1 - ((button.value - analogThreshold) / (1 - analogThreshold) * 0.75));
|
||||||
}
|
}
|
||||||
else {
|
_runModeFromController = true;
|
||||||
GB_set_clock_multiplier(&_gb, 0.5);
|
[_backgroundView fadeOverlayOut];
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
GB_set_clock_multiplier(&_gb, 1.0);
|
if (self.runMode == GBRunModeUnderclock && _runModeFromController) {
|
||||||
|
[self setRunMode:GBRunModeNormal];
|
||||||
|
_runModeFromController = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default: break;
|
default: break;
|
||||||
@@ -1030,6 +1045,10 @@ didReceiveNotificationResponse:(UNNotificationResponse *)response
|
|||||||
[_audioLock signal];
|
[_audioLock signal];
|
||||||
[_audioLock unlock];
|
[_audioLock unlock];
|
||||||
}
|
}
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
self.runMode = GBRunModeNormal;
|
||||||
|
[_backgroundView fadeOverlayOut];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1161,16 +1180,19 @@ didReceiveNotificationResponse:(UNNotificationResponse *)response
|
|||||||
[_audioClient stop];
|
[_audioClient stop];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_runMode == GBRunModeNormal || _runMode == GBRunModeTurbo) {
|
if (_runMode == GBRunModeNormal || _runMode == GBRunModeTurbo || _runMode == GBRunModeUnderclock) {
|
||||||
_rewindOver = false;
|
_rewindOver = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_runMode == GBRunModeNormal || !([[NSUserDefaults standardUserDefaults] boolForKey:@"GBDynamicSpeed"] && !ignoreDynamicSpeed)) {
|
if (_runMode == GBRunModeNormal || _runMode == GBRunModeUnderclock || !([[NSUserDefaults standardUserDefaults] boolForKey:@"GBDynamicSpeed"] && !ignoreDynamicSpeed)) {
|
||||||
if (_runMode == GBRunModeTurbo) {
|
if (_runMode == GBRunModeTurbo) {
|
||||||
double multiplier = [[NSUserDefaults standardUserDefaults] doubleForKey:@"GBTurboSpeed"];
|
double multiplier = [[NSUserDefaults standardUserDefaults] doubleForKey:@"GBTurboSpeed"];
|
||||||
GB_set_turbo_mode(&_gb, multiplier == 1, false);
|
GB_set_turbo_mode(&_gb, multiplier == 1, false);
|
||||||
GB_set_clock_multiplier(&_gb, multiplier);
|
GB_set_clock_multiplier(&_gb, multiplier);
|
||||||
}
|
}
|
||||||
|
else if (_runMode == GBRunModeUnderclock) {
|
||||||
|
GB_set_clock_multiplier(&_gb, 0.5);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
GB_set_turbo_mode(&_gb, false, false);
|
GB_set_turbo_mode(&_gb, false, false);
|
||||||
GB_set_clock_multiplier(&_gb, 1.0);
|
GB_set_clock_multiplier(&_gb, 1.0);
|
||||||
|
Reference in New Issue
Block a user