project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m
author Wuzzy <almikes@aol.com>
Sat, 30 Sep 2017 23:52:08 +0200
changeset 12627 07fdda8c13a2
parent 11577 28afdaa159cb
child 12877 00215a7ec5f5
permissions -rw-r--r--
TrophyRace: Fix game never eliminating any hogs after a hog skipped or ran out of time Warning: This commit _might_ invalidate past records, but I'm not sure if this is actually the case. Note that only the eliminiation part of the script is touched, not the actual race logic. Even if records are actually broken by this, I and sheepluva have decided that it's more imporant to fix this very, VERY stupid and old bug than to preserve records.
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
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
    33
-(void) earlyEngineLaunch:(NSDictionary *)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
    34
    [self retain];
6869
a187c280dd3d ios: convert audio operation from class to instance, plays better with memory
koda
parents: 6866
diff changeset
    35
    [[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
    36
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
    37
    EngineProtocolNetwork *engineProtocol = [[EngineProtocolNetwork alloc] init];
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
    38
    self.port = engineProtocol.enginePort;
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
    39
    engineProtocol.delegate = self;
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
    40
    [engineProtocol spawnThread:self.savePath withOptions:optionsOrNil];
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
    41
    [engineProtocol release];
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
    42
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
    43
    // 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
    44
    UIWindow *thisWindow = [[HedgewarsAppDelegate sharedAppDelegate] uiwindow];
6667
142fe596e75e ios check for music preference also for fading methods
koda
parents: 6656
diff changeset
    45
    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
    46
    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
    47
    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
    48
    self.blackView.alpha = 0;
6667
142fe596e75e ios check for music preference also for fading methods
koda
parents: 6656
diff changeset
    49
    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
    50
    [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
    51
    [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
    52
    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
    53
    [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
    54
    [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
    55
    [self.blackView release];
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
    56
6866
efdd2e4fc45c ios: don't prompt restoring a game that didn't complete loading
koda
parents: 6832
diff changeset
    57
    // 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
    58
    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
    59
    [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
    60
    [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
    61
    [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
    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
    // 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
    64
    [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
    65
}
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
    66
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
    67
// cleans up everything
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
    68
-(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
    69
    // 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
    70
    [[[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
    71
    [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
    72
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
    73
    // 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
    74
    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
    75
    [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
    76
    [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
    77
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
    // 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
    79
    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
    80
    [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
    81
    [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
    82
    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
    83
    [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
    84
    [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
    85
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
    86
    // 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
    87
    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
    88
        [[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
    89
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
    90
    // 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
    91
    [[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
    92
    [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
    93
    [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
    94
    [self release];
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
    95
}
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    96
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
    97
// main routine for calling the actual game engine
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
    98
-(void) engineLaunch {
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6084
diff changeset
    99
    CGFloat width, height;
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6084
diff changeset
   100
    CGFloat screenScale = [[UIScreen mainScreen] safeScale];
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   101
    NSString *ipcString = [[NSString alloc] initWithFormat:@"%d",self.port];
11203
3465047397da - Fix for locale string passed to engine (like "ru-FR")
antonc27 <antonc27@mail.ru>
parents: 11116
diff changeset
   102
    
11223
c51ecb9bcf05 - Retrieving language ID moved to HWUtils
antonc27 <antonc27@mail.ru>
parents: 11210
diff changeset
   103
    NSString *localeString = [[NSString alloc] initWithFormat:@"%@.txt", [HWUtils languageID]];
11203
3465047397da - Fix for locale string passed to engine (like "ru-FR")
antonc27 <antonc27@mail.ru>
parents: 11116
diff changeset
   104
    
5206
db775bddf771 settings.plist is no more, long live nsuserdefaults
koda
parents: 5195
diff changeset
   105
    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
   106
6624
e049b5bb0ad1 BUUUUURN OBJC AMMOMENU BUUUURNhg diff! (on a separate note, this reduces the codesize by ~37k)
koda
parents: 6615
diff changeset
   107
    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
   108
    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
   109
    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
   110
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6084
diff changeset
   111
    NSString *horizontalSize = [[NSString alloc] initWithFormat:@"%d", (int)(width * screenScale)];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6084
diff changeset
   112
    NSString *verticalSize = [[NSString alloc] initWithFormat:@"%d", (int)(height * screenScale)];
6344
cba81e10235c iOS works again (also native touch interface \o/)
koda
parents: 6328
diff changeset
   113
    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
   114
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
   115
    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
   116
    NSInteger tmpQuality;
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   117
    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
   118
        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
   119
    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
   120
        tmpQuality = 0x00000002 | 0x00000040;                                           // rqBlurryLand | rqKillFlakes
5709
36cf87a4f6ae fix for retina display devices
koda
parents: 5696
diff changeset
   121
    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
   122
        tmpQuality = 0x00000002;                                                        // rqBlurryLand
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   123
    else                                                                                                        // = everything else
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   124
        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
   125
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
   126
    // 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
   127
    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
   128
    // 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
   129
    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
   130
        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
   131
    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
   132
    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
   133
8425
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   134
    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
   135
                                      @"--internal",
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   136
                                      @"--port", ipcString,
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   137
                                      @"--width", horizontalSize,
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   138
                                      @"--height", verticalSize,
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   139
                                      @"--raw-quality", rawQuality,
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   140
                                      @"--locale", localeString,
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   141
                                      @"--prefix", resourcePath,
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   142
                                      @"--user-prefix", documentsDirectory,
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   143
                                      nil];
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   144
    [verticalSize release];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   145
    [horizontalSize release];
6344
cba81e10235c iOS works again (also native touch interface \o/)
koda
parents: 6328
diff changeset
   146
    [resourcePath release];
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   147
    [localeString release];
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   148
    [ipcString release];
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   149
8425
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   150
    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
   151
    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
   152
        [gameParameters addObject:@"--nick"];
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   153
        [gameParameters addObject: username];
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   154
    }
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   155
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   156
    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
   157
        [gameParameters addObject:@"--nosound"];
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   158
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   159
    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
   160
        [gameParameters addObject:@"--nomusic"];
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   161
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   162
    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
   163
        [gameParameters addObject:@"--altdmg"];
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   164
8427
95289aea4bb9 ios, show fps when debugging
koda
parents: 8425
diff changeset
   165
#ifdef DEBUG
95289aea4bb9 ios, show fps when debugging
koda
parents: 8425
diff changeset
   166
    [gameParameters addObject:@"--showfps"];
95289aea4bb9 ios, show fps when debugging
koda
parents: 8425
diff changeset
   167
#endif
95289aea4bb9 ios, show fps when debugging
koda
parents: 8425
diff changeset
   168
8425
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   169
    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
   170
        [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
   171
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
   172
    [HWUtils setGameStatus:gsLoading];
5194
851c6fbb44e6 small fix for starting the ios game
koda
parents: 5177
diff changeset
   173
8425
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   174
    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
   175
    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
   176
    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
   177
        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
   178
    [gameParameters release];
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   179
6265
a6944f94c19f aaand remove also ipcport from the class interface as well
koda
parents: 6263
diff changeset
   180
    // 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
   181
    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
   182
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   183
    // cleanup
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   184
    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
   185
        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
   186
    free(argv);
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   187
4f226963faef restored ios project file, updated Game() interface, tweaked arg parsing, updated log writing, minor warnings
koda
parents: 7943
diff changeset
   188
    // 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
   189
    [self lateEngineLaunch];
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   190
}
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   191
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
   192
-(void) dealloc {
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
   193
    releaseAndNil(blackView);
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
   194
    releaseAndNil(savePath);
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
   195
    [super dealloc];
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
   196
}
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
   197
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
   198
#pragma mark -
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   199
#pragma mark EngineProtocolDelegate methods
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   200
-(void) gameEndedWithStatistics:(NSArray *)stats {
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   201
    if (stats != nil) {
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   202
        StatsPageViewController *statsPage = [[StatsPageViewController alloc] init];
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   203
        statsPage.statsArray = stats;
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   204
        statsPage.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   205
11116
102684240fe8 - Interscreen transitions fixed
Anton Malmygin <antonc27@mail.ru>
parents: 11094
diff changeset
   206
        [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
   207
        [statsPage release];
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   208
    }
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   209
}
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   210
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6869
diff changeset
   211
#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
   212
#pragma mark Class methods for setting up the engine from outsite
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
   213
+(void) registerCallingController:(UIViewController *)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
   214
    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
   215
}
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
   216
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   217
+(void) startGame:(TGameType) type atPath:(NSString *)path withOptions:(NSDictionary *)config {
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   218
    [HWUtils setGameType:type];
6337
84e7d1a5e3df in class methods you can call [self alloc], as per objc specifications
koda
parents: 6321
diff changeset
   219
    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
   220
    [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
   221
    [bridge earlyEngineLaunch:config];
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   222
    [bridge release];
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   223
}
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   224
6266
b02a1e92dba2 convert gameinterfacebridge in simple-to-use class methods
koda
parents: 6265
diff changeset
   225
+(void) startLocalGame:(NSDictionary *)withOptions {
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   226
    NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   227
    [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
   228
    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
   229
    [outputFormatter release];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   230
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
   231
    // 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
   232
    if ([[NSFileManager defaultManager] fileExistsAtPath:savePath])
ec41637ceb64 don't keep track of the savepath and of engineprotocol objects
koda
parents: 6261
diff changeset
   233
        [[NSFileManager defaultManager] removeItemAtPath:savePath error:nil];
5158
4941df038b95 stats implemented once again! refactoring complete \o/
koda
parents: 5157
diff changeset
   234
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   235
    [self startGame:gtLocal atPath:savePath withOptions:withOptions];
6263
ec41637ceb64 don't keep track of the savepath and of engineprotocol objects
koda
parents: 6261
diff changeset
   236
    [savePath release];
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   237
}
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   238
6266
b02a1e92dba2 convert gameinterfacebridge in simple-to-use class methods
koda
parents: 6265
diff changeset
   239
+(void) startSaveGame:(NSString *)atPath {
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   240
    [self startGame:gtSave atPath:atPath withOptions:nil];
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   241
}
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   242
6266
b02a1e92dba2 convert gameinterfacebridge in simple-to-use class methods
koda
parents: 6265
diff changeset
   243
+(void) startMissionGame:(NSString *)withScript {
11576
b709768e720c - Small refactoring for seed command
antonc27 <antonc27@mail.ru>
parents: 11560
diff changeset
   244
    NSString *seedCmd = [self seedCommand];
6084
e692c0348e74 make the missions/trainings start
koda
parents: 6083
diff changeset
   245
    NSString *missionPath = [[NSString alloc] initWithFormat:@"escript Missions/Training/%@.lua",withScript];
11560
b96080df19d0 - Send also some seed when loading missions on iOS (same behavior as on desktop)
antonc27 <antonc27@mail.ru>
parents: 11559
diff changeset
   246
    NSDictionary *missionDict = [[NSDictionary alloc] initWithObjectsAndKeys:missionPath, @"mission_command", seedCmd, @"seed_command", nil];
6084
e692c0348e74 make the missions/trainings start
koda
parents: 6083
diff changeset
   247
    [missionPath release];
11576
b709768e720c - Small refactoring for seed command
antonc27 <antonc27@mail.ru>
parents: 11560
diff changeset
   248
    [seedCmd release];
6263
ec41637ceb64 don't keep track of the savepath and of engineprotocol objects
koda
parents: 6261
diff changeset
   249
11560
b96080df19d0 - Send also some seed when loading missions on iOS (same behavior as on desktop)
antonc27 <antonc27@mail.ru>
parents: 11559
diff changeset
   250
    [self startGame:gtMission atPath:nil withOptions:missionDict];
b96080df19d0 - Send also some seed when loading missions on iOS (same behavior as on desktop)
antonc27 <antonc27@mail.ru>
parents: 11559
diff changeset
   251
    [missionDict release];
6083
72c882c0fd0f first pass for implementing missions/training selection on ipad (not yet running)
koda
parents: 6078
diff changeset
   252
}
72c882c0fd0f first pass for implementing missions/training selection on ipad (not yet running)
koda
parents: 6078
diff changeset
   253
11576
b709768e720c - Small refactoring for seed command
antonc27 <antonc27@mail.ru>
parents: 11560
diff changeset
   254
+(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
   255
    // generate a seed
11559
73e6a3d2f768 - Small refactoring for seed generation on iOS side
antonc27 <antonc27@mail.ru>
parents: 11223
diff changeset
   256
    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
   257
    NSString *seedCmd = [[NSString alloc] initWithFormat:@"eseed {%@}", seed];
7943
koda
parents: 6870
diff changeset
   258
    [seed release];
11576
b709768e720c - Small refactoring for seed command
antonc27 <antonc27@mail.ru>
parents: 11560
diff changeset
   259
    return seedCmd;
b709768e720c - Small refactoring for seed command
antonc27 <antonc27@mail.ru>
parents: 11560
diff changeset
   260
}
b709768e720c - Small refactoring for seed command
antonc27 <antonc27@mail.ru>
parents: 11560
diff changeset
   261
11577
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11576
diff changeset
   262
+(void) startCampaignMissionGameWithScript:(NSString *)missionScriptName forCampaign:(NSString *)campaignName {
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11576
diff changeset
   263
    NSString *seedCmd = [self seedCommand];
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11576
diff changeset
   264
    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: 11576
diff changeset
   265
    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: 11576
diff changeset
   266
    [campaignMissionPath release];
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11576
diff changeset
   267
    [seedCmd release];
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11576
diff changeset
   268
    
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11576
diff changeset
   269
    [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: 11576
diff changeset
   270
    [campaignMissionDict release];
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11576
diff changeset
   271
}
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11576
diff changeset
   272
11576
b709768e720c - Small refactoring for seed command
antonc27 <antonc27@mail.ru>
parents: 11560
diff changeset
   273
+(void) startSimpleGame {
b709768e720c - Small refactoring for seed command
antonc27 <antonc27@mail.ru>
parents: 11560
diff changeset
   274
    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
   275
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
    // 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
   277
    NSArray *listOfMaps = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:MAPS_DIRECTORY() error:NULL];
11210
2e80c9861818 - Better random number generation for front-end: random() replaced with arc4random_uniform()
antonc27 <antonc27@mail.ru>
parents: 11203
diff changeset
   278
    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
   279
    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
   280
    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
   281
    [fileCfg release];
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
    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
   283
    [contents release];
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
    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
   285
    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
   286
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
    // 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
   288
    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
   289
    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
   290
    do {
11210
2e80c9861818 - Better random number generation for front-end: random() replaced with arc4random_uniform()
antonc27 <antonc27@mail.ru>
parents: 11203
diff changeset
   291
        firstColorIndex = arc4random_uniform((int)[colorArray count]);
2e80c9861818 - Better random number generation for front-end: random() replaced with arc4random_uniform()
antonc27 <antonc27@mail.ru>
parents: 11203
diff changeset
   292
        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
   293
    } 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
   294
    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
   295
    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
   296
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
    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
   298
                                                                           [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
   299
                                                                           @"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
   300
    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
   301
                                                                            [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
   302
                                                                            @"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
   303
    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
   304
    [firstTeam release];
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
   305
    [secondTeam release];
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
   306
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
   307
    // 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
   308
    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
   309
                                    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
   310
                                    @"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
   311
                                    @"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
   312
                                    @"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
   313
                                    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
   314
                                    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
   315
                                    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
   316
                                    @"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
   317
                                    @"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
   318
                                    @"",@"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
   319
                                    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
   320
    [listOfTeams release];
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
   321
    [staticMapCommand release];
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
   322
    [themeCommand release];
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
   323
    [seedCmd release];
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
   324
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
   325
    // 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
   326
    [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
   327
    [gameDictionary release];
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
   328
}
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   329
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents:
diff changeset
   330
@end