project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m
author Wuzzy <Wuzzy2@mail.ru>
Mon, 16 Sep 2019 17:33:49 +0200
changeset 15431 8504fee3b601
parent 13199 e17efd663125
permissions -rw-r--r--
Racer: Fix weird water splashes after waypoint placement Does not affect official racer, as only waypoint placement is touched. The reason was that the air attack gear sometimes was not deleted fast enough so it might occassionally drop some air bombs (these are deleted now). Also, the airplane position was set to water level, which caused another water splash.
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
6700
e04da46ee43c the most important commit of the year
koda
parents: 6667
diff changeset
     3
 * Copyright (c) 2009-2012 Vittorio Giovara <vittorio.giovara@gmail.com>
5154
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
10108
c68cf030eded update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents: 8427
diff changeset
    16
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
5154
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
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
#import "GameInterfaceBridge.h"
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    21
#import "EngineProtocolNetwork.h"
5158
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
    22
#import "StatsPageViewController.h"
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    23
6832
fae8fd118da9 dates are no more!
koda
parents: 6822
diff changeset
    24
6353
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    25
static UIViewController *callingController;
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    26
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    27
@implementation GameInterfaceBridge
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
    28
@synthesize blackView, savePath, port;
6301
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    29
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    30
#pragma mark -
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    31
#pragma mark Instance methods for engine interaction
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    32
// prepares the controllers for hosting a game
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
    33
- (void)earlyEngineLaunch:(NSDictionary *)optionsOrNil {
6869
a187c280dd3d ios: convert audio operation from class to instance, plays better with memory
koda
parents: 6866
diff changeset
    34
    [[AudioManagerController mainManager] fadeOutBackgroundMusic];
6353
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    35
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    36
    EngineProtocolNetwork *engineProtocol = [[EngineProtocolNetwork alloc] init];
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
    37
    self.port = engineProtocol.enginePort;
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
    38
    engineProtocol.delegate = self;
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
    39
    [engineProtocol spawnThread:self.savePath withOptions:optionsOrNil];
6301
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    40
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    41
    // add a black view hiding the background
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    42
    UIWindow *thisWindow = [[HedgewarsAppDelegate sharedAppDelegate] uiwindow];
6667
142fe596e75e ios check for music preference also for fading methods
koda
parents: 6656
diff changeset
    43
    self.blackView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
6301
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    44
    self.blackView.opaque = YES;
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    45
    self.blackView.backgroundColor = [UIColor blackColor];
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    46
    self.blackView.alpha = 0;
6667
142fe596e75e ios check for music preference also for fading methods
koda
parents: 6656
diff changeset
    47
    self.blackView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
6301
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    48
    [UIView beginAnimations:@"fade out" context:NULL];
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    49
    [UIView setAnimationDuration:1];
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    50
    self.blackView.alpha = 1;
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    51
    [UIView commitAnimations];
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    52
    [thisWindow addSubview:self.blackView];
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    53
6866
efdd2e4fc45c ios: don't prompt restoring a game that didn't complete loading
koda
parents: 6832
diff changeset
    54
    // keep the point of return for games that completed loading
6301
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    55
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
6353
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    56
    [userDefaults setObject:self.savePath forKey:@"savedGamePath"];
6866
efdd2e4fc45c ios: don't prompt restoring a game that didn't complete loading
koda
parents: 6832
diff changeset
    57
    [userDefaults setObject:[NSNumber numberWithBool:NO] forKey:@"saveIsValid"];
6301
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    58
    [userDefaults synchronize];
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    59
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    60
    // let's launch the engine using this -perfomSelector so that the runloop can deal with queued messages first
6353
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    61
    [self performSelector:@selector(engineLaunch) withObject:nil afterDelay:0.1f];
6301
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    62
}
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    63
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    64
// cleans up everything
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
    65
- (void)lateEngineLaunch {
6353
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    66
    // notify views below that they are getting the spotlight again
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    67
    [[[HedgewarsAppDelegate sharedAppDelegate] uiwindow] makeKeyAndVisible];
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    68
    [callingController viewWillAppear:YES];
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    69
6301
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    70
    // remove completed games notification
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    71
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    72
    [userDefaults setObject:@"" forKey:@"savedGamePath"];
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    73
    [userDefaults synchronize];
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    74
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    75
    // remove the cover view with a transition
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    76
    self.blackView.alpha = 1;
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    77
    [UIView beginAnimations:@"fade in" context:NULL];
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    78
    [UIView setAnimationDuration:1];
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    79
    self.blackView.alpha = 0;
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    80
    [UIView commitAnimations];
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    81
    [self.blackView performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1];
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    82
6353
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    83
    // can remove the savefile if the replay has ended
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    84
    if ([HWUtils gameType] == gtSave)
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    85
        [[NSFileManager defaultManager] removeItemAtPath:self.savePath error:nil];
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    86
6301
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    87
    // restart music and we're done
6869
a187c280dd3d ios: convert audio operation from class to instance, plays better with memory
koda
parents: 6866
diff changeset
    88
    [[AudioManagerController mainManager] fadeInBackgroundMusic];
6353
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    89
    [HWUtils setGameStatus:gsNone];
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    90
    [HWUtils setGameType:gtNone];
6301
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
    91
}
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    92
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    93
// main routine for calling the actual game engine
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
    94
- (void)engineLaunch {
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6084
diff changeset
    95
    CGFloat width, height;
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6084
diff changeset
    96
    CGFloat screenScale = [[UIScreen mainScreen] safeScale];
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
    97
    NSString *ipcString = [[NSString alloc] initWithFormat:@"%d",self.port];
11199
3465047397da - Fix for locale string passed to engine (like "ru-FR")
antonc27 <antonc27@mail.ru>
parents: 11116
diff changeset
    98
    
11219
c51ecb9bcf05 - Retrieving language ID moved to HWUtils
antonc27 <antonc27@mail.ru>
parents: 11206
diff changeset
    99
    NSString *localeString = [[NSString alloc] initWithFormat:@"%@.txt", [HWUtils languageID]];
11199
3465047397da - Fix for locale string passed to engine (like "ru-FR")
antonc27 <antonc27@mail.ru>
parents: 11116
diff changeset
   100
    
5206
db775bddf771 settings.plist is no more, long live nsuserdefaults
koda
parents: 5195
diff changeset
   101
    NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   102
6624
e049b5bb0ad1 BUUUUURN OBJC AMMOMENU BUUUURNhg diff! (on a separate note, this reduces the codesize by ~37k)
koda
parents: 6615
diff changeset
   103
    CGRect screenBounds = [[UIScreen mainScreen] safeBounds];
e049b5bb0ad1 BUUUUURN OBJC AMMOMENU BUUUURNhg diff! (on a separate note, this reduces the codesize by ~37k)
koda
parents: 6615
diff changeset
   104
    width = screenBounds.size.width;
e049b5bb0ad1 BUUUUURN OBJC AMMOMENU BUUUURNhg diff! (on a separate note, this reduces the codesize by ~37k)
koda
parents: 6615
diff changeset
   105
    height = screenBounds.size.height;
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   106
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6084
diff changeset
   107
    NSString *horizontalSize = [[NSString alloc] initWithFormat:@"%d", (int)(width * screenScale)];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6084
diff changeset
   108
    NSString *verticalSize = [[NSString alloc] initWithFormat:@"%d", (int)(height * screenScale)];
6344
cba81e10235c iOS works again (also native touch interface \o/)
koda
parents: 6328
diff changeset
   109
    NSString *resourcePath = [[NSString alloc] initWithFormat:@"%@/Data", [[NSBundle mainBundle] resourcePath]];
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   110
6078
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 6020
diff changeset
   111
    NSString *modelId = [HWUtils modelType];
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   112
    NSInteger tmpQuality;
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   113
    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
   114
        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
   115
    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
   116
        tmpQuality = 0x00000002 | 0x00000040;                                           // rqBlurryLand | rqKillFlakes
5709
36cf87a4f6ae fix for retina display devices
koda
parents: 5696
diff changeset
   117
    else if ([modelId hasPrefix:@"iPad1"] || [modelId hasPrefix:@"iPod4"])                                      // = iPad 1G or iPod Touch 4G
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   118
        tmpQuality = 0x00000002;                                                        // rqBlurryLand
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   119
    else                                                                                                        // = everything else
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   120
        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
   121
6276
1e2f8da1860a while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents: 6266
diff changeset
   122
    // disable ammomenu animation
1e2f8da1860a while formatting the ammomenu code i found out that it's simpler to move than i thought, and fixed a small glitch when animation was disabled
koda
parents: 6266
diff changeset
   123
    tmpQuality = tmpQuality | 0x00000080;
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   124
    // 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
   125
    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
   126
        tmpQuality = tmpQuality | 0x00000400;
8425
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   127
    NSString *rawQuality = [NSString stringWithFormat:@"%d",tmpQuality];
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   128
    NSString *documentsDirectory = DOCUMENTS_FOLDER();
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   129
8425
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   130
    NSMutableArray *gameParameters = [[NSMutableArray alloc] initWithObjects:
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   131
                                      @"--internal",
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   132
                                      @"--port", ipcString,
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   133
                                      @"--width", horizontalSize,
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   134
                                      @"--height", verticalSize,
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   135
                                      @"--raw-quality", rawQuality,
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   136
                                      @"--locale", localeString,
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   137
                                      @"--prefix", resourcePath,
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   138
                                      @"--user-prefix", documentsDirectory,
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   139
                                      nil];
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   140
8425
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   141
    NSString *username = [settings objectForKey:@"username"];
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   142
    if ([username length] > 0) {
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   143
        [gameParameters addObject:@"--nick"];
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   144
        [gameParameters addObject: username];
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   145
    }
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   146
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   147
    if ([[settings objectForKey:@"sound"] boolValue] == NO)
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   148
        [gameParameters addObject:@"--nosound"];
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   149
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   150
    if ([[settings objectForKey:@"music"] boolValue] == NO)
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   151
        [gameParameters addObject:@"--nomusic"];
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   152
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   153
    if([[settings objectForKey:@"alternate"] boolValue] == YES)
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   154
        [gameParameters addObject:@"--altdmg"];
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   155
8427
95289aea4bb9 ios, show fps when debugging
koda
parents: 8425
diff changeset
   156
#ifdef DEBUG
95289aea4bb9 ios, show fps when debugging
koda
parents: 8425
diff changeset
   157
    [gameParameters addObject:@"--showfps"];
95289aea4bb9 ios, show fps when debugging
koda
parents: 8425
diff changeset
   158
#endif
95289aea4bb9 ios, show fps when debugging
koda
parents: 8425
diff changeset
   159
8425
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   160
    if ([HWUtils gameType] == gtSave)
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   161
        [gameParameters addObject:self.savePath];
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   162
6247
6dfad55fd71c unified the objc game state in a single place, which allowed some optimization to ObjcExport class (and more)
koda
parents: 6246
diff changeset
   163
    [HWUtils setGameStatus:gsLoading];
5194
851c6fbb44e6 small fix for starting the ios game
koda
parents: 5177
diff changeset
   164
8425
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   165
    int argc = [gameParameters count];
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   166
    const char **argv = (const char **)malloc(sizeof(const char*)*argc);
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   167
    for (int i = 0; i < argc; i++)
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   168
        argv[i] = strdup([[gameParameters objectAtIndex:i] UTF8String]);
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   169
6265
a6944f94c19f aaand remove also ipcport from the class interface as well
koda
parents: 6263
diff changeset
   170
    // this is the pascal function that starts the game
11094
595b5700ebac - Fix for PascalImports and for GenLandPreview
antonc27 <antonc27@mail.ru>
parents: 10108
diff changeset
   171
    RunEngine(argc, argv);
8425
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   172
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   173
    // cleanup
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   174
    for (int i = 0; i < argc; i++)
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   175
        free((void *)argv[i]);
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   176
    free(argv);
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   177
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   178
    // moar cleanup
6301
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
   179
    [self lateEngineLaunch];
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   180
}
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   181
6353
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
   182
6301
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
   183
#pragma mark -
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   184
#pragma mark EngineProtocolDelegate methods
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   185
- (void)gameEndedWithStatistics:(NSArray *)stats {
12873
f012ce693681 - Present stats page always on main thread
antonc27 <antonc27@mail.ru>
parents: 12872
diff changeset
   186
    [self performSelectorOnMainThread:@selector(presentStats:) withObject:stats waitUntilDone:NO];
f012ce693681 - Present stats page always on main thread
antonc27 <antonc27@mail.ru>
parents: 12872
diff changeset
   187
}
f012ce693681 - Present stats page always on main thread
antonc27 <antonc27@mail.ru>
parents: 12872
diff changeset
   188
f012ce693681 - Present stats page always on main thread
antonc27 <antonc27@mail.ru>
parents: 12872
diff changeset
   189
- (void)presentStats:(NSArray *)stats {
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   190
    if (stats != nil) {
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   191
        StatsPageViewController *statsPage = [[StatsPageViewController alloc] init];
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   192
        statsPage.statsArray = stats;
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   193
        statsPage.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   194
11116
102684240fe8 - Interscreen transitions fixed
Anton Malmygin <antonc27@mail.ru>
parents: 11094
diff changeset
   195
        [callingController presentViewController:statsPage animated:YES completion:nil];
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   196
    }
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   197
}
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   198
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   199
#pragma mark -
6301
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
   200
#pragma mark Class methods for setting up the engine from outsite
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   201
+ (void)registerCallingController:(UIViewController *)controller {
6353
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
   202
    callingController = controller;
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
   203
}
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
   204
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   205
+ (void)startGame:(TGameType)type atPath:(NSString *)path withOptions:(NSDictionary *)config {
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   206
    [HWUtils setGameType:type];
6337
84e7d1a5e3df in class methods you can call [self alloc], as per objc specifications
koda
parents: 6321
diff changeset
   207
    id bridge = [[self alloc] init];
6353
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
   208
    [bridge setSavePath:path];
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
   209
    [bridge earlyEngineLaunch:config];
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   210
}
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   211
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   212
+ (void)startLocalGame:(NSDictionary *)withOptions {
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   213
    NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   214
    [outputFormatter setDateFormat:@"yyyy-MM-dd '@' HH.mm"];
6263
ec41637ceb64 don't keep track of the savepath and of engineprotocol objects
koda
parents: 6261
diff changeset
   215
    NSString *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
   216
6301
1259736c0134 engine interaction class refactoring, round 4 or 5, can't remember: this time use the class methods to create an instance object and operates on that, reducing the number of arguments between methods and simplifying memory management
koda
parents: 6276
diff changeset
   217
    // in the rare case in which a savefile with the same name exists the older one must be removed (otherwise it gets corrupted)
6263
ec41637ceb64 don't keep track of the savepath and of engineprotocol objects
koda
parents: 6261
diff changeset
   218
    if ([[NSFileManager defaultManager] fileExistsAtPath:savePath])
ec41637ceb64 don't keep track of the savepath and of engineprotocol objects
koda
parents: 6261
diff changeset
   219
        [[NSFileManager defaultManager] removeItemAtPath:savePath error:nil];
5158
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   220
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   221
    [self startGame:gtLocal atPath:savePath withOptions:withOptions];
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   222
}
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   223
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   224
+ (void)startSaveGame:(NSString *)atPath {
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   225
    [self startGame:gtSave atPath:atPath withOptions:nil];
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   226
}
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   227
13199
e17efd663125 - Fix missions path, still needs refactoring...
antonc27 <antonc27@mail.ru>
parents: 12873
diff changeset
   228
+ (void)startMissionGame:(NSString *)withSubPath {
11571
b709768e720c - Small refactoring for seed command
antonc27 <antonc27@mail.ru>
parents: 11555
diff changeset
   229
    NSString *seedCmd = [self seedCommand];
13199
e17efd663125 - Fix missions path, still needs refactoring...
antonc27 <antonc27@mail.ru>
parents: 12873
diff changeset
   230
    NSString *missionPath = [[NSString alloc] initWithFormat:@"escript Missions/%@.lua", withSubPath];
11555
b96080df19d0 - Send also some seed when loading missions on iOS (same behavior as on desktop)
antonc27 <antonc27@mail.ru>
parents: 11554
diff changeset
   231
    NSDictionary *missionDict = [[NSDictionary alloc] initWithObjectsAndKeys:missionPath, @"mission_command", seedCmd, @"seed_command", nil];
6263
ec41637ceb64 don't keep track of the savepath and of engineprotocol objects
koda
parents: 6261
diff changeset
   232
11555
b96080df19d0 - Send also some seed when loading missions on iOS (same behavior as on desktop)
antonc27 <antonc27@mail.ru>
parents: 11554
diff changeset
   233
    [self startGame:gtMission atPath:nil withOptions:missionDict];
6083
72c882c0fd0f first pass for implementing missions/training selection on ipad (not yet running)
koda
parents: 6078
diff changeset
   234
}
72c882c0fd0f first pass for implementing missions/training selection on ipad (not yet running)
koda
parents: 6078
diff changeset
   235
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   236
+ (NSString *)seedCommand {
6719
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   237
    // generate a seed
11554
73e6a3d2f768 - Small refactoring for seed generation on iOS side
antonc27 <antonc27@mail.ru>
parents: 11219
diff changeset
   238
    NSString *seed = [HWUtils seed];
6719
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   239
    NSString *seedCmd = [[NSString alloc] initWithFormat:@"eseed {%@}", seed];
11571
b709768e720c - Small refactoring for seed command
antonc27 <antonc27@mail.ru>
parents: 11555
diff changeset
   240
    return seedCmd;
b709768e720c - Small refactoring for seed command
antonc27 <antonc27@mail.ru>
parents: 11555
diff changeset
   241
}
b709768e720c - Small refactoring for seed command
antonc27 <antonc27@mail.ru>
parents: 11555
diff changeset
   242
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   243
+ (void)startCampaignMissionGameWithScript:(NSString *)missionScriptName forCampaign:(NSString *)campaignName {
11572
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11571
diff changeset
   244
    NSString *seedCmd = [self seedCommand];
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11571
diff changeset
   245
    NSString *campaignMissionPath = [[NSString alloc] initWithFormat:@"escript Missions/Campaign/%@/%@", campaignName, missionScriptName];
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11571
diff changeset
   246
    NSDictionary *campaignMissionDict = [[NSDictionary alloc] initWithObjectsAndKeys:campaignMissionPath, @"mission_command", seedCmd, @"seed_command", nil];
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11571
diff changeset
   247
    
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11571
diff changeset
   248
    [self startGame:gtCampaign atPath:nil withOptions:campaignMissionDict];
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11571
diff changeset
   249
}
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11571
diff changeset
   250
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   251
+ (void)startSimpleGame {
11571
b709768e720c - Small refactoring for seed command
antonc27 <antonc27@mail.ru>
parents: 11555
diff changeset
   252
    NSString *seedCmd = [self seedCommand];
6719
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   253
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   254
    // pick a random static map
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   255
    NSArray *listOfMaps = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:MAPS_DIRECTORY() error:NULL];
11206
2e80c9861818 - Better random number generation for front-end: random() replaced with arc4random_uniform()
antonc27 <antonc27@mail.ru>
parents: 11199
diff changeset
   256
    NSString *mapName = [listOfMaps objectAtIndex:arc4random_uniform((int)[listOfMaps count])];
6719
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   257
    NSString *fileCfg = [[NSString alloc] initWithFormat:@"%@/%@/map.cfg",MAPS_DIRECTORY(),mapName];
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   258
    NSString *contents = [[NSString alloc] initWithContentsOfFile:fileCfg encoding:NSUTF8StringEncoding error:NULL];
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   259
    NSArray *split = [contents componentsSeparatedByString:@"\n"];
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   260
    NSString *themeCommand = [[NSString alloc] initWithFormat:@"etheme %@", [split objectAtIndex:0]];
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   261
    NSString *staticMapCommand = [[NSString alloc] initWithFormat:@"emap %@", mapName];
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   262
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   263
    // select teams with two different colors
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   264
    NSArray *colorArray = [HWUtils teamColors];
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   265
    NSInteger firstColorIndex, secondColorIndex;
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   266
    do {
11206
2e80c9861818 - Better random number generation for front-end: random() replaced with arc4random_uniform()
antonc27 <antonc27@mail.ru>
parents: 11199
diff changeset
   267
        firstColorIndex = arc4random_uniform((int)[colorArray count]);
2e80c9861818 - Better random number generation for front-end: random() replaced with arc4random_uniform()
antonc27 <antonc27@mail.ru>
parents: 11199
diff changeset
   268
        secondColorIndex = arc4random_uniform((int)[colorArray count]);
6719
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   269
    } while (firstColorIndex == secondColorIndex);
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   270
    unsigned int firstColor = [[colorArray objectAtIndex:firstColorIndex] intValue];
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   271
    unsigned int secondColor = [[colorArray objectAtIndex:secondColorIndex] intValue];
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   272
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   273
    NSDictionary *firstTeam = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithInt:4],@"number",
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   274
                                                                           [NSNumber numberWithUnsignedInt:firstColor],@"color",
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   275
                                                                           @"Ninjas.plist",@"team",nil];
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   276
    NSDictionary *secondTeam = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithInt:4],@"number",
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   277
                                                                            [NSNumber numberWithUnsignedInt:secondColor],@"color",
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   278
                                                                            @"Robots.plist",@"team",nil];
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   279
    NSArray *listOfTeams = [[NSArray alloc] initWithObjects:firstTeam,secondTeam,nil];
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   280
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   281
    // create the configuration
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   282
    NSDictionary *gameDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   283
                                    seedCmd,@"seed_command",
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   284
                                    @"e$template_filter 0",@"templatefilter_command",
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   285
                                    @"e$mapgen 0",@"mapgen_command",
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   286
                                    @"e$maze_size 0",@"mazesize_command",
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   287
                                    themeCommand,@"theme_command",
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   288
                                    staticMapCommand,@"staticmap_command",
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   289
                                    listOfTeams,@"teams_list",
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   290
                                    @"Default.plist",@"scheme",
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   291
                                    @"Default.plist",@"weapon",
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   292
                                    @"",@"mission_command",
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   293
                                    nil];
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   294
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   295
    // launch game
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   296
    [GameInterfaceBridge startLocalGame:gameDictionary];
d2afc6b2d88e added one button play feature, like in desktop frontend; need to make sure that the hardcoded stuff never gets deleted
koda
parents: 6709
diff changeset
   297
}
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   298
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   299
@end