project_files/HedgewarsMobile/Classes/OverlayViewController.m
changeset 6247 6dfad55fd71c
parent 6078 8c0cc07731e5
child 6259 02765411a912
equal deleted inserted replaced
6246:6b2d19ed521a 6247:6dfad55fd71c
    34 
    34 
    35 
    35 
    36 static OverlayViewController *mainOverlay;
    36 static OverlayViewController *mainOverlay;
    37 
    37 
    38 @implementation OverlayViewController
    38 @implementation OverlayViewController
    39 @synthesize popoverController, popupMenu, helpPage, amvc, initialScreenCount, lowerIndicator, savesIndicator,
    39 @synthesize popoverController, popupMenu, helpPage, amvc, initialScreenCount, loadingIndicator,
    40             confirmButton, grenadeTimeSegment;
    40             confirmButton, grenadeTimeSegment;
    41 
    41 
    42 #pragma mark -
    42 #pragma mark -
    43 #pragma mark rotation
    43 #pragma mark rotation
    44 
    44 
    51 -(id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    51 -(id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    52     if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
    52     if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
    53         isAttacking = NO;
    53         isAttacking = NO;
    54         isPopoverVisible = NO;
    54         isPopoverVisible = NO;
    55         initialScreenCount = (IS_DUALHEAD() ? 2 : 1);
    55         initialScreenCount = (IS_DUALHEAD() ? 2 : 1);
    56         lowerIndicator = nil;
    56         loadingIndicator = nil;
    57         savesIndicator = nil;
       
    58         mainOverlay = self;
    57         mainOverlay = self;
    59     }
    58     }
    60     return self;
    59     return self;
    61 }
    60 }
    62 
    61 
   117     mainOverlay = nil;
   116     mainOverlay = nil;
   118     self.helpPage = nil;
   117     self.helpPage = nil;
   119     [self dismissPopover];
   118     [self dismissPopover];
   120     self.popoverController = nil;
   119     self.popoverController = nil;
   121     self.amvc = nil;
   120     self.amvc = nil;
   122     self.lowerIndicator = nil;
   121     self.loadingIndicator = nil;
   123     self.savesIndicator = nil;
       
   124     MSG_DIDUNLOAD();
   122     MSG_DIDUNLOAD();
   125     [super viewDidUnload];
   123     [super viewDidUnload];
   126 }
   124 }
   127 
   125 
   128 -(void) didReceiveMemoryWarning {
   126 -(void) didReceiveMemoryWarning {
   130         self.popupMenu = nil;
   128         self.popupMenu = nil;
   131     if (self.helpPage.view.superview == nil)
   129     if (self.helpPage.view.superview == nil)
   132         self.helpPage = nil;
   130         self.helpPage = nil;
   133     if (self.amvc.view.superview == nil)
   131     if (self.amvc.view.superview == nil)
   134         self.amvc = nil;
   132         self.amvc = nil;
   135     if (self.lowerIndicator.superview == nil)
   133     if (self.loadingIndicator.superview == nil)
   136         self.lowerIndicator = nil;
   134         self.loadingIndicator = nil;
   137     if (self.savesIndicator.superview == nil)
       
   138         self.savesIndicator = nil;
       
   139     if (self.confirmButton.superview == nil)
   135     if (self.confirmButton.superview == nil)
   140         self.confirmButton = nil;
   136         self.confirmButton = nil;
   141     if (self.grenadeTimeSegment.superview == nil)
   137     if (self.grenadeTimeSegment.superview == nil)
   142         self.grenadeTimeSegment = nil;
   138         self.grenadeTimeSegment = nil;
   143     if (IS_IPAD())
   139     if (IS_IPAD())
   151 -(void) dealloc {
   147 -(void) dealloc {
   152     releaseAndNil(popupMenu);
   148     releaseAndNil(popupMenu);
   153     releaseAndNil(helpPage);
   149     releaseAndNil(helpPage);
   154     releaseAndNil(popoverController);
   150     releaseAndNil(popoverController);
   155     releaseAndNil(amvc);
   151     releaseAndNil(amvc);
   156     releaseAndNil(lowerIndicator);
   152     releaseAndNil(loadingIndicator);
   157     releaseAndNil(savesIndicator);
       
   158     releaseAndNil(confirmButton);
   153     releaseAndNil(confirmButton);
   159     releaseAndNil(grenadeTimeSegment);
   154     releaseAndNil(grenadeTimeSegment);
   160     // dimTimer is autoreleased
   155     // dimTimer is autoreleased
   161     [super dealloc];
   156     [super dealloc];
   162 }
   157 }
   189 
   184 
   190 #pragma mark -
   185 #pragma mark -
   191 #pragma mark overlay appearance
   186 #pragma mark overlay appearance
   192 // nice transition for dimming, should be called only by the timer himself
   187 // nice transition for dimming, should be called only by the timer himself
   193 -(void) dimOverlay {
   188 -(void) dimOverlay {
   194     if (isGameRunning()) {
   189     if ([HWUtils isGameRunning]) {
   195         [UIView beginAnimations:@"overlay dim" context:NULL];
   190         [UIView beginAnimations:@"overlay dim" context:NULL];
   196         [UIView setAnimationDuration:0.6];
   191         [UIView setAnimationDuration:0.6];
   197         self.view.alpha = 0.2;
   192         self.view.alpha = 0.2;
   198         [UIView commitAnimations];
   193         [UIView commitAnimations];
   199     }
   194     }
   213 
   208 
   214 #pragma mark -
   209 #pragma mark -
   215 #pragma mark overlay user interaction
   210 #pragma mark overlay user interaction
   216 // dim the overlay when there's no more input for a certain amount of time
   211 // dim the overlay when there's no more input for a certain amount of time
   217 -(IBAction) buttonReleased:(id) sender {
   212 -(IBAction) buttonReleased:(id) sender {
   218     if (isGameRunning() == NO)
   213     if ([HWUtils isGameRunning] == NO)
   219         return;
   214         return;
   220 
   215 
   221     UIButton *theButton = (UIButton *)sender;
   216     UIButton *theButton = (UIButton *)sender;
   222 
   217 
   223     switch (theButton.tag) {
   218     switch (theButton.tag) {
   246 
   241 
   247 // issue certain action based on the tag of the button
   242 // issue certain action based on the tag of the button
   248 -(IBAction) buttonPressed:(id) sender {
   243 -(IBAction) buttonPressed:(id) sender {
   249     [self activateOverlay];
   244     [self activateOverlay];
   250     
   245     
   251     if (isGameRunning() == NO)
   246     if ([HWUtils isGameRunning] == NO)
   252         return;
   247         return;
   253     
   248     
   254     if (isPopoverVisible)
   249     if (isPopoverVisible)
   255         [self dismissPopover];
   250         [self dismissPopover];
   256     
   251     
   331     doDim();
   326     doDim();
   332 }
   327 }
   333 
   328 
   334 -(void) setGrenadeTime:(id) sender {
   329 -(void) setGrenadeTime:(id) sender {
   335     UISegmentedControl *theSegment = (UISegmentedControl *)sender;
   330     UISegmentedControl *theSegment = (UISegmentedControl *)sender;
   336     if (cachedGrenadeTime() != theSegment.selectedSegmentIndex) {
   331     if ([ObjcExports grenadeTime] != theSegment.selectedSegmentIndex) {
   337         HW_setGrenadeTime(theSegment.selectedSegmentIndex + 1);
   332         HW_setGrenadeTime(theSegment.selectedSegmentIndex + 1);
   338         setGrenadeTime(theSegment.selectedSegmentIndex);
   333         [ObjcExports setGrenadeTime:theSegment.selectedSegmentIndex];
   339     }
   334     }
   340 }
   335 }
   341 
   336 
   342 #pragma mark -
   337 #pragma mark -
   343 #pragma mark in-game menu and help page
   338 #pragma mark in-game menu and help page
   399 }
   394 }
   400 
   395 
   401 #pragma mark -
   396 #pragma mark -
   402 #pragma mark Custom touch event handling
   397 #pragma mark Custom touch event handling
   403 -(BOOL) shouldIgnoreTouch:(NSSet *)allTouches {
   398 -(BOOL) shouldIgnoreTouch:(NSSet *)allTouches {
   404     if (isGameRunning() == NO)
   399     if ([HWUtils isGameRunning] == NO)
   405         return YES;
   400         return YES;
   406 
   401 
   407     // ignore activity near the dpad and buttons
   402     // ignore activity near the dpad and buttons
   408     CGPoint touchPoint = [[[allTouches allObjects] objectAtIndex:0] locationInView:self.view];
   403     CGPoint touchPoint = [[[allTouches allObjects] objectAtIndex:0] locationInView:self.view];
   409     CGSize screen = [[UIScreen mainScreen] bounds].size;
   404     CGSize screen = [[UIScreen mainScreen] bounds].size;
   510                                 [grenadeSegment addTarget:self action:@selector(setGrenadeTime:) forControlEvents:UIControlEventValueChanged];
   505                                 [grenadeSegment addTarget:self action:@selector(setGrenadeTime:) forControlEvents:UIControlEventValueChanged];
   511                                 self.grenadeTimeSegment = grenadeSegment;
   506                                 self.grenadeTimeSegment = grenadeSegment;
   512                                 [grenadeSegment release];
   507                                 [grenadeSegment release];
   513                             }
   508                             }
   514                             self.grenadeTimeSegment.frame = CGRectMake(screen.size.height / 2 - 125, screen.size.width, 250, 50);
   509                             self.grenadeTimeSegment.frame = CGRectMake(screen.size.height / 2 - 125, screen.size.width, 250, 50);
   515                             self.grenadeTimeSegment.selectedSegmentIndex = cachedGrenadeTime();
   510                             self.grenadeTimeSegment.selectedSegmentIndex = [ObjcExports grenadeTime];
   516                             self.grenadeTimeSegment.alpha = 1;
   511                             self.grenadeTimeSegment.alpha = 1;
   517                             [self.view addSubview:self.grenadeTimeSegment];
   512                             [self.view addSubview:self.grenadeTimeSegment];
   518 
   513 
   519                             [UIView beginAnimations:@"inserting segmented control" context:NULL];
   514                             [UIView beginAnimations:@"inserting segmented control" context:NULL];
   520                             [UIView setAnimationDuration:ANIMATION_DURATION];
   515                             [UIView setAnimationDuration:ANIMATION_DURATION];