project_files/HedgewarsMobile/Classes/MainMenuViewController.m
branchhedgeroid
changeset 6224 42b256eca362
parent 6115 485cfecadc9a
child 6246 6b2d19ed521a
equal deleted inserted replaced
6055:88cfcd9161d3 6224:42b256eca362
    19  */
    19  */
    20 
    20 
    21 
    21 
    22 #import "MainMenuViewController.h"
    22 #import "MainMenuViewController.h"
    23 #import "CreationChamber.h"
    23 #import "CreationChamber.h"
    24 #import "PascalImports.h"
       
    25 #import "GameConfigViewController.h"
    24 #import "GameConfigViewController.h"
    26 #import "SplitViewRootController.h"
    25 #import "SettingsContainerViewController.h"
    27 #import "AboutViewController.h"
    26 #import "AboutViewController.h"
    28 #import "SavedGamesViewController.h"
    27 #import "SavedGamesViewController.h"
    29 #import "RestoreViewController.h"
    28 #import "RestoreViewController.h"
       
    29 #import "MissionTrainingViewController.h"
    30 #import "GameInterfaceBridge.h"
    30 #import "GameInterfaceBridge.h"
    31 #import "Appirater.h"
    31 #import "Appirater.h"
    32 #import "ServerSetup.h"
    32 #import "ServerSetup.h"
    33 
    33 
    34 
    34 
    35 @implementation MainMenuViewController
    35 @implementation MainMenuViewController
    36 @synthesize gameConfigViewController, settingsViewController, aboutViewController, savedGamesViewController, restoreViewController;
    36 @synthesize gameConfigViewController, settingsViewController, aboutViewController, savedGamesViewController,
       
    37             restoreViewController, missionsViewController;
    37 
    38 
    38 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
    39 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
    39     return rotationManager(interfaceOrientation);
    40     return rotationManager(interfaceOrientation);
    40 }
    41 }
    41 
    42 
    42 // check if some configuration files are already set; if they are present it means that the current copy must be updated
    43 // check if some configuration files are already set; if they are present it means that the current copy must be updated
    43 -(void) createNecessaryFiles {
    44 -(void) createNecessaryFiles {
    44     NSString *resourcesDir = [[NSBundle mainBundle] resourcePath];
       
    45     DLog(@"Creating necessary files");
    45     DLog(@"Creating necessary files");
       
    46     NSInteger index;
    46     
    47     
    47     // SAVES - just delete and overwrite
    48     // SAVES - just delete and overwrite
    48     if ([[NSFileManager defaultManager] fileExistsAtPath:SAVES_DIRECTORY()])
    49     if ([[NSFileManager defaultManager] fileExistsAtPath:SAVES_DIRECTORY()])
    49         [[NSFileManager defaultManager] removeItemAtPath:SAVES_DIRECTORY() error:NULL];
    50         [[NSFileManager defaultManager] removeItemAtPath:SAVES_DIRECTORY() error:NULL];
    50     [[NSFileManager defaultManager] createDirectoryAtPath:SAVES_DIRECTORY() withIntermediateDirectories:NO attributes:nil error:NULL];
    51     [[NSFileManager defaultManager] createDirectoryAtPath:SAVES_DIRECTORY()
       
    52                               withIntermediateDirectories:NO
       
    53                                                attributes:nil
       
    54                                                     error:NULL];
    51     
    55     
    52     // SETTINGS - nsuserdefaults ftw
    56     // SETTINGS - nsuserdefaults ftw
    53     createSettings();
    57     [CreationChamber createSettings];
    54 
    58 
    55     // TEAMS - update exisiting teams with new format
    59     // TEAMS - update exisiting teams with new format
    56     if ([[NSFileManager defaultManager] fileExistsAtPath:TEAMS_DIRECTORY()] == NO) {
    60     NSArray *teamNames = [[NSArray alloc] initWithObjects:@"Edit Me!",@"Ninjas",@"Pirates",@"Robots",nil];
    57         [[NSFileManager defaultManager] createDirectoryAtPath:TEAMS_DIRECTORY()
    61     index = 0;
    58                                   withIntermediateDirectories:YES
    62     for (NSString *name in teamNames)
    59                                                    attributes:nil
    63         [CreationChamber createTeamNamed:name ofType:index++ controlledByAI:[name isEqualToString:@"Robots"]];
    60                                                         error:NULL];
    64     [teamNames release];
    61         // we copy teams only the first time because it's unlikely that newer ones are going to be added
       
    62         NSString *baseTeamsDir = [[NSString alloc] initWithFormat:@"%@/Settings/Teams/",resourcesDir];
       
    63         for (NSString *str in [[NSFileManager defaultManager] contentsOfDirectoryAtPath:baseTeamsDir error:NULL]) {
       
    64             NSString *sourceFile = [baseTeamsDir stringByAppendingString:str];
       
    65             NSString *destinationFile = [TEAMS_DIRECTORY() stringByAppendingString:str];
       
    66             [[NSFileManager defaultManager] removeItemAtPath:destinationFile error:NULL];
       
    67             [[NSFileManager defaultManager] copyItemAtPath:sourceFile toPath:destinationFile error:NULL];
       
    68         }
       
    69         [baseTeamsDir release];
       
    70     }
       
    71     // merge not needed as format rarely changes
       
    72 
    65 
    73     // SCHEMES - always overwrite and delete custom ones
    66     // SCHEMES - always overwrite and delete custom ones
    74     if ([[NSFileManager defaultManager] fileExistsAtPath:SCHEMES_DIRECTORY()] == YES)
    67     if ([[NSFileManager defaultManager] fileExistsAtPath:SCHEMES_DIRECTORY()] == YES)
    75         [[NSFileManager defaultManager] removeItemAtPath:SCHEMES_DIRECTORY() error:NULL];
    68         [[NSFileManager defaultManager] removeItemAtPath:SCHEMES_DIRECTORY() error:NULL];
    76     createSchemeNamed(@"Default", 0);
    69     NSArray *schemeNames = [[NSArray alloc] initWithObjects:@"Default",@"Pro Mode",@"Shoppa",@"Clean Slate",
    77     createSchemeNamed(@"Pro Mode", 1);
    70                             @"Minefield",@"Barrel Mayhem",@"Tunnel Hogs",@"Fort Mode",@"Timeless",
    78     createSchemeNamed(@"Shoppa", 2);
    71                             @"Thinking with Portals",@"King Mode",nil];
    79     createSchemeNamed(@"Clean Slate", 3);
    72     index = 0;
    80     createSchemeNamed(@"Minefield", 4);
    73     for (NSString *name in schemeNames)
    81     createSchemeNamed(@"Barrel Mayhem", 5);
    74         [CreationChamber createSchemeNamed:name ofType:index++];
    82     createSchemeNamed(@"Tunnel Hogs", 6);
    75     [schemeNames release];
    83     createSchemeNamed(@"Fort Mode", 7);
    76 
    84     createSchemeNamed(@"Timeless", 8);
    77     // WEAPONS - always overwrite as merge is not needed (missing weaps are 0ed automatically)
    85     createSchemeNamed(@"Thinking with Portals", 9);
    78     NSArray *weaponNames = [[NSArray alloc] initWithObjects:@"Default",@"Crazy",@"Pro Mode",@"Shoppa",@"Clean Slate",
    86     createSchemeNamed(@"King Mode", 10);
    79                             @"Minefield",@"Thinking with Portals",nil];
    87 
    80     index = 0;
    88     // WEAPONS - always overwrite
    81     for (NSString *name in weaponNames)
    89     createWeaponNamed(@"Default", 0);
    82         [CreationChamber createWeaponNamed:name ofType:index++];
    90     createWeaponNamed(@"Crazy", 1);
    83     [weaponNames release];
    91     createWeaponNamed(@"Pro Mode", 2);
       
    92     createWeaponNamed(@"Shoppa", 3);
       
    93     createWeaponNamed(@"Clean Slate", 4);
       
    94     createWeaponNamed(@"Minefield", 5);
       
    95     createWeaponNamed(@"Thinking with Portals", 6);
       
    96     // merge not needed because weapons not present in the set are 0ed by GameSetup
       
    97 }
    84 }
    98 
    85 
    99 #pragma mark -
    86 #pragma mark -
   100 -(void) viewDidLoad {
    87 -(void) viewDidLoad {
   101     [super viewDidLoad];
    88     [super viewDidLoad];
   162 
   149 
   163     [AudioManagerController playClickSound];
   150     [AudioManagerController playClickSound];
   164     switch (button.tag) {
   151     switch (button.tag) {
   165         case 0:
   152         case 0:
   166             if (nil == self.gameConfigViewController) {
   153             if (nil == self.gameConfigViewController) {
   167                 xib = IS_IPAD() ? nil : @"GameConfigViewController";
   154                 xib = IS_IPAD() ? @"GameConfigViewController-iPad" : @"GameConfigViewController-iPhone";
   168 
   155 
   169                 GameConfigViewController *gcvc = [[GameConfigViewController alloc] initWithNibName:xib bundle:nil];
   156                 GameConfigViewController *gcvc = [[GameConfigViewController alloc] initWithNibName:xib bundle:nil];
   170                 gcvc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
   157                 gcvc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
   171                 self.gameConfigViewController = gcvc;
   158                 self.gameConfigViewController = gcvc;
   172                 [gcvc release];
   159                 [gcvc release];
   173             }
   160             }
   174 
       
   175             [self presentModalViewController:self.gameConfigViewController animated:YES];
   161             [self presentModalViewController:self.gameConfigViewController animated:YES];
   176             break;
   162             break;
   177         case 2:
   163         case 2:
   178             if (nil == self.settingsViewController) {
   164             if (nil == self.settingsViewController) {
   179                 SplitViewRootController *svrc = [[SplitViewRootController alloc] initWithNibName:nil bundle:nil];
   165                 SettingsContainerViewController *svrc = [[SettingsContainerViewController alloc] initWithNibName:nil bundle:nil];
   180                 svrc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
   166                 svrc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
   181                 self.settingsViewController = svrc;
   167                 self.settingsViewController = svrc;
   182                 [svrc release];
   168                 [svrc release];
   183             }
   169             }
   184 
       
   185             [self presentModalViewController:self.settingsViewController animated:YES];
   170             [self presentModalViewController:self.settingsViewController animated:YES];
   186             break;
   171             break;
   187         case 3:
   172         case 3:
   188 #ifdef DEBUG
   173 #ifdef DEBUG
   189             if ([[NSFileManager defaultManager] fileExistsAtPath:DEBUG_FILE()])
   174             if ([[NSFileManager defaultManager] fileExistsAtPath:DEBUG_FILE()])
   222                 if ([savedgames respondsToSelector:@selector(setModalPresentationStyle:)])
   207                 if ([savedgames respondsToSelector:@selector(setModalPresentationStyle:)])
   223                     savedgames.modalPresentationStyle = UIModalPresentationPageSheet;
   208                     savedgames.modalPresentationStyle = UIModalPresentationPageSheet;
   224                 self.savedGamesViewController = savedgames;
   209                 self.savedGamesViewController = savedgames;
   225                 [savedgames release];
   210                 [savedgames release];
   226             }
   211             }
   227             
       
   228             [self presentModalViewController:self.savedGamesViewController animated:YES];
   212             [self presentModalViewController:self.savedGamesViewController animated:YES];
       
   213             break;
       
   214         case 5:
       
   215             if (nil == self.missionsViewController) {
       
   216                 xib = IS_IPAD() ? @"MissionTrainingViewController-iPad" : @"MissionTrainingViewController-iPhone";
       
   217                 MissionTrainingViewController *missions = [[MissionTrainingViewController alloc] initWithNibName:xib bundle:nil];
       
   218                 missions.modalTransitionStyle = IS_IPAD() ? UIModalTransitionStyleCoverVertical : UIModalTransitionStyleCrossDissolve;
       
   219                 if ([missions respondsToSelector:@selector(setModalPresentationStyle:)])
       
   220                     missions.modalPresentationStyle = UIModalPresentationPageSheet;
       
   221                 self.missionsViewController = missions;
       
   222                 [missions release];
       
   223             }
       
   224             [self presentModalViewController:self.missionsViewController animated:YES];
   229             break;
   225             break;
   230         default:
   226         default:
   231             alert = [[UIAlertView alloc] initWithTitle:@"Not Yet Implemented"
   227             alert = [[UIAlertView alloc] initWithTitle:@"Not Yet Implemented"
   232                                                message:@"Sorry, this feature is not yet implemented"
   228                                                message:@"Sorry, this feature is not yet implemented"
   233                                               delegate:nil
   229                                               delegate:nil
   252     self.gameConfigViewController = nil;
   248     self.gameConfigViewController = nil;
   253     self.settingsViewController = nil;
   249     self.settingsViewController = nil;
   254     self.aboutViewController = nil;
   250     self.aboutViewController = nil;
   255     self.savedGamesViewController = nil;
   251     self.savedGamesViewController = nil;
   256     self.restoreViewController = nil;
   252     self.restoreViewController = nil;
       
   253     self.missionsViewController = nil;
   257     MSG_DIDUNLOAD();
   254     MSG_DIDUNLOAD();
   258     [super viewDidUnload];
   255     [super viewDidUnload];
   259 }
   256 }
   260 
   257 
   261 -(void) didReceiveMemoryWarning {
   258 -(void) didReceiveMemoryWarning {
   267         self.aboutViewController = nil;
   264         self.aboutViewController = nil;
   268     if (self.savedGamesViewController.view.superview == nil)
   265     if (self.savedGamesViewController.view.superview == nil)
   269         self.savedGamesViewController = nil;
   266         self.savedGamesViewController = nil;
   270     if (self.restoreViewController.view.superview == nil)
   267     if (self.restoreViewController.view.superview == nil)
   271         self.restoreViewController = nil;
   268         self.restoreViewController = nil;
       
   269     if (self.missionsViewController.view.superview == nil)
       
   270         self.missionsViewController = nil;
   272     MSG_MEMCLEAN();
   271     MSG_MEMCLEAN();
   273     [super didReceiveMemoryWarning];
   272     [super didReceiveMemoryWarning];
   274 }
   273 }
   275 
   274 
   276 -(void) dealloc {
   275 -(void) dealloc {
   277     releaseAndNil(settingsViewController);
   276     releaseAndNil(settingsViewController);
   278     releaseAndNil(gameConfigViewController);
   277     releaseAndNil(gameConfigViewController);
   279     releaseAndNil(aboutViewController);
   278     releaseAndNil(aboutViewController);
   280     releaseAndNil(savedGamesViewController);
   279     releaseAndNil(savedGamesViewController);
   281     releaseAndNil(restoreViewController);
   280     releaseAndNil(restoreViewController);
       
   281     releaseAndNil(missionsViewController);
   282     [super dealloc];
   282     [super dealloc];
   283 }
   283 }
   284 
   284 
   285 @end
   285 @end