# HG changeset patch # User koda # Date 1277519764 -7200 # Node ID d4de36b3801a7a8e02a1709867f0cdd12dbb70a6 # Parent 149416b948fce9ee8f1ca9d6c68d0fdeaae740c3 moar zoom, fixed fort mode, other glitches but best of all, touch works fo' real diff -r 149416b948fc -r d4de36b3801a hedgewars/CCHandlers.inc --- a/hedgewars/CCHandlers.inc Thu Jun 24 01:08:57 2010 +0200 +++ b/hedgewars/CCHandlers.inc Sat Jun 26 04:36:04 2010 +0200 @@ -815,7 +815,11 @@ procedure chZoomOut(var s: shortstring); begin s:= s; // avoid compiler hint +{$IFDEF IPHONEOS} + if ZoomValue > 0.5 then +{$ELSE} if ZoomValue > 1.0 then +{$ENDIF} ZoomValue:= ZoomValue - 0.20; end; diff -r 149416b948fc -r d4de36b3801a hedgewars/PascalExports.pas --- a/hedgewars/PascalExports.pas Thu Jun 24 01:08:57 2010 +0200 +++ b/hedgewars/PascalExports.pas Sat Jun 26 04:36:04 2010 +0200 @@ -13,7 +13,7 @@ unit PascalExports; interface -uses uKeys, GLunit, uWorld, hwengine; +uses uKeys, GLunit, uWorld, uMisc, uConsole, hwengine; {$INCLUDE "config.inc"} @@ -152,6 +152,17 @@ cOffsetY:= 120; end; end; + +procedure HW_setCursor(x,y: LongInt); cdecl; export; +begin + CursorPoint.X:= x; + CursorPoint.Y:= y; +end; + +function HW_isAmmoOpen:boolean; cdecl; export; +begin + exit(bShowAmmoMenu); +end; {$ENDIF} end. diff -r 149416b948fc -r d4de36b3801a hedgewars/uLand.pas --- a/hedgewars/uLand.pas Thu Jun 24 01:08:57 2010 +0200 +++ b/hedgewars/uLand.pas Sat Jun 26 04:36:04 2010 +0200 @@ -1220,6 +1220,10 @@ LoadThemeConfig; isMap:= false; + + if ((GameFlags and gfForts) <> 0) or (Pathz[ptMapCurrent] <> '') then + FillChar(Land,SizeOf(TCollisionArray),0); + if (GameFlags and gfForts) = 0 then if Pathz[ptMapCurrent] <> '' then LoadMap diff -r 149416b948fc -r d4de36b3801a hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Thu Jun 24 01:08:57 2010 +0200 +++ b/hedgewars/uWorld.pas Sat Jun 26 04:36:04 2010 +0200 @@ -1007,12 +1007,14 @@ const PrevSentPointTime: LongWord = 0; var EdgesDist, wdy: LongInt; begin +{$IFNDEF IPHONEOS} if (not (CurrentTeam^.ExtDriven and isCursorVisible and not bShowAmmoMenu)) and cHasFocus then - begin +begin SDL_GetMouseState(@CursorPoint.X, @CursorPoint.Y); CursorPoint.X:= CursorPoint.X - (cScreenWidth shr 1); CursorPoint.Y:= cScreenHeight - CursorPoint.Y; - end; +end; +{$ENDIF} if (not PlacingHogs) and (FollowGear <> nil) and (not isCursorVisible) and (not fastUntilLag) then if abs(CursorPoint.X - prevPoint.X) + abs(CursorPoint.Y - prevpoint.Y) > 4 then diff -r 149416b948fc -r d4de36b3801a project_files/HedgewarsMobile/Classes/CGPointUtils.h --- a/project_files/HedgewarsMobile/Classes/CGPointUtils.h Thu Jun 24 01:08:57 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/CGPointUtils.h Sat Jun 26 04:36:04 2010 +0200 @@ -9,9 +9,12 @@ #import -#define degreesToRadian(x) (M_PI * x / 180.0) +#define degreesToRadian(x) (M_PI * x / 180.0) #define radiansToDegrees(x) (180.0 * x / M_PI) +#define HWX(x) (int)(x-screen.size.height/2) +#define HWY(x) (int)(screen.size.width-x) + CGFloat distanceBetweenPoints (CGPoint first, CGPoint second); CGFloat angleBetweenPoints(CGPoint first, CGPoint second); CGFloat angleBetweenLines(CGPoint line1Start, CGPoint line1End, CGPoint line2Start, CGPoint lin2End); diff -r 149416b948fc -r d4de36b3801a project_files/HedgewarsMobile/Classes/CommodityFunctions.m --- a/project_files/HedgewarsMobile/Classes/CommodityFunctions.m Thu Jun 24 01:08:57 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/CommodityFunctions.m Sat Jun 26 04:36:04 2010 +0200 @@ -113,11 +113,8 @@ } BOOL rotationManager (UIInterfaceOrientation interfaceOrientation) { - if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) - return YES; - else - return (interfaceOrientation == UIInterfaceOrientationLandscapeRight) || - (interfaceOrientation == UIInterfaceOrientationLandscapeLeft); + return (interfaceOrientation == UIInterfaceOrientationLandscapeRight) || + (interfaceOrientation == UIInterfaceOrientationLandscapeLeft); } NSInteger randomPort () { diff -r 149416b948fc -r d4de36b3801a project_files/HedgewarsMobile/Classes/GameSetup.m --- a/project_files/HedgewarsMobile/Classes/GameSetup.m Thu Jun 24 01:08:57 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/GameSetup.m Sat Jun 26 04:36:04 2010 +0200 @@ -306,7 +306,7 @@ break; case '?': // without this sleep sometimes frontend replies before engine has processed any flag (resulting in an error) - [NSThread sleepForTimeInterval:0.4]; + [NSThread sleepForTimeInterval:0.6]; DLog(@"Ping? Pong!"); [self sendToEngine:@"!"]; break; diff -r 149416b948fc -r d4de36b3801a project_files/HedgewarsMobile/Classes/OverlayViewController.h --- a/project_files/HedgewarsMobile/Classes/OverlayViewController.h Thu Jun 24 01:08:57 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/OverlayViewController.h Sat Jun 26 04:36:04 2010 +0200 @@ -22,7 +22,6 @@ UITextField *writeChatTextField; CGFloat initialDistanceForPinching; - CGPoint gestureStartPoint; UIActivityIndicatorView *spinningWheel; } diff -r 149416b948fc -r d4de36b3801a project_files/HedgewarsMobile/Classes/OverlayViewController.m --- a/project_files/HedgewarsMobile/Classes/OverlayViewController.m Thu Jun 24 01:08:57 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/OverlayViewController.m Sat Jun 26 04:36:04 2010 +0200 @@ -57,6 +57,7 @@ [self chatDisappear]; HW_setLandscape(YES); break; + /* case UIDeviceOrientationPortrait: if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { sdlView.transform = CGAffineTransformMakeRotation(degreesToRadian(270)); @@ -73,6 +74,7 @@ HW_setLandscape(NO); } break; + */ default: break; } @@ -242,7 +244,6 @@ // on iphone instead just use the tableViewController directly (and implement manually all animations) -(IBAction) showPopover{ isPopoverVisible = YES; - CGRect anchorForPopover; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { if (popupMenu == nil) @@ -252,13 +253,8 @@ [popoverController setPopoverContentSize:CGSizeMake(220, 170) animated:YES]; [popoverController setPassthroughViews:[NSArray arrayWithObject:self.view]]; } - - if (UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation])) - anchorForPopover = CGRectMake(960, 0, 220, 32); - else - anchorForPopover = CGRectMake(736, 0, 220, 32); - - [popoverController presentPopoverFromRect:anchorForPopover + + [popoverController presentPopoverFromRect:CGRectMake(1000, 0, 220, 32) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; @@ -303,11 +299,8 @@ // this function is called by pascal FinishProgress and removes the spinning wheel when loading is done void spinningWheelDone (void) { - [UIView beginAnimations:@"hiding spinning wheel" context:NULL]; - [UIView setAnimationDuration:0.7]; - singleton.alpha = 0; - [UIView commitAnimations]; - [singleton performSelector:@selector(stopAnimating) withObject:nil afterDelay:0.7]; + [singleton stopAnimating]; + singleton = nil; canDim = YES; } @@ -316,6 +309,8 @@ -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSArray *twoTouches; UITouch *touch = [touches anyObject]; + CGRect screen = [[UIScreen mainScreen] bounds]; + CGPoint currentPosition = [touch locationInView:self.view]; if (isPopoverVisible) { [self dismissPopover]; @@ -324,33 +319,19 @@ [self.writeChatTextField resignFirstResponder]; [dimTimer setFireDate:HIDING_TIME_DEFAULT]; } - - gestureStartPoint = [touch locationInView:self.view]; - + switch ([touches count]) { - /*case 1: - initialDistanceForPinching = 0; - switch ([touch tapCount]) { - case 1: - NSLog(@"X:%d Y:%d", (int)gestureStartPoint.x, (int)gestureStartPoint.y ); - //SDL_WarpMouseInWindow([SDLUIKitDelegate sharedAppDelegate].window, - // (int)gestureStartPoint.y, width - (int)gestureStartPoint.x); - //HW_click(); - break; - case 2: - HW_ammoMenu(); - break; - default: - break; - } - break;*/ + case 1: + DLog(@"X:%d Y:%d", HWX(currentPosition.x), HWY(currentPosition.y)); + HW_setCursor(HWX(currentPosition.x), HWY(currentPosition.y)); + break; case 2: - if (2 == [touch tapCount]) { - HW_zoomReset(); + if (2 == [touch tapCount] && currentPosition.y < screen.size.width - 100) { + HW_ammoMenu(); + //HW_zoomReset(); } // pinching - gestureStartPoint = CGPointMake(0, 0); twoTouches = [touches allObjects]; UITouch *first = [twoTouches objectAtIndex:0]; UITouch *second = [twoTouches objectAtIndex:1]; @@ -363,9 +344,9 @@ } -(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { - gestureStartPoint = CGPointMake(0, 0); initialDistanceForPinching = 0; //HW_allKeysUp(); + HW_click(); } -(void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { @@ -374,48 +355,20 @@ } -(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { - CGFloat minimumGestureLength; - int logCoeff; - - if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { - minimumGestureLength = 5.0f; - logCoeff = 19; - } else { - minimumGestureLength = 3.0f; - logCoeff = 3; - } + CGRect screen = [[UIScreen mainScreen] bounds]; NSArray *twoTouches; CGPoint currentPosition; UITouch *touch = [touches anyObject]; switch ([touches count]) { - /*case 1: - currentPosition = [touch locationInView:self.view]; - // panning - CGFloat deltaX = fabsf(gestureStartPoint.x - currentPosition.x); - CGFloat deltaY = fabsf(gestureStartPoint.y - currentPosition.y); - - // the two ifs are not mutually exclusive - if (deltaX >= minimumGestureLength) { - DLog(@"deltaX: %f deltaY: %f", deltaX, deltaY); - if (currentPosition.x > gestureStartPoint.x) { - HW_cursorLeft(logCoeff*log(deltaX)); - } else { - HW_cursorRight(logCoeff*log(deltaX)); - } - - } - if (deltaY >= minimumGestureLength) { - DLog(@"deltaX: %f deltaY: %f", deltaX, deltaY); - if (currentPosition.y < gestureStartPoint.y) { - HW_cursorDown(logCoeff*log(deltaY)); - } else { - HW_cursorUp(logCoeff*log(deltaY)); - } + case 1: + if (HW_isAmmoOpen()) { + currentPosition = [touch locationInView:self.view]; + DLog(@"X:%d Y:%d", HWX(currentPosition.x), HWY(currentPosition.y)); + HW_setCursor(HWX(currentPosition.x), HWY(currentPosition.y)); } - - break;*/ + break; case 2: twoTouches = [touches allObjects]; UITouch *first = [twoTouches objectAtIndex:0]; diff -r 149416b948fc -r d4de36b3801a project_files/HedgewarsMobile/Classes/PascalImports.h --- a/project_files/HedgewarsMobile/Classes/PascalImports.h Thu Jun 24 01:08:57 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/PascalImports.h Sat Jun 26 04:36:04 2010 +0200 @@ -52,6 +52,8 @@ void HW_terminate(BOOL); void HW_setLandscape(BOOL); + void HW_setCursor(int x, int y); + BOOL HW_isAmmoOpen(void); #ifdef __cplusplus } #endif diff -r 149416b948fc -r d4de36b3801a project_files/HedgewarsMobile/Classes/TeamConfigViewController.h --- a/project_files/HedgewarsMobile/Classes/TeamConfigViewController.h Thu Jun 24 01:08:57 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/TeamConfigViewController.h Sat Jun 26 04:36:04 2010 +0200 @@ -12,6 +12,7 @@ @interface TeamConfigViewController : UITableViewController { NSMutableArray *listOfTeams; NSMutableArray *listOfSelectedTeams; + BOOL isFirstLoad; } @property (nonatomic, retain) NSMutableArray *listOfTeams; diff -r 149416b948fc -r d4de36b3801a project_files/HedgewarsMobile/Classes/TeamConfigViewController.m --- a/project_files/HedgewarsMobile/Classes/TeamConfigViewController.m Thu Jun 24 01:08:57 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/TeamConfigViewController.m Sat Jun 26 04:36:04 2010 +0200 @@ -25,30 +25,34 @@ CGSize screenSize = [[UIScreen mainScreen] bounds].size; self.view.frame = CGRectMake(0, 0, screenSize.height, screenSize.width - 44); + isFirstLoad = YES; } -(void) viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - // integer representation of various color (defined in SquareButtonView) - NSUInteger colors[6] = { 4421353, 4100897, 10632635, 16749353, 14483456, 7566195 }; - NSArray *contentsOfDir = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:TEAMS_DIRECTORY() error:NULL]; - NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:[contentsOfDir count]]; - for (int i = 0; i < [contentsOfDir count]; i++) { - NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithObjectsAndKeys: - [contentsOfDir objectAtIndex:i],@"team", - [NSNumber numberWithInt:4],@"number", - [NSNumber numberWithInt:colors[i%6]],@"color",nil]; - [array addObject:dict]; - [dict release]; + // avoid overwriting selected teams when returning on this view + if (isFirstLoad) { + // integer representation of various color (defined in SquareButtonView) + NSUInteger colors[6] = { 4421353, 4100897, 10632635, 16749353, 14483456, 7566195 }; + NSArray *contentsOfDir = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:TEAMS_DIRECTORY() error:NULL]; + NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:[contentsOfDir count]]; + for (int i = 0; i < [contentsOfDir count]; i++) { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithObjectsAndKeys: + [contentsOfDir objectAtIndex:i],@"team", + [NSNumber numberWithInt:4],@"number", + [NSNumber numberWithInt:colors[i%6]],@"color",nil]; + [array addObject:dict]; + [dict release]; + } + self.listOfTeams = array; + [array release]; + + NSMutableArray *emptyArray = [[NSMutableArray alloc] initWithObjects:nil]; + self.listOfSelectedTeams = emptyArray; + [emptyArray release]; + isFirstLoad = NO; } - self.listOfTeams = array; - [array release]; - - NSMutableArray *emptyArray = [[NSMutableArray alloc] initWithObjects:nil]; - self.listOfSelectedTeams = emptyArray; - [emptyArray release]; - [self.tableView reloadData]; } diff -r 149416b948fc -r d4de36b3801a project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj --- a/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj Thu Jun 24 01:08:57 2010 +0200 +++ b/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj Sat Jun 26 04:36:04 2010 +0200 @@ -1187,7 +1187,7 @@ 6137064B117B1CB3004EE44A /* Distribution */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)"; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; CODE_SIGN_ENTITLEMENTS = "Entitlements-Distribution.plist"; CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; @@ -1298,7 +1298,7 @@ 6164429D11B5CDE500B9A6F3 /* Valgrind */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)"; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; CODE_SIGN_IDENTITY = "iPhone Developer: Vittorio Giovara (DC2BRETXAC)"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Vittorio Giovara (DC2BRETXAC)"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -1501,7 +1501,7 @@ C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)"; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; CODE_SIGN_IDENTITY = "iPhone Developer: Vittorio Giovara (DC2BRETXAC)"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Vittorio Giovara (DC2BRETXAC)"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -1541,7 +1541,7 @@ C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)"; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; FPC_COMMON_OPTIONS = "-dIPHONEOS -Cs2000000 -vwi -B -Sgix";