project_files/HedgewarsMobile/Classes/GameSetup.m
author koda
Fri, 13 Aug 2010 02:13:18 +0200 (2010-08-13)
changeset 3737 2ba6ac8a114b
parent 3697 d5b30d6373fc
child 3752 73c2d7d5643b
permissions -rw-r--r--
reworked the initialization functions, now it should be safe to update and no more need of spinning wheel at first launch adjusted default zoom value polished lobby interface updated ammosets to new weapons
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
     1
//
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
     2
//  gameSetup.m
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
     3
//  hwengine
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
     4
//
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
     5
//  Created by Vittorio on 10/01/10.
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
     6
//  Copyright 2010 __MyCompanyName__. All rights reserved.
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
     7
//
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
     8
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
     9
#import "GameSetup.h"
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    10
#import "SDL_uikitappdelegate.h"
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    11
#import "SDL_net.h"
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    12
#import "PascalImports.h"
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    13
#import "CommodityFunctions.h"
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    14
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    15
#define BUFFER_SIZE 256
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    16
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    17
@implementation GameSetup
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    18
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    19
@synthesize systemSettings, gameConfig;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    20
3616
85d69ddb41b6 tackling the iphoneos todo (another trial for the beginning sporadic bug, remove curl animation, don't need to go to detail page)
koda
parents: 3613
diff changeset
    21
-(id) initWithDictionary:(NSDictionary *)gameDictionary {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    22
    if (self = [super init]) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    23
        ipcPort = randomPort();
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    24
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    25
        // should check they exist and throw and exection if not
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    26
        NSDictionary *dictSett = [[NSDictionary alloc] initWithContentsOfFile:SETTINGS_FILE()];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    27
        self.systemSettings = dictSett;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    28
        [dictSett release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    29
3616
85d69ddb41b6 tackling the iphoneos todo (another trial for the beginning sporadic bug, remove curl animation, don't need to go to detail page)
koda
parents: 3613
diff changeset
    30
        self.gameConfig = gameDictionary;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    31
    }
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    32
    return self;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    33
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    34
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    35
-(void) dealloc {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    36
    [gameConfig release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    37
    [systemSettings release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    38
    [super dealloc];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    39
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    40
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    41
#pragma mark -
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    42
#pragma mark Provider functions
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    43
// unpacks team data from the selected team.plist to a sequence of engine commands
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    44
-(void) provideTeamData:(NSString *)teamName forHogs:(NSInteger) numberOfPlayingHogs withHealth:(NSInteger) initialHealth ofColor:(NSNumber *)teamColor {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    45
    /*
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    46
     addteam <32charsMD5hash> <color> <team name>
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    47
     addhh <level> <health> <hedgehog name>
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    48
     <level> is 0 for human, 1-5 for bots (5 is the most stupid)
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    49
    */
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    50
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    51
    NSString *teamFile = [[NSString alloc] initWithFormat:@"%@/%@", TEAMS_DIRECTORY(), teamName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    52
    NSDictionary *teamData = [[NSDictionary alloc] initWithContentsOfFile:teamFile];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    53
    [teamFile release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    54
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    55
    NSString *teamHashColorAndName = [[NSString alloc] initWithFormat:@"eaddteam %@ %@ %@",
3660
bc125bea5849 complete settings page rework
koda
parents: 3642
diff changeset
    56
                                      [teamData objectForKey:@"hash"], [teamColor stringValue], [teamName stringByDeletingPathExtension]];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    57
    [self sendToEngine: teamHashColorAndName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    58
    [teamHashColorAndName release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    59
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    60
    NSString *grave = [[NSString alloc] initWithFormat:@"egrave %@", [teamData objectForKey:@"grave"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    61
    [self sendToEngine: grave];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    62
    [grave release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    63
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    64
    NSString *fort = [[NSString alloc] initWithFormat:@"efort %@", [teamData objectForKey:@"fort"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    65
    [self sendToEngine: fort];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    66
    [fort release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    67
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    68
    NSString *voicepack = [[NSString alloc] initWithFormat:@"evoicepack %@", [teamData objectForKey:@"voicepack"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    69
    [self sendToEngine: voicepack];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    70
    [voicepack release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    71
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    72
    NSString *flag = [[NSString alloc] initWithFormat:@"eflag %@", [teamData objectForKey:@"flag"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    73
    [self sendToEngine: flag];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    74
    [flag release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    75
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    76
    NSArray *hogs = [teamData objectForKey:@"hedgehogs"];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    77
    for (int i = 0; i < numberOfPlayingHogs; i++) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    78
        NSDictionary *hog = [hogs objectAtIndex:i];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    79
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    80
        NSString *hogLevelHealthAndName = [[NSString alloc] initWithFormat:@"eaddhh %@ %d %@",
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    81
                                           [hog objectForKey:@"level"], initialHealth, [hog objectForKey:@"hogname"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    82
        [self sendToEngine: hogLevelHealthAndName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    83
        [hogLevelHealthAndName release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    84
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    85
        NSString *hogHat = [[NSString alloc] initWithFormat:@"ehat %@", [hog objectForKey:@"hat"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    86
        [self sendToEngine: hogHat];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    87
        [hogHat release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    88
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    89
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    90
    [teamData release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    91
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    92
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    93
// unpacks ammostore data from the selected ammo.plist to a sequence of engine commands
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    94
-(void) provideAmmoData:(NSString *)ammostoreName forPlayingTeams:(NSInteger) numberOfTeams {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    95
    NSString *weaponPath = [[NSString alloc] initWithFormat:@"%@/%@",WEAPONS_DIRECTORY(),ammostoreName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    96
    NSDictionary *ammoData = [[NSDictionary alloc] initWithContentsOfFile:weaponPath];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    97
    [weaponPath release];
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
    98
    NSString *update = @"";
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    99
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   100
    // if we're loading an older version of ammos fill the engine message with 0s
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   101
    int diff = CURRENT_AMMOSIZE - [[ammoData objectForKey:@"version"] intValue];
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   102
    if (diff != 0)
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   103
        update = [NSString stringWithCharacters:(const unichar*)"0000000000000000000000000000000000" length:diff];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   104
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   105
    NSString *ammloadt = [[NSString alloc] initWithFormat:@"eammloadt %@%@", [ammoData objectForKey:@"ammostore_initialqt"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   106
    [self sendToEngine: ammloadt];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   107
    [ammloadt release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   108
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   109
    NSString *ammprob = [[NSString alloc] initWithFormat:@"eammprob %@%@", [ammoData objectForKey:@"ammostore_probability"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   110
    [self sendToEngine: ammprob];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   111
    [ammprob release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   112
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   113
    NSString *ammdelay = [[NSString alloc] initWithFormat:@"eammdelay %@%@", [ammoData objectForKey:@"ammostore_delay"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   114
    [self sendToEngine: ammdelay];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   115
    [ammdelay release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   116
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   117
    NSString *ammreinf = [[NSString alloc] initWithFormat:@"eammreinf %@%@", [ammoData objectForKey:@"ammostore_crate"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   118
    [self sendToEngine: ammreinf];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   119
    [ammreinf release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   120
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   121
    // sent twice so it applies to both teams
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   122
    NSString *ammstore = [[NSString alloc] initWithString:@"eammstore"];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   123
    for (int i = 0; i < numberOfTeams; i++)
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   124
        [self sendToEngine: ammstore];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   125
    [ammstore release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   126
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   127
    [ammoData release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   128
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   129
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   130
// unpacks scheme data from the selected scheme.plist to a sequence of engine commands
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   131
-(NSInteger) provideScheme:(NSString *)schemeName {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   132
    NSString *schemePath = [[NSString alloc] initWithFormat:@"%@/%@",SCHEMES_DIRECTORY(),schemeName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   133
    NSArray *scheme = [[NSArray alloc] initWithContentsOfFile:schemePath];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   134
    [schemePath release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   135
    int result = 0;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   136
    int i = 0;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   137
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   138
    if ([[scheme objectAtIndex:i++] boolValue])
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   139
        result |= 0x01;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   140
    if ([[scheme objectAtIndex:i++] boolValue])
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   141
        result |= 0x10;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   142
    if ([[scheme objectAtIndex:i++] boolValue])
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   143
        result |= 0x04;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   144
    if ([[scheme objectAtIndex:i++] boolValue])
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   145
        result |= 0x08;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   146
    if ([[scheme objectAtIndex:i++] boolValue])
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   147
        result |= 0x20;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   148
    if ([[scheme objectAtIndex:i++] boolValue])
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   149
        result |= 0x40;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   150
    if ([[scheme objectAtIndex:i++] boolValue])
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   151
        result |= 0x80;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   152
    if ([[scheme objectAtIndex:i++] boolValue])
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   153
        result |= 0x100;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   154
    if ([[scheme objectAtIndex:i++] boolValue])
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   155
        result |= 0x200;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   156
    if ([[scheme objectAtIndex:i++] boolValue])
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   157
        result |= 0x400;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   158
    if ([[scheme objectAtIndex:i++] boolValue])
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   159
        result |= 0x800;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   160
    if ([[scheme objectAtIndex:i++] boolValue])
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   161
        result |= 0x2000;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   162
    if ([[scheme objectAtIndex:i++] boolValue])
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   163
        result |= 0x4000;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   164
    if ([[scheme objectAtIndex:i++] boolValue])
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   165
        result |= 0x8000;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   166
    if ([[scheme objectAtIndex:i++] boolValue])
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   167
        result |= 0x10000;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   168
    if ([[scheme objectAtIndex:i++] boolValue])
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   169
        result |= 0x20000;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   170
    if ([[scheme objectAtIndex:i++] boolValue])
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   171
        result |= 0x80000;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   172
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   173
    NSString *flags = [[NSString alloc] initWithFormat:@"e$gmflags %d",result];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   174
    [self sendToEngine:flags];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   175
    [flags release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   176
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   177
    NSString *dmgMod = [[NSString alloc] initWithFormat:@"e$damagepct %d",[[scheme objectAtIndex:i++] intValue]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   178
    [self sendToEngine:dmgMod];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   179
    [dmgMod release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   180
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   181
    NSString *turnTime = [[NSString alloc] initWithFormat:@"e$turntime %d",[[scheme objectAtIndex:i++] intValue] * 1000];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   182
    [self sendToEngine:turnTime];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   183
    [turnTime release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   184
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   185
    result = [[scheme objectAtIndex:i++] intValue]; // initial health
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   186
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   187
    NSString *sdTime = [[NSString alloc] initWithFormat:@"e$sd_turns %d",[[scheme objectAtIndex:i++] intValue]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   188
    [self sendToEngine:sdTime];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   189
    [sdTime release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   190
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   191
    NSString *crateDrops = [[NSString alloc] initWithFormat:@"e$casefreq %d",[[scheme objectAtIndex:i++] intValue]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   192
    [self sendToEngine:crateDrops];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   193
    [crateDrops release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   194
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   195
    NSString *minesTime = [[NSString alloc] initWithFormat:@"e$minestime %d",[[scheme objectAtIndex:i++] intValue] * 1000];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   196
    [self sendToEngine:minesTime];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   197
    [minesTime release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   198
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   199
    NSString *minesNumber = [[NSString alloc] initWithFormat:@"e$landadds %d",[[scheme objectAtIndex:i++] intValue]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   200
    [self sendToEngine:minesNumber];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   201
    [minesNumber release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   202
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   203
    NSString *dudMines = [[NSString alloc] initWithFormat:@"e$minedudpct %d",[[scheme objectAtIndex:i++] intValue]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   204
    [self sendToEngine:dudMines];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   205
    [dudMines release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   206
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   207
    NSString *explosives = [[NSString alloc] initWithFormat:@"e$explosives %d",[[scheme objectAtIndex:i++] intValue]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   208
    [self sendToEngine:explosives];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   209
    [explosives release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   210
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   211
    [scheme release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   212
    return result;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   213
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   214
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   215
#pragma mark -
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   216
#pragma mark Thread/Network relevant code
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   217
// select one of GameSetup method and execute it in a seprate thread
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   218
-(void) startThread: (NSString *) selector {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   219
    SEL usage = NSSelectorFromString(selector);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   220
    [NSThread detachNewThreadSelector:usage toTarget:self withObject:nil];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   221
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   222
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   223
// wrapper that computes the length of the message and then sends the command string
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   224
-(int) sendToEngine: (NSString *)string {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   225
    uint8_t length = [string length];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   226
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   227
    SDLNet_TCP_Send(csd, &length , 1);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   228
    return SDLNet_TCP_Send(csd, [string UTF8String], length);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   229
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   230
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   231
// method that handles net setup with engine and keeps connection alive
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   232
-(void) engineProtocol {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   233
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   234
    TCPsocket sd;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   235
    IPaddress ip;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   236
    int eProto;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   237
    BOOL clientQuit;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   238
    char buffer[BUFFER_SIZE];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   239
    uint8_t msgSize;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   240
    uint16_t gameTicks;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   241
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   242
    clientQuit = NO;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   243
    csd = NULL;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   244
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   245
    if (SDLNet_Init() < 0) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   246
        DLog(@"SDLNet_Init: %s", SDLNet_GetError());
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   247
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   248
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   249
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   250
    // Resolving the host using NULL make network interface to listen
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   251
    if (SDLNet_ResolveHost(&ip, NULL, ipcPort) < 0 && !clientQuit) {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   252
        DLog(@"SDLNet_ResolveHost: %s\n", SDLNet_GetError());
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   253
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   254
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   255
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   256
    // Open a connection with the IP provided (listen on the host's port)
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   257
    if (!(sd = SDLNet_TCP_Open(&ip)) && !clientQuit) {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   258
        DLog(@"SDLNet_TCP_Open: %s %\n", SDLNet_GetError(), ipcPort);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   259
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   260
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   261
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   262
    DLog(@"Waiting for a client on port %d", ipcPort);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   263
    while (csd == NULL)
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   264
        csd = SDLNet_TCP_Accept(sd);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   265
    SDLNet_TCP_Close(sd);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   266
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   267
    while (!clientQuit) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   268
        msgSize = 0;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   269
        memset(buffer, 0, BUFFER_SIZE);
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   270
        if (SDLNet_TCP_Recv(csd, &msgSize, sizeof(uint8_t)) <= 0)
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   271
            clientQuit = YES;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   272
        if (SDLNet_TCP_Recv(csd, buffer, msgSize) <=0)
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   273
            clientQuit = YES;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   274
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   275
        switch (buffer[0]) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   276
            case 'C':
3626
19f78afa0188 fix the multitouch shooting and moving
koda
parents: 3624
diff changeset
   277
                DLog(@"sending game config...\n%@",self.gameConfig);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   278
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   279
                // local game
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   280
                [self sendToEngine:@"TL"];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   281
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   282
                // seed info
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   283
                [self sendToEngine:[self.gameConfig objectForKey:@"seed_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   284
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   285
                // dimension of the map
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   286
                [self sendToEngine:[self.gameConfig objectForKey:@"templatefilter_command"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   287
                [self sendToEngine:[self.gameConfig objectForKey:@"mapgen_command"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   288
                [self sendToEngine:[self.gameConfig objectForKey:@"mazesize_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   289
3642
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   290
                // static land (if set)
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   291
                NSString *staticMap = [self.gameConfig objectForKey:@"staticmap_command"];
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   292
                if ([staticMap length] != 0)
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   293
                    [self sendToEngine:staticMap];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   294
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   295
                // theme info
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   296
                [self sendToEngine:[self.gameConfig objectForKey:@"theme_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   297
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   298
                // scheme (returns initial health)
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   299
                NSInteger health = [self provideScheme:[self.gameConfig objectForKey:@"scheme"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   300
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   301
                NSArray *teamsConfig = [self.gameConfig objectForKey:@"teams_list"];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   302
                for (NSDictionary *teamData in teamsConfig) {
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   303
                    [self provideTeamData:[teamData objectForKey:@"team"]
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   304
                                  forHogs:[[teamData objectForKey:@"number"] intValue]
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   305
                               withHealth:health
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   306
                                  ofColor:[teamData objectForKey:@"color"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   307
                }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   308
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   309
                [self provideAmmoData:[self.gameConfig objectForKey:@"weapon"] forPlayingTeams:[teamsConfig count]];
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   310
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   311
            case '?':
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   312
                DLog(@"Ping? Pong!");
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   313
                [self sendToEngine:@"!"];
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   314
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   315
            case 'E':
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   316
                DLog(@"ERROR - last console line: [%s]", &buffer[1]);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   317
                clientQuit = YES;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   318
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   319
            case 'e':
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   320
                sscanf(buffer, "%*s %d", &eProto);
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   321
                short int netProto = 0;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   322
                char *versionStr;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   323
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   324
                HW_versionInfo(&netProto, &versionStr);
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   325
                if (netProto == eProto) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   326
                    DLog(@"Setting protocol version %d (%s)", eProto, versionStr);
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   327
                } else {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   328
                    DLog(@"ERROR - wrong protocol number: [%s] - expecting %d", &buffer[1], eProto);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   329
                    clientQuit = YES;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   330
                }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   331
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   332
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   333
            case 'i':
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   334
                switch (buffer[1]) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   335
                    case 'r':
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   336
                        NSLog(@"Winning team: %s", &buffer[2]);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   337
                        break;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   338
                    case 'k':
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   339
                        NSLog(@"Best Hedgehog: %s", &buffer[2]);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   340
                        break;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   341
                }
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   342
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   343
            default:
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   344
                // empty packet or just statistics -- in either cases gameTicks is sent
3616
85d69ddb41b6 tackling the iphoneos todo (another trial for the beginning sporadic bug, remove curl animation, don't need to go to detail page)
koda
parents: 3613
diff changeset
   345
                gameTicks = SDLNet_Read16 (&buffer[msgSize - 2]);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   346
                //DLog(@"engineProtocol - %d: received [%s]", gameTicks, buffer);
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   347
                break;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   348
        }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   349
    }
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   350
    DLog(@"Engine exited, closing server");
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   351
    // wait a little to let the client close cleanly
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   352
    [NSThread sleepForTimeInterval:2];
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   353
    // Close the client socket
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   354
    SDLNet_TCP_Close(csd);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   355
    SDLNet_Quit();
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   356
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   357
    [pool release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   358
    //Invoking this method should be avoided as it does not give your thread a chance to clean up any resources it allocated during its execution.
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   359
    //[NSThread exit];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   360
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   361
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   362
#pragma mark -
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   363
#pragma mark Setting methods
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   364
// returns an array of c-strings that are read by engine at startup
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   365
-(const char **)getSettings {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   366
    NSString *ipcString = [[NSString alloc] initWithFormat:@"%d", ipcPort];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   367
    NSString *localeString = [[NSString alloc] initWithFormat:@"%@.txt", [[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   368
    CGRect screenBounds = [[UIScreen mainScreen] bounds];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   369
    NSString *wSize = [[NSString alloc] initWithFormat:@"%d", (int) screenBounds.size.width];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   370
    NSString *hSize = [[NSString alloc] initWithFormat:@"%d", (int) screenBounds.size.height];
3613
cfd3c6536a09 make runtime quality check for iDevices
koda
parents: 3598
diff changeset
   371
    const char **gameArgs = (const char**) malloc(sizeof(char *) * 10);
3634
93d260c96635 cWeaponTooltips -> rqTooltipsOff
koda
parents: 3626
diff changeset
   372
    NSInteger tmpQuality;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   373
3670
4c673e57f0d7 use llvm to compile, don't preview map on wimpier devices, merge vsync, fix iphone launch image
koda
parents: 3660
diff changeset
   374
    NSString *modelId = modelType();
3613
cfd3c6536a09 make runtime quality check for iDevices
koda
parents: 3598
diff changeset
   375
    if ([modelId hasPrefix:@"iPhone1"] ||                                   // = iPhone or iPhone 3G
cfd3c6536a09 make runtime quality check for iDevices
koda
parents: 3598
diff changeset
   376
        [modelId hasPrefix:@"iPod1,1"] || [modelId hasPrefix:@"iPod2,1"])   // = iPod Touch or iPod Touch 2G
3634
93d260c96635 cWeaponTooltips -> rqTooltipsOff
koda
parents: 3626
diff changeset
   377
        tmpQuality = 0x00000001 | 0x00000002 | 0x00000040;  // rqLowRes | rqBlurryLand | rqKillFlakes
3613
cfd3c6536a09 make runtime quality check for iDevices
koda
parents: 3598
diff changeset
   378
    else if ([modelId hasPrefix:@"iPhone2"] ||                              // = iPhone 3GS
cfd3c6536a09 make runtime quality check for iDevices
koda
parents: 3598
diff changeset
   379
             [modelId hasPrefix:@"iPod3"])                                  // = iPod Touch 3G
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   380
            tmpQuality = 0x00000002 | 0x00000040;           // rqBlurryLand | rqKillFlakes
3624
304c6d32383a button to open ammomenu
koda
parents: 3621
diff changeset
   381
        else if ([modelId hasPrefix:@"iPad1"])                              // = iPad
3634
93d260c96635 cWeaponTooltips -> rqTooltipsOff
koda
parents: 3626
diff changeset
   382
                tmpQuality = 0x00000002;                    // rqBlurryLand
3624
304c6d32383a button to open ammomenu
koda
parents: 3621
diff changeset
   383
            else                                                            // = everything else
3634
93d260c96635 cWeaponTooltips -> rqTooltipsOff
koda
parents: 3626
diff changeset
   384
                tmpQuality = 0;                             // full quality
93d260c96635 cWeaponTooltips -> rqTooltipsOff
koda
parents: 3626
diff changeset
   385
    if (![modelId hasPrefix:@"iPad"])                                       // = disable tooltips unless iPad
93d260c96635 cWeaponTooltips -> rqTooltipsOff
koda
parents: 3626
diff changeset
   386
        tmpQuality = tmpQuality | 0x00000400;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   387
3634
93d260c96635 cWeaponTooltips -> rqTooltipsOff
koda
parents: 3626
diff changeset
   388
    gameArgs[9] = [[[NSNumber numberWithInteger:tmpQuality] stringValue] UTF8String];
93d260c96635 cWeaponTooltips -> rqTooltipsOff
koda
parents: 3626
diff changeset
   389
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   390
    // prevents using an empty nickname
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   391
    NSString *username;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   392
    NSString *originalUsername = [self.systemSettings objectForKey:@"username"];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   393
    if ([originalUsername length] == 0)
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   394
        username = [[NSString alloc] initWithFormat:@"MobileUser-%@",ipcString];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   395
    else
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   396
        username = [[NSString alloc] initWithString:originalUsername];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   397
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   398
    gameArgs[0] = [username UTF8String];                                                        //UserNick
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   399
    gameArgs[1] = [ipcString UTF8String];                                                       //ipcPort
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   400
    gameArgs[2] = [[[self.systemSettings objectForKey:@"sound"] stringValue] UTF8String];       //isSoundEnabled
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   401
    gameArgs[3] = [[[self.systemSettings objectForKey:@"music"] stringValue] UTF8String];       //isMusicEnabled
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   402
    gameArgs[4] = [localeString UTF8String];                                                    //cLocaleFName
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   403
    gameArgs[5] = [[[self.systemSettings objectForKey:@"alternate"] stringValue] UTF8String];   //cAltDamage
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   404
    gameArgs[6] = [wSize UTF8String];                                                           //cScreenHeight
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   405
    gameArgs[7] = [hSize UTF8String];                                                           //cScreenWidth
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   406
    gameArgs[8] = NULL;                                                                         //recordFileName
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   407
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   408
    [wSize release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   409
    [hSize release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   410
    [localeString release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   411
    [ipcString release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   412
    [username release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   413
    return gameArgs;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   414
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   415
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   416
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   417
@end