cocoaTouch/SDLOverrides/SDL_uikitappdelegate.m
changeset 2698 90585aba87ad
parent 2697 75880595a9f1
child 2699 249adefa9c1c
--- a/cocoaTouch/SDLOverrides/SDL_uikitappdelegate.m	Sat Jan 16 06:48:56 2010 +0000
+++ b/cocoaTouch/SDLOverrides/SDL_uikitappdelegate.m	Sat Jan 16 17:30:37 2010 +0000
@@ -27,6 +27,7 @@
 #import "jumphack.h"
 #import "SDL_video.h"
 #import "GameSetup.h"
+#import "PascalImports.h"
 
 //#import "SoundEffect.h"	
 //	SoundEffect *erasingSound = [[SoundEffect alloc] initWithContentsOfFile:[mainBundle pathForResource:@"Erase" ofType:@"caf"]];
@@ -37,23 +38,11 @@
 #undef main
 #endif
 
-extern int SDL_main(int argc, char *argv[]);
-int main (int argc, char **argv) {
-	int i;
-	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-	
-	/* store arguments */
-	forward_argc = argc;
-	forward_argv = (char **)malloc(argc * sizeof(char *));
-	for (i = 0; i < argc; i++) {
-		forward_argv[i] = malloc( (strlen(argv[i])+1) * sizeof(char));
-		strcpy(forward_argv[i], argv[i]);
-	}
-
-	/* Give over control to run loop, SDLUIKitDelegate will handle most things from here */
-	UIApplicationMain(argc, argv, NULL, @"SDLUIKitDelegate");
-	
-	[pool release];
+int main(int argc, char *argv[]) {
+    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+    int retVal = UIApplicationMain(argc, argv, nil, @"SDLUIKitDelegate");
+    [pool release];
+    return retVal;
 }
 
 @implementation SDLUIKitDelegate
@@ -73,34 +62,36 @@
 	[super dealloc];
 }
 
--(void) launchSDL_main{
-	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-	
-	// must setup arguments in the same thread
-	[setup setArgsForLocalPlay];
-	
-	// run the user's application, passing argc and argv
-	SDL_main(forward_argc, forward_argv);
-
-	[pool release];
-}
-
 -(IBAction) startSDLgame {
 	
 	[setup startThread:@"engineProtocol"];
 	[setup loadSettingsFromFile:@"settings.plist" forKey:@"systemSettings"];
 
 	// remove the current view to free resources
-/*	[UIView beginAnimations:nil context:NULL];
-	[UIView setAnimationDuration:1.5];
-	controller.view.alpha = 1;
+	[UIView beginAnimations:@"removing main controller" context:NULL];
+	[UIView setAnimationDuration:1];
+	controller.view.alpha = 0;
 	[UIView commitAnimations];
-	[controller.view performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1.5];
-*/
+	[controller.view performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1];
+
 	NSLog(@"Game is launching...");
 
-	[NSThread detachNewThreadSelector:@selector(launchSDL_main) toTarget:self withObject:nil];
+	// direct execution or thread? check the one that gives most fps
+	// library or call SDL_main? pascal quits at the end of the main
+	Game();
 	
+	NSLog(@"Game is exting...");
+
+	[[window viewWithTag:54867] removeFromSuperview];
+	[setup unloadSettings];
+
+	[window addSubview:controller.view];
+	[window makeKeyAndVisible];
+
+	[UIView beginAnimations:@"inserting main controller" context:NULL];
+	[UIView setAnimationDuration:1];
+	controller.view.alpha = 1;
+	[UIView commitAnimations];	
 }
 
 // override the direct execution of SDL_main to allow us to implement the frontend (even using a nib)
@@ -116,26 +107,18 @@
 }
 
 -(void) applicationWillTerminate:(UIApplication *)application {
-	/* free the memory we used to hold copies of argc and argv */
-	int i;
-	for (i=0; i < forward_argc; i++) {
-		free(forward_argv[i]);
-	}
-	free(forward_argv);	
 	SDL_SendQuit();
 	/* hack to prevent automatic termination.  See SDL_uikitevents.m for details */
 	// have to remove this otherwise game goes on when pushing the home button
 	//longjmp(*(jump_env()), 1);
 }
 
--(void) applicationWillResignActive:(UIApplication*)application
-{
+-(void) applicationWillResignActive:(UIApplication*)application {
 //	NSLog(@"%@", NSStringFromSelector(_cmd));
 	SDL_SendWindowEvent(self.windowID, SDL_WINDOWEVENT_MINIMIZED, 0, 0);
 }
 
--(void) applicationDidBecomeActive:(UIApplication*)application
-{
+-(void) applicationDidBecomeActive:(UIApplication*)application {
 //	NSLog(@"%@", NSStringFromSelector(_cmd));
 	SDL_SendWindowEvent(self.windowID, SDL_WINDOWEVENT_RESTORED, 0, 0);
 }
@@ -146,33 +129,8 @@
 	return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
 }
 */
-+(void) resetFrontend {
-	[[[SDLUIKitDelegate sharedAppDelegate].window viewWithTag:54867] removeFromSuperview];
-	[[SDLUIKitDelegate sharedAppDelegate].window addSubview:[SDLUIKitDelegate sharedAppDelegate].controller.view];
-	
-	[UIView beginAnimations:nil context:NULL];
-	[UIView setAnimationDuration:1];
-	[SDLUIKitDelegate sharedAppDelegate].controller.view.alpha = 1;
-	[UIView commitAnimations];
-	
-	[[SDLUIKitDelegate sharedAppDelegate].setup unloadSettings];
-	[[SDLUIKitDelegate sharedAppDelegate].window makeKeyAndVisible];
-}
 
-#pragma mark -
-#pragma mark Convenience methods
-void IPH_returnFrontend (void) {
-	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-
-	[SDLUIKitDelegate resetFrontend];
-	NSLog(@"Game exited...");
-
-	[pool release];
-	[NSThread exit];
-}
-
-
-+(NSString *)dataFilePath: (NSString *)fileName {
+-(NSString *)dataFilePath: (NSString *)fileName {
 	NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 	NSString *documentsDirectory = [paths objectAtIndex:0];
 	return [documentsDirectory stringByAppendingPathComponent:fileName];