Merge pull request #1300 from jeapostrophe/master

Fixing audio/sync problems when gameplay is interrupted by call/etc
This commit is contained in:
Twinaphex 2014-12-22 19:26:24 +01:00
commit b6b3090dd1
2 changed files with 17 additions and 10 deletions

View File

@ -243,16 +243,18 @@ void switch_to_ios() {
} }
apple_gamecontroller_init(); apple_gamecontroller_init();
apple_start_iteration();
} }
- (void)applicationDidBecomeActive:(UIApplication *)application - (void)applicationDidBecomeActive:(UIApplication *)application
{ {
apple_start_iteration(); [self showGameView];
} }
- (void)applicationWillResignActive:(UIApplication *)application - (void)applicationWillResignActive:(UIApplication *)application
{ {
apple_stop_iteration(); [self showPauseMenu: self];
} }
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

View File

@ -27,7 +27,7 @@ void apple_start_iteration(void);
void apple_stop_iteration(void); void apple_stop_iteration(void);
static CFRunLoopObserverRef iterate_observer; static CFRunLoopObserverRef iterate_observer = NULL;
static void do_iteration(void) static void do_iteration(void)
{ {
@ -103,17 +103,22 @@ static void do_iteration(void)
void apple_start_iteration(void) void apple_start_iteration(void)
{ {
iterate_observer = CFRunLoopObserverCreate(0, kCFRunLoopBeforeWaiting, if (iterate_observer == NULL) {
true, 0, (CFRunLoopObserverCallBack)do_iteration, 0); iterate_observer =
CFRunLoopAddObserver(CFRunLoopGetMain(), iterate_observer, CFRunLoopObserverCreate(0, kCFRunLoopBeforeWaiting,
kCFRunLoopCommonModes); true, 0, (CFRunLoopObserverCallBack)do_iteration, 0);
CFRunLoopAddObserver(CFRunLoopGetMain(), iterate_observer,
kCFRunLoopCommonModes);
}
} }
void apple_stop_iteration(void) void apple_stop_iteration(void)
{ {
CFRunLoopObserverInvalidate(iterate_observer); if (iterate_observer != NULL) {
CFRelease(iterate_observer); CFRunLoopObserverInvalidate(iterate_observer);
iterate_observer = 0; CFRelease(iterate_observer);
iterate_observer = NULL;
}
} }
static void frontend_apple_get_environment_settings(int *argc, char *argv[], static void frontend_apple_get_environment_settings(int *argc, char *argv[],