project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m
author koda
Mon, 25 Apr 2011 07:53:06 +0200
changeset 5175 a3da220dbb3f
parent 5174 f5294509783e
child 5177 b850b544addc
permissions -rw-r--r--
finish overlay refactoring and some leak annihilation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
     1
/*
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
     2
 * Hedgewars-iOS, a Hedgewars port for iOS devices
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
     3
 * Copyright (c) 2009-2011 Vittorio Giovara <vittorio.giovara@gmail.com>
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
     4
 *
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
     8
 *
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    12
 * GNU General Public License for more details.
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    13
 *
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    17
 *
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    18
 * File created on 18/04/2011.
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    19
 */
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    20
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    21
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    22
#import "GameInterfaceBridge.h"
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    23
#import "PascalImports.h"
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    24
#import "EngineProtocolNetwork.h"
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    25
#import "OverlayViewController.h"
5158
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
    26
#import "StatsPageViewController.h"
5174
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5166
diff changeset
    27
#import "ObjcExports.h"
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    28
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    29
@implementation GameInterfaceBridge
5157
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
    30
@synthesize parentController, systemSettings, savePath, overlayController, engineProtocol, ipcPort, gameType;
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    31
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    32
-(id) initWithController:(id) viewController {
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    33
    if (self = [super init]) {
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    34
        self.ipcPort = randomPort();
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    35
        self.gameType = gtNone;
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    36
        self.savePath = nil;
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    37
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    38
        self.parentController = (UIViewController *)viewController;
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    39
        self.engineProtocol = [[EngineProtocolNetwork alloc] initOnPort:self.ipcPort];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    40
        self.engineProtocol.delegate = self;
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    41
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    42
        self.systemSettings = [NSDictionary dictionaryWithContentsOfFile:SETTINGS_FILE()];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    43
        self.overlayController = [[OverlayViewController alloc] initWithNibName:@"OverlayViewController" bundle:nil];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    44
    }
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    45
    return self;
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    46
}
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    47
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    48
-(void) dealloc {
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    49
    releaseAndNil(parentController);
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    50
    releaseAndNil(engineProtocol);
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    51
    releaseAndNil(systemSettings);
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    52
    releaseAndNil(savePath);
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    53
    releaseAndNil(overlayController);
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    54
    [super dealloc];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    55
}
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    56
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    57
#pragma mark -
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    58
// overlay with controls, become visible later, with a transparency effect since the sdlwindow is not yet created
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    59
-(void) displayOverlayLater:(id) object {
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    60
    NSDictionary *dict = (NSDictionary *)object;
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    61
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    62
    [self.overlayController setUseClassicMenu:[[dict objectForKey:@"menu"] boolValue]];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    63
    [self.overlayController setInitialOrientation:[[dict objectForKey:@"orientation"] intValue]];
5174
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5166
diff changeset
    64
    objcExportsInit(self.overlayController);
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    65
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    66
    UIWindow *gameWindow = (IS_DUALHEAD() ? [HedgewarsAppDelegate sharedAppDelegate].uiwindow : [[UIApplication sharedApplication] keyWindow]);
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    67
    [gameWindow addSubview:self.overlayController.view];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    68
}
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    69
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    70
// main routine for calling the actual game engine
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    71
-(void) startGameEngine {
5156
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
    72
    const char *gameArgs[11];
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    73
    NSInteger width, height, orientation;
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    74
    NSString *ipcString = [[NSString alloc] initWithFormat:@"%d", self.ipcPort];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    75
    NSString *localeString = [[NSString alloc] initWithFormat:@"%@.txt", [[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode]];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    76
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    77
    if (IS_DUALHEAD()) {
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    78
        CGRect screenBounds = [[[UIScreen screens] objectAtIndex:1] bounds];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    79
        width = (int) screenBounds.size.width;
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    80
        height = (int) screenBounds.size.height;
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    81
        orientation = 0;
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    82
    } else {
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    83
        CGRect screenBounds = [[UIScreen mainScreen] bounds];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    84
        width = (int) screenBounds.size.height;
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    85
        height = (int) screenBounds.size.width;
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    86
        orientation = (self.parentController.interfaceOrientation == UIDeviceOrientationLandscapeLeft) ? -90 : 90;
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    87
    }
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    88
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    89
    NSString *horizontalSize = [[NSString alloc] initWithFormat:@"%d", width];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    90
    NSString *verticalSize = [[NSString alloc] initWithFormat:@"%d", height];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    91
    NSString *rotation = [[NSString alloc] initWithFormat:@"%d", orientation];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    92
    BOOL enhanced = [[self.systemSettings objectForKey:@"enhanced"] boolValue];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    93
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    94
    NSString *modelId = modelType();
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    95
    NSInteger tmpQuality;
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    96
    if ([modelId hasPrefix:@"iPhone1"] || [modelId hasPrefix:@"iPod1,1"] || [modelId hasPrefix:@"iPod2,1"])     // = iPhone and iPhone 3G or iPod Touch or iPod Touch 2G
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    97
        tmpQuality = 0x00000001 | 0x00000002 | 0x00000008 | 0x00000040;                 // rqLowRes | rqBlurryLand | rqSimpleRope | rqKillFlakes
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    98
    else if ([modelId hasPrefix:@"iPhone2"] || [modelId hasPrefix:@"iPod3"])                                    // = iPhone 3GS or iPod Touch 3G
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    99
        tmpQuality = 0x00000002 | 0x00000040;                                           // rqBlurryLand | rqKillFlakes
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   100
    else if ([modelId hasPrefix:@"iPad1"] || [modelId hasPrefix:@"iPod4"] || enhanced == NO)                    // = iPad 1G or iPod Touch 4G or not enhanced mode
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   101
        tmpQuality = 0x00000002;                                                        // rqBlurryLand
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   102
    else                                                                                                        // = everything else
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   103
        tmpQuality = 0;                                                                 // full quality
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   104
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   105
    // disable tooltips on iPhone
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   106
    if (IS_IPAD() == NO)
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   107
        tmpQuality = tmpQuality | 0x00000400;
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   108
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   109
    // prevents using an empty nickname
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   110
    NSString *username = [self.systemSettings objectForKey:@"username"];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   111
    if ([username length] == 0)
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   112
        username = [NSString stringWithFormat:@"MobileUser-%@",ipcString];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   113
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   114
    gameArgs[ 0] = [ipcString UTF8String];                                                      //ipcPort
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   115
    gameArgs[ 1] = [horizontalSize UTF8String];                                                 //cScreenWidth
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   116
    gameArgs[ 2] = [verticalSize UTF8String];                                                   //cScreenHeight
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   117
    gameArgs[ 3] = [[NSString stringWithFormat:@"%d",tmpQuality] UTF8String];                   //quality
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   118
    gameArgs[ 4] = "en.txt";//[localeString UTF8String];                                        //cLocaleFName
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   119
    gameArgs[ 5] = [username UTF8String];                                                       //UserNick
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   120
    gameArgs[ 6] = [[[self.systemSettings objectForKey:@"sound"] stringValue] UTF8String];      //isSoundEnabled
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   121
    gameArgs[ 7] = [[[self.systemSettings objectForKey:@"music"] stringValue] UTF8String];      //isMusicEnabled
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   122
    gameArgs[ 8] = [[[self.systemSettings objectForKey:@"alternate"] stringValue] UTF8String];  //cAltDamage
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   123
    gameArgs[ 9] = [rotation UTF8String];                                                       //rotateQt
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   124
    gameArgs[10] = (self.gameType == gtSave) ? [self.savePath UTF8String] : NULL;               //recordFileName
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   125
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   126
    [verticalSize release];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   127
    [horizontalSize release];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   128
    [rotation release];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   129
    [localeString release];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   130
    [ipcString release];
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   131
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   132
    // this is the pascal fuction that starts the game, wrapped around isInGame
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   133
    [HedgewarsAppDelegate sharedAppDelegate].isInGame = YES;
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   134
    Game(gameArgs);
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   135
    [HedgewarsAppDelegate sharedAppDelegate].isInGame = NO;
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   136
}
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   137
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   138
// prepares the controllers for hosting a game
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   139
-(void) prepareEngineLaunch {
5157
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   140
    // we add a black view hiding the background
5156
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
   141
    CGRect theFrame = CGRectMake(0, 0, self.parentController.view.frame.size.height, self.parentController.view.frame.size.width);
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
   142
    UIView *blackView = [[UIView alloc] initWithFrame:theFrame];
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
   143
    [self.parentController.view addSubview:blackView];
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
   144
    blackView.opaque = YES;
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
   145
    blackView.backgroundColor = [UIColor blackColor];
5157
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   146
    blackView.alpha = 0;
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   147
    // when dual screen we apply a little transition
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   148
    if (IS_DUALHEAD()) {
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   149
        [UIView beginAnimations:@"fade out" context:NULL];
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   150
        [UIView setAnimationDuration:1];
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   151
        blackView.alpha = 1;
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   152
        [UIView commitAnimations];
5166
d1eb1560b4d5 and now for something completely different, overlay refactoring!
koda
parents: 5158
diff changeset
   153
    } else
d1eb1560b4d5 and now for something completely different, overlay refactoring!
koda
parents: 5158
diff changeset
   154
        blackView.alpha = 1;
5157
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   155
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   156
    // prepare options for overlay and add it to the future sdl uiwindow
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   157
    NSDictionary *overlayOptions = [[NSDictionary alloc] initWithObjectsAndKeys:
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   158
                                    [NSNumber numberWithInt:self.parentController.interfaceOrientation],@"orientation",
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   159
                                    [self.systemSettings objectForKey:@"menu"],@"menu",
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   160
                                    nil];
5174
f5294509783e initial refactoring of ObjcExports and OverlayViewController
koda
parents: 5166
diff changeset
   161
    [self performSelector:@selector(displayOverlayLater:) withObject:overlayOptions afterDelay:0.1];
5157
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   162
    [overlayOptions release];
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   163
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   164
    // SYSTEMS ARE GO!!
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   165
    [self startGameEngine];
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   166
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   167
    // now we can remove the cover with a transition
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   168
    [UIView beginAnimations:@"fade in" context:NULL];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   169
    [UIView setAnimationDuration:1];
5156
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
   170
    blackView.alpha = 0;
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   171
    [UIView commitAnimations];
5156
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
   172
    [blackView performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1];
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
   173
    [blackView release];
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
   174
5157
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   175
    // the overlay is not needed any more and can be removed
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   176
    [self.overlayController removeOverlay];
5158
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   177
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   178
    // warn our host that it's going to be visible again
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   179
    [self.parentController viewWillAppear:YES];
5175
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
   180
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
   181
    // release the network manager and the savepath as they are not needed anymore
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
   182
    [self.engineProtocol release];
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
   183
    [self.savePath release];
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   184
}
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   185
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   186
// set up variables for a local game
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   187
-(void) startLocalGame:(NSDictionary *)withDictionary {
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   188
    self.gameType = gtLocal;
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   189
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   190
    NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   191
    [outputFormatter setDateFormat:@"yyyy-MM-dd '@' HH.mm"];
5175
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
   192
    self.savePath = [[NSString alloc] initWithFormat:@"%@%@.hws",SAVES_DIRECTORY(),[outputFormatter stringFromDate:[NSDate date]]];
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   193
    [outputFormatter release];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   194
5158
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   195
    // in the rare case in which a savefile with the same name exists the older one must be removed (or it gets corrupted)
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   196
    if ([[NSFileManager defaultManager] fileExistsAtPath:self.savePath])
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   197
        [[NSFileManager defaultManager] removeItemAtPath:self.savePath error:nil];
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   198
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   199
    [self.engineProtocol spawnThread:self.savePath withOptions:withDictionary];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   200
    [self prepareEngineLaunch];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   201
}
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   202
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   203
// set up variables for a save game
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   204
-(void) startSaveGame:(NSString *)atPath {
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   205
    self.gameType = gtSave;
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   206
    self.savePath = atPath;
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   207
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   208
    [self.engineProtocol spawnThread:self.savePath];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   209
    [self prepareEngineLaunch];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   210
}
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   211
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   212
-(void) gameHasEndedWithStats:(NSArray *)stats {
5158
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   213
    // display stats page
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   214
    if (stats != nil) {
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   215
        StatsPageViewController *statsPage = [[StatsPageViewController alloc] initWithStyle:UITableViewStyleGrouped];
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   216
        statsPage.statsArray = stats;
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   217
        statsPage.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   218
        if ([statsPage respondsToSelector:@selector(setModalPresentationStyle:)])
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   219
            statsPage.modalPresentationStyle = UIModalPresentationPageSheet;
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   220
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   221
        [self.parentController presentModalViewController:statsPage animated:YES];
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   222
        [statsPage release];
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   223
    }
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   224
5157
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   225
    // can remove the savefile if the replay has ended
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   226
    if (self.gameType == gtSave)
a5a6ffc56141 things are a little sanier
koda
parents: 5156
diff changeset
   227
        [[NSFileManager defaultManager] removeItemAtPath:self.savePath error:nil];
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   228
}
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   229
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   230
@end