project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m
changeset 6870 f72cac290325
parent 6869 a187c280dd3d
child 7943 0b03ac28212d
--- a/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m	Mon Apr 09 03:25:17 2012 +0200
+++ b/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m	Mon Apr 09 04:43:30 2012 +0200
@@ -25,7 +25,7 @@
 static UIViewController *callingController;
 
 @implementation GameInterfaceBridge
-@synthesize blackView, savePath, proto;
+@synthesize blackView, savePath, port;
 
 #pragma mark -
 #pragma mark Instance methods for engine interaction
@@ -35,9 +35,10 @@
     [[AudioManagerController mainManager] fadeOutBackgroundMusic];
 
     EngineProtocolNetwork *engineProtocol = [[EngineProtocolNetwork alloc] init];
-    self.proto = engineProtocol;
+    self.port = engineProtocol.enginePort;
+    engineProtocol.delegate = self;
+    [engineProtocol spawnThread:self.savePath withOptions:optionsOrNil];
     [engineProtocol release];
-    [self.proto spawnThread:self.savePath withOptions:optionsOrNil];
 
     // add a black view hiding the background
     UIWindow *thisWindow = [[HedgewarsAppDelegate sharedAppDelegate] uiwindow];
@@ -82,20 +83,6 @@
     [UIView commitAnimations];
     [self.blackView performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1];
 
-    // engine thread *should* be done by now
-    NSArray *stats = [[NSArray alloc] initWithArray:self.proto.statsArray copyItems:YES];
-    if ([HWUtils gameStatus] == gsEnded && stats != nil) {
-        StatsPageViewController *statsPage = [[StatsPageViewController alloc] init];
-        statsPage.statsArray = stats;
-        statsPage.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
-        if ([statsPage respondsToSelector:@selector(setModalPresentationStyle:)])
-            statsPage.modalPresentationStyle = UIModalPresentationPageSheet;
-
-        [callingController presentModalViewController:statsPage animated:YES];
-        [statsPage release];
-    }
-    [stats release];
-
     // can remove the savefile if the replay has ended
     if ([HWUtils gameType] == gtSave)
         [[NSFileManager defaultManager] removeItemAtPath:self.savePath error:nil];
@@ -111,9 +98,8 @@
 -(void) engineLaunch {
     const char *gameArgs[11];
     CGFloat width, height;
-    NSInteger enginePort = self.proto.enginePort;
     CGFloat screenScale = [[UIScreen mainScreen] safeScale];
-    NSString *ipcString = [[NSString alloc] initWithFormat:@"%d",enginePort];
+    NSString *ipcString = [[NSString alloc] initWithFormat:@"%d",self.port];
     NSString *localeString = [[NSString alloc] initWithFormat:@"%@.txt",[[NSLocale preferredLanguages] objectAtIndex:0]];
     NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
 
@@ -175,11 +161,23 @@
 -(void) dealloc {
     releaseAndNil(blackView);
     releaseAndNil(savePath);
-    releaseAndNil(proto);
     [super dealloc];
 }
 
 #pragma mark -
+#pragma mark EngineProtocolDelegate methods
+-(void) gameEndedWithStatistics:(NSArray *)stats {
+    if (stats != nil) {
+        StatsPageViewController *statsPage = [[StatsPageViewController alloc] init];
+        statsPage.statsArray = stats;
+        statsPage.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
+
+        [callingController presentModalViewController:statsPage animated:YES];
+        [statsPage release];
+    }
+}
+
+#pragma mark -
 #pragma mark Class methods for setting up the engine from outsite
 +(void) registerCallingController:(UIViewController *)controller {
     callingController = controller;