project_files/HedgewarsMobile/Classes/OverlayViewController.m
changeset 6822 206db098f8c5
parent 6700 e04da46ee43c
child 6825 aca4a6807ecc
equal deleted inserted replaced
6821:d4f75843cf5d 6822:206db098f8c5
    21 
    21 
    22 #import "OverlayViewController.h"
    22 #import "OverlayViewController.h"
    23 #import "InGameMenuViewController.h"
    23 #import "InGameMenuViewController.h"
    24 #import "HelpPageViewController.h"
    24 #import "HelpPageViewController.h"
    25 #import "CGPointUtils.h"
    25 #import "CGPointUtils.h"
    26 #import "ObjcExports.h"
       
    27 
    26 
    28 
    27 
    29 #define HIDING_TIME_DEFAULT [NSDate dateWithTimeIntervalSinceNow:2.7]
    28 #define HIDING_TIME_DEFAULT [NSDate dateWithTimeIntervalSinceNow:2.7]
    30 #define HIDING_TIME_NEVER   [NSDate dateWithTimeIntervalSinceNow:10000]
    29 #define HIDING_TIME_NEVER   [NSDate dateWithTimeIntervalSinceNow:10000]
    31 #define doDim()             [dimTimer setFireDate:HIDING_TIME_DEFAULT]
    30 #define doDim()             [dimTimer setFireDate:HIDING_TIME_DEFAULT]
    32 #define doNotDim()          [dimTimer setFireDate:HIDING_TIME_NEVER]
    31 #define doNotDim()          [dimTimer setFireDate:HIDING_TIME_NEVER]
    33 
    32 
    34 
    33 
    35 static OverlayViewController *mainOverlay;
       
    36 
       
    37 @implementation OverlayViewController
    34 @implementation OverlayViewController
    38 @synthesize popoverController, popupMenu, helpPage, loadingIndicator, confirmButton, grenadeTimeSegment;
    35 @synthesize popoverController, popupMenu, helpPage, loadingIndicator, confirmButton, grenadeTimeSegment, cachedGrenadeTime;
    39 
    36 
    40 #pragma mark -
    37 #pragma mark -
    41 #pragma mark rotation
    38 #pragma mark rotation
    42 
    39 
    43 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
    40 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
    49 -(id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    46 -(id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    50     if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
    47     if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
    51         isAttacking = NO;
    48         isAttacking = NO;
    52         isPopoverVisible = NO;
    49         isPopoverVisible = NO;
    53         loadingIndicator = nil;
    50         loadingIndicator = nil;
    54         mainOverlay = self;
       
    55     }
    51     }
    56     return self;
    52     return self;
    57 }
       
    58 
       
    59 +(OverlayViewController *)mainOverlay {
       
    60     return mainOverlay;
       
    61 }
    53 }
    62 
    54 
    63 -(void) viewDidLoad {
    55 -(void) viewDidLoad {
    64     // fill all the screen available as sdlview disables autoresizing
    56     // fill all the screen available as sdlview disables autoresizing
    65     self.view.frame = [[UIScreen mainScreen] safeBounds];
    57     self.view.frame = [[UIScreen mainScreen] safeBounds];
    94                                              selector:@selector(unsetPreciseStatus)
    86                                              selector:@selector(unsetPreciseStatus)
    95                                                object:nil];
    87                                                object:nil];
    96 
    88 
    97     // only objects initialized in viewDidLoad should be here
    89     // only objects initialized in viewDidLoad should be here
    98     dimTimer = nil;
    90     dimTimer = nil;
    99     mainOverlay = nil;
       
   100     self.helpPage = nil;
    91     self.helpPage = nil;
   101     [self dismissPopover];
    92     [self dismissPopover];
   102     self.popoverController = nil;
    93     self.popoverController = nil;
   103     self.loadingIndicator = nil;
    94     self.loadingIndicator = nil;
   104     MSG_DIDUNLOAD();
    95     MSG_DIDUNLOAD();
   151 -(void) activateOverlay {
   142 -(void) activateOverlay {
   152     self.view.alpha = 1;
   143     self.view.alpha = 1;
   153     doNotDim();
   144     doNotDim();
   154 }
   145 }
   155 
   146 
   156 -(void) removeOverlay {
   147 -(void) clearOverlay {
   157     [self.popupMenu performSelectorOnMainThread:@selector(dismiss) withObject:nil waitUntilDone:YES];
   148     [UIView beginAnimations:@"remove button" context:NULL];
   158     [self.popoverController performSelectorOnMainThread:@selector(dismissPopoverAnimated:) withObject:nil waitUntilDone:YES];
   149     [UIView setAnimationDuration:ANIMATION_DURATION];
   159     [self.view performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:YES];
   150     self.confirmButton.alpha = 0;
   160     [self performSelectorOnMainThread:@selector(release) withObject:nil waitUntilDone:YES];
   151     self.grenadeTimeSegment.alpha = 0;
   161     mainOverlay = nil;
   152     [UIView commitAnimations];
       
   153 
       
   154     if (self.confirmButton)
       
   155         [self.confirmButton performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:ANIMATION_DURATION];
       
   156     if (self.grenadeTimeSegment)
       
   157         [self.grenadeTimeSegment performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:ANIMATION_DURATION];
   162 }
   158 }
   163 
   159 
   164 #pragma mark -
   160 #pragma mark -
   165 #pragma mark overlay user interaction
   161 #pragma mark overlay user interaction
   166 // dim the overlay when there's no more input for a certain amount of time
   162 // dim the overlay when there's no more input for a certain amount of time
   235             HW_backjump();
   231             HW_backjump();
   236             break;
   232             break;
   237         case 10:
   233         case 10:
   238             [AudioManagerController playClickSound];
   234             [AudioManagerController playClickSound];
   239             HW_pause();
   235             HW_pause();
   240             clearView();
   236             [self clearOverlay];
   241             [self showPopover];
   237             [self showPopover];
   242             break;
   238             break;
   243         case 11:
   239         case 11:
   244             [AudioManagerController playClickSound];
   240             [AudioManagerController playClickSound];
   245             clearView();
   241             [self clearOverlay];
   246             HW_ammoMenu();
   242             HW_ammoMenu();
   247             break;
   243             break;
   248         default:
   244         default:
   249             DLog(@"Nope");
   245             DLog(@"Nope");
   250             break;
   246             break;
   254 -(void) unsetPreciseStatus {
   250 -(void) unsetPreciseStatus {
   255     HW_preciseSet(NO);
   251     HW_preciseSet(NO);
   256 }
   252 }
   257 
   253 
   258 -(void) sendHWClick {
   254 -(void) sendHWClick {
       
   255     [self clearOverlay];
   259     HW_click();
   256     HW_click();
   260     clearView();
       
   261     doDim();
   257     doDim();
   262 }
   258 }
   263 
   259 
   264 -(void) setGrenadeTime:(id) sender {
   260 -(void) setGrenadeTime:(id) sender {
   265     UISegmentedControl *theSegment = (UISegmentedControl *)sender;
   261     UISegmentedControl *theSegment = (UISegmentedControl *)sender;
   266     if ([ObjcExports grenadeTime] != theSegment.selectedSegmentIndex) {
   262     NSInteger timeIndex = theSegment.selectedSegmentIndex;
   267         HW_setGrenadeTime(theSegment.selectedSegmentIndex + 1);
   263     if (self.cachedGrenadeTime != timeIndex) {
   268         [ObjcExports setGrenadeTime:theSegment.selectedSegmentIndex];
   264         HW_setGrenadeTime(timeIndex + 1);
       
   265         self.cachedGrenadeTime = timeIndex;
   269     }
   266     }
   270 }
   267 }
   271 
   268 
   272 #pragma mark -
   269 #pragma mark -
   273 #pragma mark in-game menu and help page
   270 #pragma mark in-game menu and help page
   422                     // keep the overlay active, or the button will fade
   419                     // keep the overlay active, or the button will fade
   423                     [self activateOverlay];
   420                     [self activateOverlay];
   424                     doNotDim();
   421                     doNotDim();
   425                 } else
   422                 } else
   426                     if (HW_isWeaponTimerable()) {
   423                     if (HW_isWeaponTimerable()) {
   427                         if (self.grenadeTimeSegment.tag != 0) {
   424                         if (self.grenadeTimeSegment.superview != nil) {
   428                             [UIView beginAnimations:@"removing segmented control" context:NULL];
   425                             [UIView beginAnimations:@"removing segmented control" context:NULL];
   429                             [UIView setAnimationDuration:ANIMATION_DURATION];
   426                             [UIView setAnimationDuration:ANIMATION_DURATION];
   430                             self.grenadeTimeSegment.alpha = 0;
   427                             self.grenadeTimeSegment.alpha = 0;
   431                             [UIView commitAnimations];
   428                             [UIView commitAnimations];
   432 
   429 
   433                             [self.grenadeTimeSegment performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:ANIMATION_DURATION];
   430                             [self.grenadeTimeSegment performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:ANIMATION_DURATION];
   434                             self.grenadeTimeSegment.tag = 0;
       
   435                         } else {
   431                         } else {
   436                             if (self.grenadeTimeSegment == nil) {
   432                             if (self.grenadeTimeSegment == nil) {
   437                                 NSArray *items = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5",nil];
   433                                 NSArray *items = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5",nil];
   438                                 UISegmentedControl *grenadeSegment = [[UISegmentedControl alloc] initWithItems:items];
   434                                 UISegmentedControl *grenadeSegment = [[UISegmentedControl alloc] initWithItems:items];
   439                                 [items release];
   435                                 [items release];
   440                                 [grenadeSegment addTarget:self action:@selector(setGrenadeTime:) forControlEvents:UIControlEventValueChanged];
   436                                 [grenadeSegment addTarget:self action:@selector(setGrenadeTime:) forControlEvents:UIControlEventValueChanged];
   441                                 self.grenadeTimeSegment = grenadeSegment;
   437                                 self.grenadeTimeSegment = grenadeSegment;
   442                                 [grenadeSegment release];
   438                                 [grenadeSegment release];
   443                             }
   439                             }
   444                             self.grenadeTimeSegment.frame = CGRectMake(screen.size.height / 2 - 125, screen.size.width, 250, 50);
   440                             self.grenadeTimeSegment.frame = CGRectMake(screen.size.width / 2 - 125, screen.size.height, 250, 50);
   445                             self.grenadeTimeSegment.selectedSegmentIndex = [ObjcExports grenadeTime];
   441                             self.grenadeTimeSegment.selectedSegmentIndex = self.cachedGrenadeTime;
   446                             self.grenadeTimeSegment.alpha = 1;
   442                             self.grenadeTimeSegment.alpha = 1;
       
   443                             self.grenadeTimeSegment.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin |
       
   444                                                                        UIViewAutoresizingFlexibleRightMargin |
       
   445                                                                        UIViewAutoresizingFlexibleTopMargin;
   447                             [self.view addSubview:self.grenadeTimeSegment];
   446                             [self.view addSubview:self.grenadeTimeSegment];
   448 
   447 
   449                             [UIView beginAnimations:@"inserting segmented control" context:NULL];
   448                             [UIView beginAnimations:@"inserting segmented control" context:NULL];
   450                             [UIView setAnimationDuration:ANIMATION_DURATION];
   449                             [UIView setAnimationDuration:ANIMATION_DURATION];
   451                             [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
   450                             [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
   452                             self.grenadeTimeSegment.frame = CGRectMake(screen.size.height / 2 - 125, screen.size.width - 100, 250, 50);
   451                             self.grenadeTimeSegment.frame = CGRectMake(screen.size.width / 2 - 125, screen.size.height - 100, 250, 50);
   453                             [UIView commitAnimations];
   452                             [UIView commitAnimations];
   454 
   453 
   455                             self.grenadeTimeSegment.tag++;
       
   456                             [self activateOverlay];
   454                             [self activateOverlay];
   457                             doNotDim();
   455                             doNotDim();
   458                         }
   456                         }
   459                     } else
   457                     } else
   460                         if (HW_isWeaponSwitch())
   458                         if (HW_isWeaponSwitch())