project_files/HedgewarsMobile/Classes/GameConfigViewController.m
branchhedgeroid
changeset 6224 42b256eca362
parent 6219 c193881389c1
child 6266 b02a1e92dba2
--- a/project_files/HedgewarsMobile/Classes/GameConfigViewController.m	Fri Oct 28 17:41:39 2011 +0200
+++ b/project_files/HedgewarsMobile/Classes/GameConfigViewController.m	Fri Oct 28 18:26:17 2011 +0200
@@ -25,12 +25,10 @@
 #import "SchemeWeaponConfigViewController.h"
 #import "HelpPageViewController.h"
 #import "GameInterfaceBridge.h"
-#import "CommodityFunctions.h"
-#import "UIImageExtra.h"
-#import "PascalImports.h"
+
 
 @implementation GameConfigViewController
-@synthesize imgContainer, helpPage, mapConfigViewController, teamConfigViewController, schemeWeaponConfigViewController, interfaceBridge;
+@synthesize imgContainer, helpPage, mapConfigViewController, teamConfigViewController, schemeWeaponConfigViewController;
 
 
 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
@@ -57,15 +55,24 @@
             break;
         case 1:
             [AudioManagerController playClickSound];
+            if ([self isEverythingSet] == NO)
+                return;
             theButton.enabled = NO;
+            for (UIView *oneView in self.imgContainer.subviews) {
+                if ([oneView isMemberOfClass:[UIImageView class]]) {
+                    UIImageView *anImageView = (UIImageView *)oneView;
+                    [anImageView removeFromSuperview];
+                }
+            }
             [self startGame:theButton];
+            
             break;
         case 2:
             [AudioManagerController playClickSound];
             if (self.helpPage == nil)
                 self.helpPage = [[HelpPageViewController alloc] initWithNibName:@"HelpPageLobbyViewController-iPad" bundle:nil];
             self.helpPage.view.alpha = 0;
-            [self.view addSubview:helpPage.view];
+            [self.view addSubview:self.helpPage.view];
             [UIView beginAnimations:@"helplobby" context:NULL];
             self.helpPage.view.alpha = 1;
             [UIView commitAnimations];
@@ -77,34 +84,22 @@
 }
 
 -(IBAction) segmentPressed:(id) sender {
+
     UISegmentedControl *theSegment = (UISegmentedControl *)sender;
 
     [AudioManagerController playSelectSound];
     switch (theSegment.selectedSegmentIndex) {
         case 0:
-            // this init here is just aestetic as this controller was already set up in viewDidLoad
-            if (mapConfigViewController == nil) {
-                mapConfigViewController = [[MapConfigViewController alloc] initWithNibName:@"MapConfigViewController-iPhone" bundle:nil];
-                [self.view addSubview:mapConfigViewController.view];
-            }
             // this message is compulsory otherwise the table won't be loaded at all
-            [mapConfigViewController viewWillAppear:NO];
-            [self.view bringSubviewToFront:mapConfigViewController.view];
+            [self.mapConfigViewController viewWillAppear:NO];
+            [self.view bringSubviewToFront:self.mapConfigViewController.view];
             break;
         case 1:
-            if (teamConfigViewController == nil) {
-                teamConfigViewController = [[TeamConfigViewController alloc] initWithStyle:UITableViewStyleGrouped];
-                [self.view addSubview:teamConfigViewController.view];
-            }
             // this message is compulsory otherwise the table won't be loaded at all
-            [teamConfigViewController viewWillAppear:NO];
-            [self.view bringSubviewToFront:teamConfigViewController.view];
+            [self.teamConfigViewController viewWillAppear:NO];
+            [self.view bringSubviewToFront:self.teamConfigViewController.view];
             break;
         case 2:
-            if (schemeWeaponConfigViewController == nil) {
-                schemeWeaponConfigViewController = [[SchemeWeaponConfigViewController alloc] initWithStyle:UITableViewStyleGrouped];
-                [self.view addSubview:schemeWeaponConfigViewController.view];
-            }
             // this message is compulsory otherwise the table won't be loaded at all
             [schemeWeaponConfigViewController viewWillAppear:NO];
             [self.view bringSubviewToFront:schemeWeaponConfigViewController.view];
@@ -122,6 +117,7 @@
             DLog(@"Nope");
             break;
     }
+
 }
 
 -(BOOL) isEverythingSet {
@@ -208,9 +204,6 @@
 
 -(void) startGame:(UIButton *)button {
     button.enabled = YES;
-    
-    if ([self isEverythingSet] == NO)
-        return;
 
     NSString *script = self.mapConfigViewController.missionCommand;
     if ([script isEqualToString:@""])
@@ -230,45 +223,59 @@
                                     script,@"mission_command",
                                     nil];
 
-    if (self.interfaceBridge == nil) {
-        GameInterfaceBridge *bridge = [[GameInterfaceBridge alloc] initWithController:self];
-        self.interfaceBridge = bridge;
-        [bridge release];
-    }
-    [self.interfaceBridge startLocalGame:gameDictionary];
+    GameInterfaceBridge *bridge = [[GameInterfaceBridge alloc] initWithController:self];
+    [bridge startLocalGame:gameDictionary];
+    [bridge release];
 }
 
 -(void) loadNiceHogs {
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-    NSString *filePath = [NSString stringWithFormat:@"%@/Hedgehog.png",GRAPHICS_DIRECTORY()];
-    UIImage *sprite = [[UIImage alloc] initWithContentsOfFile:filePath andCutAt:CGRectMake(96, 0, 32, 32)];
-    
+    srand(time(NULL));
+    NSString *filePath = [[NSString alloc] initWithFormat:@"%@/Hedgehog/Idle.png",GRAPHICS_DIRECTORY()];
+    UIImage *hogSprite = [[UIImage alloc] initWithContentsOfFile:filePath];
+    [filePath release];
+
     NSArray *hatArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:HATS_DIRECTORY() error:NULL];
     int numberOfHats = [hatArray count];
+    int animationFrames = IS_VERY_POWERFUL([HWUtils modelType]) ? 18 : 1;
 
     if (self.imgContainer != nil)
         [self.imgContainer removeFromSuperview];
-    
+
     self.imgContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 40)];
     for (int i = 0; i < 1 + random()%20; i++) {
         NSString *hat = [hatArray objectAtIndex:random()%numberOfHats];
-        
+
         NSString *hatFile = [[NSString alloc] initWithFormat:@"%@/%@", HATS_DIRECTORY(), hat];
-        UIImage *hatSprite = [[UIImage alloc] initWithContentsOfFile: hatFile andCutAt:CGRectMake(0, 0, 32, 32)];
-        [hatFile release];
-        UIImage *hogWithHat = [sprite mergeWith:hatSprite atPoint:CGPointMake(0, 5)];
+        UIImage *hatSprite = [[UIImage alloc] initWithContentsOfFile:hatFile];
+        NSMutableArray *animation = [[NSMutableArray alloc] initWithCapacity:animationFrames];
+        for (int j = 0; j < animationFrames; j++) {
+            int x = ((j*32)/(int)hatSprite.size.height)*32;
+            int y = (j*32)%(int)hatSprite.size.height;
+            UIImage *hatSpriteFrame = [hatSprite cutAt:CGRectMake(x, y, 32, 32)];
+            UIImage *hogSpriteFrame = [hogSprite cutAt:CGRectMake(x, y, 32, 32)];
+            UIImage *hogWithHat = [hogSpriteFrame mergeWith:hatSpriteFrame atPoint:CGPointMake(0, 5)];
+            [animation addObject:hogWithHat];
+        }
         [hatSprite release];
-        
-        UIImageView *hog = [[UIImageView alloc] initWithImage:hogWithHat];
-        int x = 15*(i+1)+random()%40;
-        if (x + 32 > 300)
-            x = i*10;
-        hog.frame = CGRectMake(x, 30, 32, 32);
+        [hatFile release];
+
+        UIImageView *hog = [[UIImageView alloc] initWithImage:[animation objectAtIndex:0]];
+        hog.animationImages = animation;
+        hog.animationDuration = 3;
+        [animation release];
+
+        int x = 20*i+random()%128;
+        if (x > 320 - 32)
+            x = i*random()%32;
+        hog.frame = CGRectMake(x, 25, hog.frame.size.width, hog.frame.size.height);
         [self.imgContainer addSubview:hog];
+        [hog startAnimating];
         [hog release];
     }
+
     [self.view addSubview:self.imgContainer];
-    [sprite release];
+    [hogSprite release];
     [pool drain];
 }
 
@@ -279,57 +286,30 @@
     self.view.frame = CGRectMake(0, 0, screen.size.height, screen.size.width);
 
     if (IS_IPAD()) {
-        // load other controllers
-        if (self.mapConfigViewController == nil)
-            self.mapConfigViewController = [[MapConfigViewController alloc] initWithNibName:@"MapConfigViewController-iPad" bundle:nil];
+        // the label for the filter slider
+        UILabel *filterLabel = [[UILabel alloc] initWithFrame:CGRectMake(116, 714, 310, 40)
+                                                     andTitle:nil
+                                              withBorderWidth:2.0f];
+        [self.view insertSubview:filterLabel belowSubview:self.mapConfigViewController.slider];
+        [filterLabel release];
 
-        UILabel *leftBackground = createLabelWithParams(nil, CGRectMake(0, 60, 320, 620), 2.7f, UICOLOR_HW_YELLOW_BODER, UICOLOR_HW_ALPHABLUE);
-        [self.mapConfigViewController.view addSubview:leftBackground];
-        [leftBackground release];
-        UILabel *middleBackground = createLabelWithParams(nil, CGRectMake(337, 187, 350, 505), 2.7f, UICOLOR_HW_YELLOW_BODER, UICOLOR_HW_ALPHABLUE);
-        [self.mapConfigViewController.view addSubview:middleBackground];
-        [middleBackground release];
-        UILabel *rightBackground = createLabelWithParams(nil, CGRectMake(704, 214, 320, 464), 2.7f, UICOLOR_HW_YELLOW_BODER, UICOLOR_HW_ALPHABLUE);
-        [self.mapConfigViewController.view addSubview:rightBackground];
-        [rightBackground release];
-        UILabel *topBackground = createLabelWithParams(nil, CGRectMake(714, 14, 300, 190), 2.3f, UICOLOR_HW_YELLOW_BODER, UICOLOR_HW_ALPHABLUE);
-        [self.mapConfigViewController.view addSubview:topBackground];
-        [topBackground release];
-        UILabel *bottomLeftBackground = createLabelWithParams(nil, CGRectMake(106, 714, 320, 40), 2.0f, UICOLOR_HW_YELLOW_BODER, UICOLOR_HW_ALPHABLUE);
-        [self.mapConfigViewController.view addSubview:bottomLeftBackground];
-        [bottomLeftBackground release];
-        UILabel *bottomRightBackground = createLabelWithParams(NSLocalizedString(@"Max Hogs:                 ",@""), CGRectMake(594, 714, 320, 40), 2.0f, UICOLOR_HW_YELLOW_BODER, UICOLOR_HW_ALPHABLUE);
-        bottomRightBackground.font = [UIFont italicSystemFontOfSize:[UIFont labelFontSize]];
-        [self.mapConfigViewController.view addSubview:bottomRightBackground];
-        [bottomRightBackground release];
-        [self.mapConfigViewController.view bringSubviewToFront:self.mapConfigViewController.maxLabel];
-        [self.mapConfigViewController.view bringSubviewToFront:self.mapConfigViewController.sizeLabel];
-        [self.mapConfigViewController.view bringSubviewToFront:self.mapConfigViewController.segmentedControl];
-        [self.mapConfigViewController.view bringSubviewToFront:self.mapConfigViewController.previewButton];
-        [self.mapConfigViewController.view bringSubviewToFront:self.mapConfigViewController.slider];
-        [self.mapConfigViewController.view bringSubviewToFront:self.mapConfigViewController.tableView];
+        // the label for max hogs
+        UILabel *maxLabel = [[UILabel alloc] initWithFrame:CGRectMake(598, 714, 310, 40)
+                                                  andTitle:NSLocalizedString(@"Loading...",@"")
+                                           withBorderWidth:2.0f];
+        maxLabel.font = [UIFont italicSystemFontOfSize:[UIFont labelFontSize]];
+        maxLabel.textColor = [UIColor whiteColor];
+        maxLabel.textAlignment = UITextAlignmentCenter;
+        [self.view addSubview:maxLabel];
+        self.mapConfigViewController.maxLabel = maxLabel;
+        [maxLabel release];
 
-        if (self.teamConfigViewController == nil)
-            self.teamConfigViewController = [[TeamConfigViewController alloc] initWithStyle:UITableViewStyleGrouped];
-        [self.mapConfigViewController.view addSubview:self.teamConfigViewController.view];
-        if (self.schemeWeaponConfigViewController == nil)
-            self.schemeWeaponConfigViewController = [[SchemeWeaponConfigViewController alloc] initWithStyle:UITableViewStyleGrouped];
-        [self.mapConfigViewController.view addSubview:schemeWeaponConfigViewController.view];
-        self.mapConfigViewController.view.frame = CGRectMake(0, 0, screen.size.height, screen.size.width);
-        self.teamConfigViewController.view.frame = CGRectMake(348, 200, 328, 480);
-        self.schemeWeaponConfigViewController.view.frame = CGRectMake(10, 70, 300, 600);
-
-        self.mapConfigViewController.parentController = self;
+        // as this is loaded from a NIB we need to set its size and position
+        self.mapConfigViewController.view.frame = CGRectMake(704, 0, 320, 680);
     } else {
-        // this is the visible controller
-        if (self.mapConfigViewController == nil)
-            self.mapConfigViewController = [[MapConfigViewController alloc] initWithNibName:@"MapConfigViewController-iPhone" bundle:nil];
-        // this must be loaded & added in order to auto set default scheme and ammo
-        self.schemeWeaponConfigViewController = [[SchemeWeaponConfigViewController alloc] initWithStyle:UITableViewStyleGrouped];
-        [self.view addSubview:self.schemeWeaponConfigViewController.view];
+        self.mapConfigViewController.view.frame = CGRectMake(0, 0, screen.size.height, screen.size.width-44);
     }
     [self.view addSubview:self.mapConfigViewController.view];
-    self.mapConfigViewController.externalController = schemeWeaponConfigViewController;
 
     [super viewDidLoad];
 }
@@ -368,28 +348,25 @@
 }
 
 -(void) didReceiveMemoryWarning {
+    self.imgContainer = nil;
+
+    if (self.mapConfigViewController.view.superview == nil)
+        self.mapConfigViewController = nil;
     if (self.teamConfigViewController.view.superview == nil)
         self.teamConfigViewController = nil;
     if (self.schemeWeaponConfigViewController.view.superview == nil)
         self.schemeWeaponConfigViewController = nil;
     if (self.helpPage.view.superview == nil)
         self.helpPage = nil;
-    if (self.mapConfigViewController.view.superview == nil)
-        self.mapConfigViewController = nil;
-
-    self.imgContainer = nil;
-    // don't nil this one or it won't be able to send messages
-    //self.interfaceBridge = nil;
     MSG_MEMCLEAN();
     [super didReceiveMemoryWarning];
 }
 
 -(void) viewDidUnload {
     self.imgContainer = nil;
-    self.interfaceBridge = nil;
+    self.schemeWeaponConfigViewController = nil;
+    self.teamConfigViewController = nil;
     self.mapConfigViewController = nil;
-    self.teamConfigViewController = nil;
-    self.schemeWeaponConfigViewController = nil;
     self.helpPage = nil;
     MSG_DIDUNLOAD();
     [super viewDidUnload];
@@ -397,10 +374,9 @@
 
 -(void) dealloc {
     releaseAndNil(imgContainer);
-    releaseAndNil(interfaceBridge);
+    releaseAndNil(schemeWeaponConfigViewController);
+    releaseAndNil(teamConfigViewController);
     releaseAndNil(mapConfigViewController);
-    releaseAndNil(teamConfigViewController);
-    releaseAndNil(schemeWeaponConfigViewController);
     releaseAndNil(helpPage);
     [super dealloc];
 }