# HG changeset patch # User koda # Date 1278891763 -7200 # Node ID b5cdbcc89b61c4345a8735b2f1e0484c2b9ff101 # Parent 33ee433749ba974f864566e2a6d3a656ba2a8ef3 use a button instead of label and simplify a lot touch interaction diff -r 33ee433749ba -r b5cdbcc89b61 hedgewars/CCHandlers.inc --- a/hedgewars/CCHandlers.inc Sun Jul 11 18:39:01 2010 +0200 +++ b/hedgewars/CCHandlers.inc Mon Jul 12 01:42:43 2010 +0200 @@ -439,13 +439,22 @@ Message:= Message or gm_Switch end; +{$IFDEF IPHONEOS} +procedure clearView; cdecl; external; +{$ENDIF} + procedure chNextTurn(var s: shortstring); begin -s:= s; // avoid compiler hint -TryDo(AllInactive, '/nextturn called when not all gears are inactive', true); + s:= s; // avoid compiler hint + TryDo(AllInactive, '/nextturn called when not all gears are inactive', true); -if not CurrentTeam^.ExtDriven then SendIPC('N'); -{$IFDEF DEBUGFILE}AddFileLog('Doing SwitchHedgehog: time '+inttostr(GameTicks));{$ENDIF} + if not CurrentTeam^.ExtDriven then SendIPC('N'); +{$IFDEF DEBUGFILE} + AddFileLog('Doing SwitchHedgehog: time '+inttostr(GameTicks)); +{$ENDIF} +{$IFDEF IPHONEOS} + clearView(); +{$ENDIF} end; procedure chSay(var s: shortstring); diff -r 33ee433749ba -r b5cdbcc89b61 project_files/HedgewarsMobile/Classes/OverlayViewController.h --- a/project_files/HedgewarsMobile/Classes/OverlayViewController.h Sun Jul 11 18:39:01 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/OverlayViewController.h Mon Jul 12 01:42:43 2010 +0200 @@ -9,7 +9,8 @@ #import #define CONFIRMATION_TAG 5959 -#define removeConfirmationInput() [[self.view viewWithTag:CONFIRMATION_TAG] removeFromSuperview] +#define ANIMATION_DURATION 0.25 +#define removeConfirmationInput() [[self.view viewWithTag:CONFIRMATION_TAG] removeFromSuperview]; @class PopoverMenuViewController; @@ -22,10 +23,7 @@ PopoverMenuViewController *popupMenu; BOOL isPopoverVisible; - // touch section - BOOL isSingleClick; CGFloat initialDistanceForPinching; - CGPoint pointWhereToClick; } @property (nonatomic,retain) id popoverController; diff -r 33ee433749ba -r b5cdbcc89b61 project_files/HedgewarsMobile/Classes/OverlayViewController.m --- a/project_files/HedgewarsMobile/Classes/OverlayViewController.m Sun Jul 11 18:39:01 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/OverlayViewController.m Mon Jul 12 01:42:43 2010 +0200 @@ -340,7 +340,7 @@ #pragma mark Custom touch event handling -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSSet *allTouches = [event allTouches]; - UITouch *touch, *first, *second; + UITouch *first, *second; if (isPopoverVisible) { [self dismissPopover]; @@ -353,18 +353,9 @@ */ switch ([allTouches count]) { - case 1: - touch = [[allTouches allObjects] objectAtIndex:0]; - CGPoint currentPosition = [touch locationInView:self.view]; - - //DLog(@"X:%d Y:%d", HWX(currentPosition.x), HWY(currentPosition.y)); - // this is a single touch/tap - isSingleClick = YES; - // save were the click event will take place - pointWhereToClick = currentPosition; - + case 1: removeConfirmationInput(); - if (2 == [touch tapCount]) + if (2 == [[[allTouches allObjects] objectAtIndex:0] tapCount]) HW_zoomReset(); break; case 2: @@ -383,49 +374,51 @@ -(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { CGRect screen = [[UIScreen mainScreen] bounds]; NSSet *allTouches = [event allTouches]; - UITouch *touch; + CGPoint currentPosition = [[[allTouches allObjects] objectAtIndex:0] locationInView:self.view]; switch ([allTouches count]) { case 1: + // if we're in the menu we just click in the point if (HW_isAmmoOpen()) { - // if we're in the menu we just click in the point - HW_setCursor(HWX(pointWhereToClick.x), HWY(pointWhereToClick.y)); + HW_setCursor(HWX(currentPosition.x), HWY(currentPosition.y)); + // this click doesn't need any wrapping because the ammoMenu already limits the cursor HW_click(); } else - if (isSingleClick) { - // if they tapped in the screen we trick the system so that camera doesn't move - HW_saveCursor(FALSE); - HW_setCursor(HWX(pointWhereToClick.x), HWY(pointWhereToClick.y)); - HW_click(); - HW_saveCursor(TRUE); + // if weapon requires a further click, ask for tapping again + if (HW_isWeaponRequiringClick()) { + // here don't have to wrap thanks to isCursorVisible magic + HW_setCursor(HWX(currentPosition.x), HWY(currentPosition.y)); - // and remove the label (if any) - removeConfirmationInput(); - } else { - // if weapon requires a further click, ask for tapping again - if (HW_isWeaponRequiringClick()) { - touch = [[allTouches allObjects] objectAtIndex:0]; - CGPoint currentPosition = [touch locationInView:self.view]; - UILabel *tapAgain = [[UILabel alloc] initWithFrame:CGRectMake(currentPosition.x-100, currentPosition.y + 10, 200, 25)]; - tapAgain.text = NSLocalizedString(@"Tap again to confirm",@"from the overlay"); - tapAgain.backgroundColor = [UIColor clearColor]; - tapAgain.tag = CONFIRMATION_TAG; - tapAgain.textColor = [UIColor blueColor]; - tapAgain.textAlignment = UITextAlignmentCenter; - tapAgain.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]]; - [self.view addSubview:tapAgain]; - [tapAgain release]; - } + // draw the button at the last touched point (which is the current position) + UIButton *tapAgain = [UIButton buttonWithType:UIButtonTypeRoundedRect]; + tapAgain.frame = CGRectMake(currentPosition.x - 90, currentPosition.y + 15, 180, 30); + tapAgain.tag = CONFIRMATION_TAG; + tapAgain.alpha = 0; + [tapAgain addTarget:self action:@selector(sendHWClick) forControlEvents:UIControlEventTouchUpInside]; + [tapAgain setTitle:NSLocalizedString(@"Tap again to confirm",@"from the overlay") forState:UIControlStateNormal]; + [self.view addSubview:tapAgain]; + + // animation ftw! + [UIView beginAnimations:@"inserting button" context:NULL]; + [UIView setAnimationDuration:ANIMATION_DURATION]; + [self.view viewWithTag:CONFIRMATION_TAG].alpha = 1; + [UIView commitAnimations]; } break; case 2: HW_allKeysUp(); break; + default: + DLog(@"too many touches"); + break; } - pointWhereToClick = CGPointZero; initialDistanceForPinching = 0; - isSingleClick = NO; +} + +-(void) sendHWClick { + HW_click(); + removeConfirmationInput(); } -(void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { @@ -442,11 +435,9 @@ case 1: touch = [[allTouches allObjects] objectAtIndex:0]; CGPoint currentPosition = [touch locationInView:self.view]; - isSingleClick = NO; + if (HW_isAmmoOpen()) { - // saves the point on which to select the ammo - pointWhereToClick = currentPosition; - // moves the cursor over + // moves the cursor around HW_setCursor(HWX(currentPosition.x), HWY(currentPosition.y)); } else { DLog(@"x: %f y: %f -> X:%d Y:%d", currentPosition.x, currentPosition.y, HWX(currentPosition.x), HWY(currentPosition.y)); @@ -477,6 +468,7 @@ } } + // called from AddProgress and FinishProgress (respectively) void startSpinning() { isGameRunning = NO; @@ -496,4 +488,14 @@ isGameRunning = YES; } +void clearView() { + UIWindow *theWindow = [[UIApplication sharedApplication] keyWindow]; + UIButton *theButton = (UIButton *)[theWindow viewWithTag:CONFIRMATION_TAG]; + [UIView beginAnimations:@"remove button" context:NULL]; + [UIView setAnimationDuration:ANIMATION_DURATION]; + theButton.alpha = 0; + [UIView commitAnimations]; + [theWindow performSelector:@selector(removeFromSuperview) withObject:theButton afterDelay:0.3]; +} + @end diff -r 33ee433749ba -r b5cdbcc89b61 project_files/HedgewarsMobile/Classes/PascalImports.h --- a/project_files/HedgewarsMobile/Classes/PascalImports.h Sun Jul 11 18:39:01 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/PascalImports.h Mon Jul 12 01:42:43 2010 +0200 @@ -25,6 +25,7 @@ void HW_versionInfo(short int*, char**); void HW_click(void); + void HW_zoomIn(void); void HW_zoomOut(void); void HW_zoomReset(void); diff -r 33ee433749ba -r b5cdbcc89b61 project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj --- a/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj Sun Jul 11 18:39:01 2010 +0200 +++ b/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj Mon Jul 12 01:42:43 2010 +0200 @@ -94,7 +94,6 @@ 61798829114AA34C00BA94A9 /* uGame.pas in Sources */ = {isa = PBXBuildFile; fileRef = 617987FB114AA34C00BA94A9 /* uGame.pas */; }; 6179882A114AA34C00BA94A9 /* uGears.pas in Sources */ = {isa = PBXBuildFile; fileRef = 617987FC114AA34C00BA94A9 /* uGears.pas */; }; 6179882B114AA34C00BA94A9 /* uIO.pas in Sources */ = {isa = PBXBuildFile; fileRef = 617987FD114AA34C00BA94A9 /* uIO.pas */; }; - 6179882C114AA34C00BA94A9 /* uKeys.pas in Sources */ = {isa = PBXBuildFile; fileRef = 617987FE114AA34C00BA94A9 /* uKeys.pas */; }; 6179882D114AA34C00BA94A9 /* uLand.pas in Sources */ = {isa = PBXBuildFile; fileRef = 617987FF114AA34C00BA94A9 /* uLand.pas */; }; 6179882E114AA34C00BA94A9 /* uLandGraphics.pas in Sources */ = {isa = PBXBuildFile; fileRef = 61798800114AA34C00BA94A9 /* uLandGraphics.pas */; }; 6179882F114AA34C00BA94A9 /* uLandObjects.pas in Sources */ = {isa = PBXBuildFile; fileRef = 61798801114AA34C00BA94A9 /* uLandObjects.pas */; }; @@ -122,6 +121,7 @@ 619C09EA11E8B8D600F1DF16 /* title_small.png in Resources */ = {isa = PBXBuildFile; fileRef = 619C09E911E8B8D600F1DF16 /* title_small.png */; }; 61A1188511683A8C00359010 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 61A117FE1168322700359010 /* CoreGraphics.framework */; }; 61A118D311683CD100359010 /* HedgewarsTitle.png in Resources */ = {isa = PBXBuildFile; fileRef = 611FD9CB1155A28C00C2203D /* HedgewarsTitle.png */; }; + 61B3D71C11EA6F2700EC7420 /* uKeys.pas in Sources */ = {isa = PBXBuildFile; fileRef = 617987FE114AA34C00BA94A9 /* uKeys.pas */; }; 61C3255B1179A384001E70B1 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 61C3255A1179A384001E70B1 /* OpenAL.framework */; }; 61C325901179A732001E70B1 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 61C3255A1179A384001E70B1 /* OpenAL.framework */; }; 61C325A31179A7AD001E70B1 /* libopenalbridge.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 61C3251D1179A300001E70B1 /* libopenalbridge.a */; }; @@ -1131,7 +1131,6 @@ 61798829114AA34C00BA94A9 /* uGame.pas in Sources */, 6179882A114AA34C00BA94A9 /* uGears.pas in Sources */, 6179882B114AA34C00BA94A9 /* uIO.pas in Sources */, - 6179882C114AA34C00BA94A9 /* uKeys.pas in Sources */, 6179882D114AA34C00BA94A9 /* uLand.pas in Sources */, 6179882E114AA34C00BA94A9 /* uLandGraphics.pas in Sources */, 6179882F114AA34C00BA94A9 /* uLandObjects.pas in Sources */, @@ -1179,6 +1178,7 @@ 6163EE7E11CC2600001C0453 /* SingleWeaponViewController.m in Sources */, 61E1F4F811D004240016A5AA /* adler32.pas in Sources */, 61F904D711DF7DA30068B24D /* WeaponCellView.m in Sources */, + 61B3D71C11EA6F2700EC7420 /* uKeys.pas in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };