project_files/HedgewarsMobile/Classes/OverlayViewController.m
changeset 3904 22e4d74240e5
parent 3829 81db3c85784b
child 3906 c5da430cb3fd
--- a/project_files/HedgewarsMobile/Classes/OverlayViewController.m	Sat Sep 25 18:38:05 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/OverlayViewController.m	Sun Sep 26 03:41:08 2010 +0200
@@ -36,6 +36,7 @@
 
 #define CONFIRMATION_TAG 5959
 #define GRENADE_TAG 9595
+#define BLACKVIEW_TAG 9955
 #define ANIMATION_DURATION 0.25
 #define removeConfirmationInput()   [[self.view viewWithTag:CONFIRMATION_TAG] removeFromSuperview];
 
@@ -97,6 +98,7 @@
 #pragma mark View Management
 -(void) viewDidLoad {
     isGameRunning = NO;
+    isReplay = NO;
     cachedGrenadeTime = 2;
     isAttacking = NO;
     
@@ -212,7 +214,7 @@
 
 // dim the overlay when there's no more input for a certain amount of time
 -(IBAction) buttonReleased:(id) sender {
-    if (!isGameRunning)
+    if (isGameRunning == NO)
         return;
 
     UIButton *theButton = (UIButton *)sender;
@@ -244,15 +246,12 @@
 // issue certain action based on the tag of the button
 -(IBAction) buttonPressed:(id) sender {
     [self activateOverlay];
-    if (isPopoverVisible) {
+    
+    if (isGameRunning == NO)
+        return;
+    
+    if (isPopoverVisible)
         [self dismissPopover];
-    }
-
-    if (!isGameRunning)
-        return;
-
-    if (HW_isWaiting())
-        HW_dismissReady();
     
     UIButton *theButton = (UIButton *)sender;
     switch (theButton.tag) {
@@ -402,12 +401,11 @@
     NSSet *allTouches = [event allTouches];
     CGPoint currentPosition = [[[allTouches allObjects] objectAtIndex:0] locationInView:self.view];
 
+    if (isGameRunning == NO)
+        return;
+    
     switch ([allTouches count]) {
         case 1:
-            // this dismisses the "get ready"
-            if (HW_isWaiting())
-                HW_dismissReady();
-
             // if we're in the menu we just click in the point
             if (HW_isAmmoOpen()) {
                 HW_setCursor(HWXZ(currentPosition.x), HWYZ(currentPosition.y));
@@ -507,9 +505,11 @@
     CGRect screen = [[UIScreen mainScreen] bounds];
     NSSet *allTouches = [event allTouches];
     int x, y, dx, dy;
-
     UITouch *touch, *first, *second;
 
+    if (isGameRunning == NO)
+        return;
+    
     switch ([allTouches count]) {
         case 1:
             touch = [[allTouches allObjects] objectAtIndex:0];
@@ -562,9 +562,13 @@
 
 #pragma mark -
 #pragma mark Functions called by pascal
-// called from AddProgress and FinishProgress (respectively)
+void setGameRunning(BOOL value) {
+    isGameRunning = value;
+}
+
+// called by uStore from AddProgress
 void startSpinning() {
-    isGameRunning = NO;
+    setGameRunning(NO);
     CGRect screen = [[UIScreen mainScreen] bounds];
     UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
     indicator.tag = 987654;
@@ -575,13 +579,16 @@
     [indicator release];
 }
 
+// called by uStore from FinishProgress
 void stopSpinning() {
     UIActivityIndicatorView *indicator = (UIActivityIndicatorView *)[[[[UIApplication sharedApplication] keyWindow] viewWithTag:SDL_VIEW_TAG] viewWithTag:987654];
     [indicator stopAnimating];
-    isGameRunning = YES;
     HW_zoomSet(1.7);
+    if (isReplay == NO)
+        setGameRunning(YES);
 }
 
+// called by CCHandlers from chNextTurn
 void clearView() {
     UIWindow *theWindow = [[UIApplication sharedApplication] keyWindow];
     UIButton *theButton = (UIButton *)[theWindow viewWithTag:CONFIRMATION_TAG];
@@ -599,4 +606,34 @@
     cachedGrenadeTime = 2;
 }
 
+// called by hwengine
+void replayBegan() {
+    UIWindow *theWindow = [[UIApplication sharedApplication] keyWindow];
+    UIView *blackView = [[UIView alloc] initWithFrame:theWindow.frame];
+    blackView.backgroundColor = [UIColor blackColor];
+    blackView.alpha = 0.6;
+    blackView.tag = BLACKVIEW_TAG;
+    blackView.exclusiveTouch = NO;
+    blackView.multipleTouchEnabled = NO;
+    blackView.userInteractionEnabled = NO;
+    [theWindow addSubview:blackView];
+    [blackView release];
+    isReplay = YES;
+}
+
+// called by uGame
+void replayFinished() {
+    UIWindow *theWindow = [[UIApplication sharedApplication] keyWindow];
+    UIView *blackView = (UIView *)[theWindow viewWithTag:BLACKVIEW_TAG];
+    
+    [UIView beginAnimations:@"removing black" context:NULL];
+    [UIView setAnimationDuration:1];
+    blackView.alpha = 0;
+    [UIView commitAnimations];
+    [theWindow performSelector:@selector(removeFromSuperview) withObject:blackView afterDelay:1];
+    
+    setGameRunning(YES);
+    isReplay = NO;
+}
+
 @end