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 { |
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 |
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()) |