cocoaTouch/MainMenuViewController.m
author koda
Thu, 17 Jun 2010 19:57:51 +0200
changeset 3513 f589230fa21b
parent 3490 016b3172b645
permissions -rw-r--r--
now it's possible to select the scheme file in the ifrontendfix a type about loading an image (iphone file system IS case senstive) add rotation for iphone build too make the ifrontend work again with 3.0 sdk reworked openalbridge following most of an old implementation by Smaxx and making it more modular -- now sources are limited but the memory extension and cleanup is todo nil'd many variables in engine that were causing intialization problems

//
//  MainMenuViewController.m
//  hwengine
//
//  Created by Vittorio on 08/01/10.
//  Copyright 2010 __MyCompanyName__. All rights reserved.
//

#import "MainMenuViewController.h"
#import "SDL_uikitappdelegate.h"
#import "PascalImports.h"
#import "GameConfigViewController.h"
#import "SplitViewRootController.h"
#import "CommodityFunctions.h"

@implementation MainMenuViewController
@synthesize versionLabel;

-(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
	return rotationManager(interfaceOrientation);
}

- (void)didReceiveMemoryWarning {
	// Releases the view if it doesn't have a superview.
	[super didReceiveMemoryWarning];
    if (settingsViewController.view.superview == nil) 
        settingsViewController = nil;
    if (gameConfigViewController.view.superview == nil) 
        gameConfigViewController = nil;
    MSG_MEMCLEAN();
}

-(void) viewDidLoad {
    char *ver;
    HW_versionInfo(NULL, &ver);
    NSString *versionNumber = [[NSString alloc] initWithCString:ver];
    self.versionLabel.text = versionNumber;
    [versionNumber release];

    // listen to request to remove the modalviewcontroller
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(dismissModalViewController)
                                                 name: @"dismissModalView" 
                                               object:nil];
    
    // initialize some files the first time we load the game
	if (!([[NSFileManager defaultManager] fileExistsAtPath:SETTINGS_FILE()])) 
        [NSThread detachNewThreadSelector:@selector(checkFirstRun) toTarget:self withObject:nil];
    
	[super viewDidLoad];
}

// this is called to verify whether it's the first time the app is launched
// if it is it blocks user interaction with an alertView until files are created
-(void) checkFirstRun {
	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSLog(@"First time run, creating settings files at %@", SETTINGS_FILE());
    
    // show a popup with an indicator to make the user wait
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Please wait",@"")
                                                    message:nil
                                                   delegate:nil
                                          cancelButtonTitle:nil
                                          otherButtonTitles:nil];
    [alert show];
    
    UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] 
                                          initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    indicator.center = CGPointMake(alert.bounds.size.width / 2, alert.bounds.size.height - 50);
    [indicator startAnimating];
    [alert addSubview:indicator];
    [indicator release];
    
    // create a team
    createTeamNamed(@"Pirates");
    createTeamNamed(@"Ninjas");
    
    createSchemeNamed(@"Default");
    
    // create settings.plist
    NSMutableDictionary *saveDict = [[NSMutableDictionary alloc] init];

    [saveDict setObject:@"" forKey:@"username"];
    [saveDict setObject:@"" forKey:@"password"];
    [saveDict setObject:[NSNumber numberWithBool:YES] forKey:@"music"];
    [saveDict setObject:[NSNumber numberWithBool:YES] forKey:@"sound"];
    [saveDict setObject:[NSNumber numberWithBool:NO] forKey:@"alternate"];

    [saveDict writeToFile:SETTINGS_FILE() atomically:YES];
    [saveDict release];    
    
    // ok let the user take control
    [alert dismissWithClickedButtonIndex:0 animated:YES];
    [alert release];

	[pool release];
	[NSThread exit];
}

#pragma mark -
-(IBAction) switchViews:(id) sender {
    UIButton *button = (UIButton *)sender;
    UIAlertView *alert;
    NSString *debugStr, *configNibName;

    switch (button.tag) {
        case 0:
            // bug in UIModalTransitionStylePartialCurl, displays the controller awkwardly if it is not allocated every time
            if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
                configNibName = @"GameConfigViewController-iPad";
            else
                configNibName = @"GameConfigViewController-iPhone";
            
            gameConfigViewController = [[GameConfigViewController alloc] initWithNibName:configNibName bundle:nil];        
#ifdef __IPHONE_3_2
            if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
                gameConfigViewController.modalTransitionStyle = UIModalTransitionStylePartialCurl;
#endif
            [self presentModalViewController:gameConfigViewController animated:YES];
            break;
        case 2:
            if (nil == settingsViewController) {
                settingsViewController = [[SplitViewRootController alloc] initWithNibName:nil bundle:nil];
                settingsViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
            }
            
            [self presentModalViewController:settingsViewController animated:YES];
            break;
        case 3:
            debugStr = [[NSString alloc] initWithContentsOfFile:DEBUG_FILE()];
            UITextView *scroll = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.height, self.view.frame.size.width)];
            scroll.text = debugStr;
            [debugStr release];
            scroll.editable = NO;
            
            UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
            [btn addTarget:scroll action:@selector(removeFromSuperview) forControlEvents:UIControlEventTouchUpInside];
            btn.backgroundColor = [UIColor blackColor];
            btn.frame = CGRectMake(self.view.frame.size.height-70, 0, 70, 70);
            [scroll addSubview:btn];
            [self.view addSubview:scroll];
            [scroll release];
            break;
        default:
            alert = [[UIAlertView alloc] initWithTitle:@"Not Yet Implemented"
                                               message:@"Sorry, this feature is not yet implemented"
                                              delegate:nil
                                     cancelButtonTitle:@"Well, don't worry"
                                     otherButtonTitles:nil];
            [alert show];
            [alert release];
            break;
    }
}

// allows child controllers to return to the main controller
-(void) dismissModalViewController {
    [self dismissModalViewControllerAnimated:YES];
}


-(void) viewDidUnload {
    self.versionLabel = nil;
    gameConfigViewController = nil;
    settingsViewController = nil;
	[super viewDidUnload];
    MSG_DIDUNLOAD();
}

-(void) dealloc {
    [versionLabel release];
    [settingsViewController release];
    [gameConfigViewController release];
	[super dealloc];
}

@end