diff --git a/games/Pong/Classes/GGSNetwork.m b/games/Pong/Classes/GGSNetwork.m index fbf635f..932a734 100644 --- a/games/Pong/Classes/GGSNetwork.m +++ b/games/Pong/Classes/GGSNetwork.m @@ -11,7 +11,7 @@ @implementation GGSNetwork -#define GGS_HOST @"localhost" +#define GGS_HOST @"home.jeena.net" #define GGS_PORT 9000 #define NO_TIMEOUT -1 @@ -37,6 +37,7 @@ asyncSocket = [[AsyncSocket alloc] initWithDelegate:self]; [asyncSocket connectToHost:GGS_HOST onPort:GGS_PORT error:nil]; + [asyncSocket readDataToData:HEADER_DELIMITER withTimeout:NO_TIMEOUT tag:HEAD]; } @@ -61,12 +62,11 @@ } - (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port { - + } - (void)onSocket:(AsyncSocket *)sender didReadData:(NSData *)data withTag:(long)tag { - if (tag == HEAD) { [self parseAndSetHeader:data]; diff --git a/games/Pong/Classes/PongAppDelegate.m b/games/Pong/Classes/PongAppDelegate.m index 968396f..7ca5983 100644 --- a/games/Pong/Classes/PongAppDelegate.m +++ b/games/Pong/Classes/PongAppDelegate.m @@ -57,6 +57,7 @@ /* Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. */ + [(PongViewController *)viewController restart]; } diff --git a/games/Pong/Classes/PongViewController.h b/games/Pong/Classes/PongViewController.h index c62572d..0f8dbfb 100644 --- a/games/Pong/Classes/PongViewController.h +++ b/games/Pong/Classes/PongViewController.h @@ -9,6 +9,7 @@ #import #import "GGSDelegate.h" #import "GGSNetwork.h" +#import enum GameType { kGameTypeSinglePlayer = 0, @@ -28,6 +29,11 @@ enum GameType { IBOutlet UILabel *pointsP2; GGSNetwork *ggsNetwork; + + AVAudioPlayer *pingSound; + AVAudioPlayer *pongSound; + AVAudioPlayer *lostSound; + } @property (nonatomic, retain) IBOutlet UIView *ballView; @@ -40,6 +46,8 @@ enum GameType { @property (nonatomic, retain) GGSNetwork *ggsNetwork; +- (void)restart; + - (void)startPositions; - (void)zeroPoints; diff --git a/games/Pong/Classes/PongViewController.m b/games/Pong/Classes/PongViewController.m index 4f7a3d2..adfdc0c 100644 --- a/games/Pong/Classes/PongViewController.m +++ b/games/Pong/Classes/PongViewController.m @@ -7,7 +7,6 @@ // #import "PongViewController.h" -#import "GGSNetwork.h" @implementation PongViewController @@ -18,8 +17,8 @@ #define WIDTH 480 #define HEIGHT 320 -#define TOX(x) ( WIDTH / 100 * (x)) -#define TOY(y) ( HEIGHT / 100 * (y)) +#define TOX(x) ( 4.8 * x ) +#define TOY(y) ( 3.2 * y ) @synthesize ballView, player1View, player2View, tapToBegin, pointsP1, pointsP2, ggsNetwork; @@ -49,32 +48,90 @@ #pragma mark GGSNetwork Delegate - (void)GGSNetwork:(GGSNetwork *)_ggsNetwork ready:(BOOL)ready { - [ggsNetwork define:@"function playerCommand(user, command, args) { user.sendCommand(command, args); }"]; + [ggsNetwork sendCommand:@"ready" withArgs:@""]; } - (void)GGSNetwork:(GGSNetwork *)_ggsNetwork defined:(BOOL)defined { - if (defined) { - [ggsNetwork sendCommand:@"ready" withArgs:@""]; - } else { - NSLog(@"Not defined"); - } - + // do nothing. } - (void)GGSNetwork:(GGSNetwork *)_ggsNetwork receivedCommand:(NSString *)command withArgs:(NSString *)args { - NSLog(@"Command: %@; Args: %@", command, args); if ([command isEqualToString:@"ball"]) { NSArray *ball = [args componentsSeparatedByString:@","]; - ballView.center = CGPointMake([[ball objectAtIndex:0] intValue], [[ball objectAtIndex:1] intValue]); + [UIView beginAnimations:NULL context:NULL]; + CGFloat x = [[ball objectAtIndex:0] floatValue]; + CGFloat y = [[ball objectAtIndex:1] floatValue]; + ballView.center = CGPointMake(TOX(x), TOY(y)); + [UIView commitAnimations]; + } else if ([command isEqualToString:@"player1_y"]) { - player1View.center = CGPointMake(20, TOY([args intValue])); + + [UIView beginAnimations:NULL context:NULL]; + player1View.center = CGPointMake(25, TOY([args floatValue])); + [UIView commitAnimations]; + } else if ([command isEqualToString:@"player2_y"]) { - player2View.center = CGPointMake(WIDTH - 40, TOY([args intValue])); + + [UIView beginAnimations:NULL context:NULL]; + player2View.center = CGPointMake(WIDTH - 35, TOY([args floatValue])); + [UIView commitAnimations]; + } else if ([command isEqualToString:@"player1_points"]) { + pointsP1.text = args; + gamePaused = YES; + [lostSound play]; + } else if ([command isEqualToString:@"player2_points"]) { + pointsP2.text = args; + gamePaused = YES; + [lostSound play]; + + } else if ([command isEqualToString:@"game"]) { + + if ([args isEqualToString:@"wait"]) { + + NSLog(@"Other ready"); + + } else if ([args isEqualToString:@"start"]) { + + gamePaused = NO; + + } + } else if ([command isEqualToString:@"welcome"]) { + if ([args isEqualToString:@"1"]) { + player1View.backgroundColor = [UIColor redColor]; + } else { + player2View.backgroundColor = [UIColor redColor]; + } + + } else if ([command isEqualToString:@"sound"]) { + if ([args isEqualToString:@"ping"]) { + [pingSound play]; + } else { + [pongSound play]; + } + + } +} + +#pragma mark - +#pragma mark Input + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { + if (gamePaused) { + [ggsNetwork sendCommand:@"start" withArgs:@""]; + tapToBegin.hidden = YES; + } else { + CGPoint point = [[[touches allObjects] objectAtIndex:0] locationInView:self.view]; + if (point.y > (HEIGHT / 2)) { + [ggsNetwork sendCommand:@"down" withArgs:@""]; + } else { + [ggsNetwork sendCommand:@"up" withArgs:@""]; + } + } } @@ -82,12 +139,35 @@ #pragma mark - #pragma mark View +- (void)restart { + player1View.backgroundColor = [UIColor whiteColor]; + player2View.backgroundColor = [UIColor whiteColor]; + pointsP1.text = @"0"; + pointsP2.text = @"0"; + self.ggsNetwork = [[GGSNetwork alloc] initWithDelegate:self]; + gamePaused = YES; + tapToBegin.hidden = NO; +} + // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. - (void)viewDidLoad { [super viewDidLoad]; - ggsNetwork = [[GGSNetwork alloc] initWithDelegate:self]; + NSString *path = [[NSBundle mainBundle] pathForResource:@"ping" ofType:@"wav"]; + pingSound = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; + [pingSound play]; + path = [[NSBundle mainBundle] pathForResource:@"pong" ofType:@"wav"]; + pongSound = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; + [pongSound play]; + + path = [[NSBundle mainBundle] pathForResource:@"lost" ofType:@"wav"]; + lostSound = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; + [lostSound play]; + + + //ggsNetwork = [[GGSNetwork alloc] initWithDelegate:self]; + gamePaused = YES; //[self startPositions]; //[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(moveBall) userInfo:nil repeats:YES]; @@ -254,6 +334,10 @@ [pointsP2 release]; [ggsNetwork release]; + [pingSound release]; + [pongSound release]; + [lostSound release]; + [super dealloc]; } diff --git a/games/Pong/Pong.xcodeproj/jeena.mode1v3 b/games/Pong/Pong.xcodeproj/jeena.mode1v3 index 99db5bd..e793482 100644 --- a/games/Pong/Pong.xcodeproj/jeena.mode1v3 +++ b/games/Pong/Pong.xcodeproj/jeena.mode1v3 @@ -326,19 +326,19 @@ _historyCapacity 0 bookmark - 1F369E7B1323081C004E7A99 + 1F36A0221323417E004E7A99 history 1FBEBF151319F5C1006D5497 1FBEC001131AA71C006D5497 1FBEC002131AA71C006D5497 1FBEC05C131B085D006D5497 - 1FBEC05D131B085D006D5497 - 1F369E761323081C004E7A99 - 1F369E771323081C004E7A99 - 1F369E781323081C004E7A99 - 1F369E791323081C004E7A99 - 1F369E7A1323081C004E7A99 + 1F369ED81323101D004E7A99 + 1F369F33132317A8004E7A99 + 1F369F6C13232750004E7A99 + 1F369FE61323395B004E7A99 + 1F36A0201323417E004E7A99 + 1F36A0211323417E004E7A99 SplitCount @@ -536,7 +536,7 @@ 5 WindowOrderList - 1F369E861323081C004E7A99 + 1F369E8E13230953004E7A99 1F369E871323081C004E7A99 1CD10A99069EF8BA00B06720 1FA056A412F0B540003F1373 @@ -665,8 +665,8 @@ yes sizes - {{0, 0}, {316, 201}} - {{316, 0}, {378, 201}} + {{0, 0}, {357, 449}} + {{357, 0}, {428, 449}} VerticalSplitView @@ -681,8 +681,8 @@ yes sizes - {{0, 0}, {694, 201}} - {{0, 201}, {694, 180}} + {{0, 0}, {785, 449}} + {{0, 449}, {785, 403}} @@ -702,7 +702,7 @@ DebugSTDIOWindowFrame {{200, 200}, {500, 300}} Frame - {{0, 0}, {694, 381}} + {{0, 0}, {785, 852}} PBXDebugSessionStackFrameViewKey DebugVariablesTableConfiguration @@ -712,24 +712,24 @@ Value 85 Summary - 148 + 198 Frame - {{316, 0}, {378, 201}} + {{357, 0}, {428, 449}} RubberWindowFrame - 108 977 694 422 0 0 2560 1418 + 108 506 785 893 0 0 2560 1418 RubberWindowFrame - 108 977 694 422 0 0 2560 1418 + 108 506 785 893 0 0 2560 1418 Module PBXDebugSessionModule Proportion - 381pt + 852pt Proportion - 381pt + 852pt Name @@ -754,7 +754,7 @@ ToolbarConfiguration xcode.toolbar.config.debugV3 WindowString - 108 977 694 422 0 0 2560 1418 + 108 506 785 893 0 0 2560 1418 WindowToolGUID 1CD10A99069EF8BA00B06720 WindowToolIsVisible @@ -880,18 +880,18 @@ GeometryConfiguration Frame - {{0, 0}, {673, 481}} + {{0, 0}, {724, 358}} RubberWindowFrame - 3600 653 673 522 2560 0 1920 1200 + 3598 801 724 399 2560 0 1920 1200 Module PBXDebugCLIModule Proportion - 481pt + 358pt Proportion - 481pt + 358pt Name @@ -911,7 +911,7 @@ ToolbarConfiguration xcode.toolbar.config.consoleV3 WindowString - 3600 653 673 522 2560 0 1920 1200 + 3598 801 724 399 2560 0 1920 1200 WindowToolGUID 1C78EAAD065D492600B07095 WindowToolIsVisible diff --git a/games/Pong/Pong.xcodeproj/jeena.pbxuser b/games/Pong/Pong.xcodeproj/jeena.pbxuser index f609c15..c33f163 100644 --- a/games/Pong/Pong.xcodeproj/jeena.pbxuser +++ b/games/Pong/Pong.xcodeproj/jeena.pbxuser @@ -9,9 +9,9 @@ }; 1D3623250D0F684500981E51 /* PongAppDelegate.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1965, 1215}}"; - sepNavSelRange = "{629, 0}"; - sepNavVisRange = "{448, 307}"; + sepNavIntBoundsRect = "{{0, 0}, {1965, 1350}}"; + sepNavSelRange = "{2181, 0}"; + sepNavVisRange = "{0, 2635}"; }; }; 1D6058900D05DD3D006BFB54 /* Pong */ = { @@ -45,7 +45,7 @@ fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; name = "GGSNetwork.m: 60"; rLen = 0; - rLoc = 1529; + rLoc = 1537; rType = 0; vrLen = 2676; vrLoc = 860; @@ -55,7 +55,7 @@ fRef = 28D7ACF60DDB3853001CB0EB /* PongViewController.h */; name = "PongViewController.h: 11"; rLen = 0; - rLoc = 207; + rLoc = 246; rType = 0; vrLen = 1144; vrLoc = 0; @@ -65,7 +65,7 @@ fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; name = "PongViewController.m: 24"; rLen = 0; - rLoc = 522; + rLoc = 480; rType = 0; vrLen = 1968; vrLoc = 37; @@ -75,11 +75,1031 @@ fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; name = "PongViewController.m: 40"; rLen = 0; - rLoc = 989; + rLoc = 947; rType = 0; vrLen = 2275; vrLoc = 799; }; + 1F369E8A13230953004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 40"; + rLen = 0; + rLoc = 947; + rType = 0; + vrLen = 2223; + vrLoc = 0; + }; + 1F369E8B13230953004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFED131A97F8006D5497 /* GGSNetwork.h */; + name = "GGSNetwork.h: 28"; + rLen = 0; + rLoc = 748; + rType = 0; + vrLen = 910; + vrLoc = 0; + }; + 1F369E8C13230953004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 14"; + rLen = 0; + rLoc = 212; + rType = 0; + vrLen = 2278; + vrLoc = 0; + }; + 1F369E9313230981004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 17"; + rLen = 0; + rLoc = 258; + rType = 0; + vrLen = 2268; + vrLoc = 26; + }; + 1F369E961323099B004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 39"; + rLen = 0; + rLoc = 828; + rType = 0; + vrLen = 2358; + vrLoc = 29; + }; + 1F369E99132309E0004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 39"; + rLen = 0; + rLoc = 828; + rType = 0; + vrLen = 2358; + vrLoc = 29; + }; + 1F369E9A132309E0004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 40"; + rLen = 0; + rLoc = 947; + rType = 0; + vrLen = 2223; + vrLoc = 0; + }; + 1F369E9B132309E0004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 56"; + rLen = 0; + rLoc = 1256; + rType = 0; + vrLen = 2288; + vrLoc = 191; + }; + 1F369E9E13230A0F004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 52"; + rLen = 0; + rLoc = 1168; + rType = 0; + vrLen = 2288; + vrLoc = 191; + }; + 1F369E9F13230A0F004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFED131A97F8006D5497 /* GGSNetwork.h */; + name = "GGSNetwork.h: 28"; + rLen = 0; + rLoc = 748; + rType = 0; + vrLen = 910; + vrLoc = 0; + }; + 1F369EA013230A0F004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 64"; + rLen = 0; + rLoc = 1755; + rType = 0; + vrLen = 2447; + vrLoc = 328; + }; + 1F369EA513230A35004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 64"; + rLen = 0; + rLoc = 1755; + rType = 0; + vrLen = 2447; + vrLoc = 328; + }; + 1F369EA613230A35004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 52"; + rLen = 0; + rLoc = 1168; + rType = 0; + vrLen = 2288; + vrLoc = 191; + }; + 1F369EA713230A35004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 85"; + rLen = 0; + rLoc = 4498; + rType = 0; + vrLen = 2296; + vrLoc = 431; + }; + 1F369EAA13230A56004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 86"; + rLen = 0; + rLoc = 4500; + rType = 0; + vrLen = 2280; + vrLoc = 431; + }; + 1F369EAB13230A56004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 64"; + rLen = 0; + rLoc = 1755; + rType = 0; + vrLen = 2447; + vrLoc = 328; + }; + 1F369EAC13230A56004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 39"; + rLen = 0; + rLoc = 799; + rType = 0; + vrLen = 2464; + vrLoc = 329; + }; + 1F369EAF13230A6B004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 69"; + rLen = 0; + rLoc = 1845; + rType = 0; + vrLen = 2490; + vrLoc = 369; + }; + 1F369EB413230AAC004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 40"; + rLen = 0; + rLoc = 799; + rType = 0; + vrLen = 2021; + vrLoc = 3; + }; + 1F369EB513230ADE004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 41"; + rLen = 0; + rLoc = 828; + rType = 0; + vrLen = 2021; + vrLoc = 3; + }; + 1F369EB613230B1D004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 43"; + rLen = 0; + rLoc = 865; + rType = 0; + vrLen = 2028; + vrLoc = 3; + }; + 1F369EBB13230B53004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 43"; + rLen = 0; + rLoc = 865; + rType = 0; + vrLen = 2174; + vrLoc = 29; + }; + 1F369EBF13230B6E004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 43"; + rLen = 0; + rLoc = 865; + rType = 0; + vrLen = 2205; + vrLoc = 122; + }; + 1F369EC013230BF3004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 43"; + rLen = 0; + rLoc = 865; + rType = 0; + vrLen = 2271; + vrLoc = 1750; + }; + 1F369EC113230BF3004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 106"; + rLen = 0; + rLoc = 4500; + rType = 0; + vrLen = 2255; + vrLoc = 952; + }; + 1F369EC413230DCA004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 93"; + rLen = 0; + rLoc = 3351; + rType = 0; + vrLen = 2412; + vrLoc = 1563; + }; + 1F369EC613230DE0004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 93"; + rLen = 0; + rLoc = 3351; + rType = 0; + vrLen = 2416; + vrLoc = 1563; + }; + 1F369ECB13230E71004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 93"; + rLen = 0; + rLoc = 3351; + rType = 0; + vrLen = 2259; + vrLoc = 1720; + }; + 1F369ECC13230E71004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFED131A97F8006D5497 /* GGSNetwork.h */; + name = "GGSNetwork.h: 28"; + rLen = 0; + rLoc = 748; + rType = 0; + vrLen = 910; + vrLoc = 0; + }; + 1F369ECD13230E71004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 14"; + rLen = 0; + rLoc = 203; + rType = 0; + vrLen = 2036; + vrLoc = 0; + }; + 1F369ED013230E9E004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 14"; + rLen = 0; + rLoc = 203; + rType = 0; + vrLen = 2133; + vrLoc = 3; + }; + 1F369ED313230EAD004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 14"; + rLen = 0; + rLoc = 203; + rType = 0; + vrLen = 2110; + vrLoc = 26; + }; + 1F369ED413230F2A004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 20"; + rLen = 0; + rLoc = 534; + rType = 0; + vrLen = 2271; + vrLoc = 1571; + }; + 1F369ED71323101D004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 20"; + rLen = 0; + rLoc = 534; + rType = 0; + vrLen = 2271; + vrLoc = 1571; + }; + 1F369ED81323101D004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1D3623250D0F684500981E51 /* PongAppDelegate.m */; + name = "PongAppDelegate.m: 60"; + rLen = 0; + rLoc = 2181; + rType = 0; + vrLen = 2635; + vrLoc = 0; + }; + 1F369ED91323101D004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF60DDB3853001CB0EB /* PongViewController.h */; + name = "PongViewController.h: 43"; + rLen = 0; + rLoc = 1173; + rType = 0; + vrLen = 1162; + vrLoc = 0; + }; + 1F369EDA1323101D004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 104"; + rLen = 0; + rLoc = 3589; + rType = 0; + vrLen = 2119; + vrLoc = 2266; + }; + 1F369EDD1323104E004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 121"; + rLen = 1; + rLoc = 4771; + rType = 0; + vrLen = 2160; + vrLoc = 2266; + }; + 1F369EDE1323104E004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 20"; + rLen = 0; + rLoc = 534; + rType = 0; + vrLen = 2273; + vrLoc = 1569; + }; + 1F369EDF1323104E004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 35"; + rLen = 0; + rLoc = 865; + rType = 0; + vrLen = 2277; + vrLoc = 3; + }; + 1F369EE21323105F004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 33"; + rLen = 0; + rLoc = 862; + rType = 0; + vrLen = 2264; + vrLoc = 26; + }; + 1F369EE513231076004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 20"; + rLen = 0; + rLoc = 534; + rType = 0; + vrLen = 2312; + vrLoc = 29; + }; + 1F369EF413231106004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 34"; + rLen = 0; + rLoc = 865; + rType = 0; + vrLen = 2234; + vrLoc = 3; + }; + 1F369EF91323111F004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 14"; + rLen = 0; + rLoc = 203; + rType = 0; + vrLen = 2099; + vrLoc = 26; + }; + 1F369EFC1323113B004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 14"; + rLen = 0; + rLoc = 203; + rType = 0; + vrLen = 2171; + vrLoc = 26; + }; + 1F369EFD1323113B004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 105"; + rLen = 0; + rLoc = 3690; + rType = 0; + vrLen = 2161; + vrLoc = 2282; + }; + 1F369F011323115B004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 105"; + rLen = 0; + rLoc = 3690; + rType = 0; + vrLen = 2317; + vrLoc = 2302; + }; + 1F369F0413231163004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 105"; + rLen = 0; + rLoc = 3690; + rType = 0; + vrLen = 2231; + vrLoc = 2388; + }; + 1F369F0B1323128E004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF60DDB3853001CB0EB /* PongViewController.h */; + name = "PongViewController.h: 43"; + rLen = 0; + rLoc = 1173; + rType = 0; + vrLen = 1162; + vrLoc = 0; + }; + 1F369F0C1323128E004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 105"; + rLen = 0; + rLoc = 3690; + rType = 0; + vrLen = 2167; + vrLoc = 2533; + }; + 1F369F0D1323128E004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 75"; + rLen = 0; + rLoc = 2465; + rType = 0; + vrLen = 2212; + vrLoc = 861; + }; + 1F369F101323129A004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 75"; + rLen = 0; + rLoc = 2465; + rType = 0; + vrLen = 2239; + vrLoc = 952; + }; + 1F369F16132312C3004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 75"; + rLen = 0; + rLoc = 2465; + rType = 0; + vrLen = 2274; + vrLoc = 992; + }; + 1F369F1F1323136F004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 76"; + rLen = 0; + rLoc = 2503; + rType = 0; + vrLen = 2313; + vrLoc = 1029; + }; + 1F369F241323151F004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 103"; + rLen = 0; + rLoc = 2770; + rType = 0; + vrLen = 2121; + vrLoc = 971; + }; + 1F369F2913231563004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 61"; + rLen = 0; + rLoc = 1370; + rType = 0; + vrLen = 2209; + vrLoc = 524; + }; + 1F369F2D13231572004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 61"; + rLen = 0; + rLoc = 1370; + rType = 0; + vrLen = 2210; + vrLoc = 528; + }; + 1F369F2E1323158B004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 77"; + rLen = 0; + rLoc = 2044; + rType = 0; + vrLen = 2210; + vrLoc = 528; + }; + 1F369F33132317A8004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFED131A97F8006D5497 /* GGSNetwork.h */; + name = "GGSNetwork.h: 28"; + rLen = 0; + rLoc = 748; + rType = 0; + vrLen = 910; + vrLoc = 0; + }; + 1F369F34132317A8004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 14"; + rLen = 0; + rLoc = 203; + rType = 0; + vrLen = 2403; + vrLoc = 236; + }; + 1F369F35132317A8004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 45"; + rLen = 0; + rLoc = 1002; + rType = 0; + vrLen = 2210; + vrLoc = 528; + }; + 1F369F36132317A8004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 66"; + rLen = 0; + rLoc = 1619; + rType = 0; + vrLen = 2074; + vrLoc = 712; + }; + 1F369F631323270D004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 66"; + rLen = 0; + rLoc = 1619; + rType = 0; + vrLen = 2047; + vrLoc = 1504; + }; + 1F369F641323270D004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 14"; + rLen = 0; + rLoc = 203; + rType = 0; + vrLen = 2403; + vrLoc = 236; + }; + 1F369F651323270D004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 69"; + rLen = 0; + rLoc = 1845; + rType = 0; + vrLen = 2623; + vrLoc = 1240; + }; + 1F369F6C13232750004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; + name = "GGSNetwork.m: 69"; + rLen = 0; + rLoc = 1845; + rType = 0; + vrLen = 2571; + vrLoc = 1292; + }; + 1F369F6D13232750004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 66"; + rLen = 0; + rLoc = 1619; + rType = 0; + vrLen = 2047; + vrLoc = 1504; + }; + 1F369F6E13232750004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 105"; + rLen = 0; + rLoc = 2728; + rType = 0; + vrLen = 2055; + vrLoc = 1660; + }; + 1F369F711323276C004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 105"; + rLen = 0; + rLoc = 2768; + rType = 0; + vrLen = 2002; + vrLoc = 1711; + }; + 1F369F76132327A3004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 105"; + rLen = 0; + rLoc = 2768; + rType = 0; + vrLen = 1962; + vrLoc = 1792; + }; + 1F369F78132327B7004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 105"; + rLen = 0; + rLoc = 2768; + rType = 0; + vrLen = 2031; + vrLoc = 1792; + }; + 1F369F8913232BEE004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 135"; + rLen = 0; + rLoc = 3582; + rType = 0; + vrLen = 1976; + vrLoc = 1846; + }; + 1F369F8C13232BF6004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 135"; + rLen = 0; + rLoc = 3582; + rType = 0; + vrLen = 2013; + vrLoc = 1847; + }; + 1F369F9013232C36004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 137"; + rLen = 0; + rLoc = 3569; + rType = 0; + vrLen = 1951; + vrLoc = 1955; + }; + 1F369F9213232C3B004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 137"; + rLen = 0; + rLoc = 3569; + rType = 0; + vrLen = 2020; + vrLoc = 1955; + }; + 1F369F9713232C58004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 133"; + rLen = 0; + rLoc = 3431; + rType = 0; + vrLen = 1936; + vrLoc = 2041; + }; + 1F369F9813232C66004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 139"; + rLen = 0; + rLoc = 3690; + rType = 0; + vrLen = 1936; + vrLoc = 2041; + }; + 1F369FAB13233178004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 91"; + rLen = 0; + rLoc = 2356; + rType = 0; + vrLen = 2153; + vrLoc = 1097; + }; + 1F369FAE132331BB004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 91"; + rLen = 0; + rLoc = 2356; + rType = 0; + vrLen = 2073; + vrLoc = 1211; + }; + 1F369FBB1323344E004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 69"; + rLen = 0; + rLoc = 1698; + rType = 0; + vrLen = 2080; + vrLoc = 996; + }; + 1F369FBE132334E1004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 21"; + rLen = 0; + rLoc = 358; + rType = 0; + vrLen = 2202; + vrLoc = 136; + }; + 1F369FC313233530004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 69"; + rLen = 0; + rLoc = 1698; + rType = 0; + vrLen = 2209; + vrLoc = 191; + }; + 1F369FCA132335A2004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 69"; + rLen = 0; + rLoc = 1698; + rType = 0; + vrLen = 2234; + vrLoc = 252; + }; + 1F369FCD132335E1004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 69"; + rLen = 0; + rLoc = 1698; + rType = 0; + vrLen = 2245; + vrLoc = 298; + }; + 1F369FD2132336DF004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 69"; + rLen = 0; + rLoc = 1698; + rType = 0; + vrLen = 2216; + vrLoc = 357; + }; + 1F369FD313233721004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 22"; + rLen = 0; + rLoc = 386; + rType = 0; + vrLen = 2225; + vrLoc = 40; + }; + 1F369FDA13233780004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 69"; + rLen = 0; + rLoc = 1698; + rType = 0; + vrLen = 2113; + vrLoc = 693; + }; + 1F369FE1132338AC004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 69"; + rLen = 0; + rLoc = 1698; + rType = 0; + vrLen = 1981; + vrLoc = 836; + }; + 1F369FE3132338C0004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 69"; + rLen = 0; + rLoc = 1698; + rType = 0; + vrLen = 1996; + vrLoc = 836; + }; + 1F369FE61323395B004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1FBEC030131AF83B006D5497 /* GGSDelegate.h */; + name = "GGSDelegate.h: 16"; + rLen = 0; + rLoc = 283; + rType = 0; + vrLen = 531; + vrLoc = 0; + }; + 1F369FE71323395B004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 69"; + rLen = 0; + rLoc = 1698; + rType = 0; + vrLen = 1994; + vrLoc = 838; + }; + 1F369FE81323395B004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 60"; + rLen = 0; + rLoc = 1369; + rType = 0; + vrLen = 1964; + vrLoc = 838; + }; + 1F36A00A13233D92004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF60DDB3853001CB0EB /* PongViewController.h */; + name = "PongViewController.h: 35"; + rLen = 0; + rLoc = 744; + rType = 0; + vrLen = 1245; + vrLoc = 0; + }; + 1F36A00B13233D92004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 73"; + rLen = 0; + rLoc = 1894; + rType = 0; + vrLen = 2005; + vrLoc = 971; + }; + 1F36A00C13233D92004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 328"; + rLen = 0; + rLoc = 8674; + rType = 0; + vrLen = 2044; + vrLoc = 845; + }; + 1F36A00F13233EE7004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF60DDB3853001CB0EB /* PongViewController.h */; + name = "PongViewController.h: 12"; + rLen = 0; + rLoc = 246; + rType = 0; + vrLen = 1284; + vrLoc = 0; + }; + 1F36A01013233EE7004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 11"; + rLen = 0; + rLoc = 168; + rType = 0; + vrLen = 2123; + vrLoc = 0; + }; + 1F36A01113233EE7004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 2159; + vrLoc = 3; + }; + 1F36A01713233F1E004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 2167; + vrLoc = 40; + }; + 1F36A0201323417E004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF60DDB3853001CB0EB /* PongViewController.h */; + name = "PongViewController.h: 12"; + rLen = 0; + rLoc = 246; + rType = 0; + vrLen = 1284; + vrLoc = 0; + }; + 1F36A0211323417E004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 2167; + vrLoc = 169; + }; + 1F36A0221323417E004E7A99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; + name = "PongViewController.m: 166"; + rLen = 0; + rLoc = 4434; + rType = 0; + vrLen = 2239; + vrLoc = 2533; + }; 1FA0569112F0B513003F1373 /* Pong */ = { isa = PBXExecutable; activeArgIndices = ( @@ -146,9 +1166,9 @@ }; 1FBEBF4C1319FCDE006D5497 /* AsyncSocket.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {900, 63840}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRange = "{0, 2997}"; + sepNavIntBoundsRect = "{{0, 0}, {852, 64080}}"; + sepNavSelRange = "{69038, 0}"; + sepNavVisRange = "{20925, 796}"; }; }; 1FBEBFED131A97F8006D5497 /* GGSNetwork.h */ = { @@ -160,9 +1180,9 @@ }; 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {998, 1920}}"; - sepNavSelRange = "{1529, 0}"; - sepNavVisRange = "{860, 2676}"; + sepNavIntBoundsRect = "{{0, 0}, {998, 2055}}"; + sepNavSelRange = "{1845, 0}"; + sepNavVisRange = "{1292, 2571}"; }; }; 1FBEC001131AA71C006D5497 /* PBXTextBookmark */ = { @@ -217,7 +1237,7 @@ fRef = 28D7ACF60DDB3853001CB0EB /* PongViewController.h */; name = "PongViewController.h: 11"; rLen = 0; - rLoc = 207; + rLoc = 246; rType = 0; vrLen = 1144; vrLoc = 0; @@ -237,7 +1257,7 @@ fRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; name = "GGSNetwork.m: 44"; rLen = 108; - rLoc = 963; + rLoc = 971; rType = 0; vrLen = 2551; vrLoc = 369; @@ -257,7 +1277,7 @@ fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; name = "PongViewController.m: 48"; rLen = 0; - rLoc = 1280; + rLoc = 1181; rType = 0; vrLen = 2007; vrLoc = 0; @@ -267,7 +1287,7 @@ fRef = 28D7ACF70DDB3853001CB0EB /* PongViewController.m */; name = "PongViewController.m: 85"; rLen = 0; - rLoc = 2811; + rLoc = 4848; rType = 0; vrLen = 2258; vrLoc = 1218; @@ -275,23 +1295,24 @@ 28D7ACF60DDB3853001CB0EB /* PongViewController.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {998, 1171}}"; - sepNavSelRange = "{207, 0}"; - sepNavVisRange = "{0, 1144}"; + sepNavSelRange = "{246, 0}"; + sepNavVisRange = "{0, 1284}"; }; }; 28D7ACF70DDB3853001CB0EB /* PongViewController.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {998, 3810}}"; - sepNavSelRange = "{989, 0}"; - sepNavVisRange = "{799, 2275}"; + sepNavIntBoundsRect = "{{0, 0}, {998, 5070}}"; + sepNavSelRange = "{4434, 0}"; + sepNavVisRange = "{2533, 2239}"; }; }; 29B97313FDCFA39411CA2CEA /* Project object */ = { activeBuildConfigurationName = Debug; activeExecutable = 1FA0569112F0B513003F1373 /* Pong */; - activeSDKPreference = iphoneos4.2; + activeSDKPreference = iphonesimulator4.2; activeTarget = 1D6058900D05DD3D006BFB54 /* Pong */; addToTargets = ( + 1D6058900D05DD3D006BFB54 /* Pong */, ); codeSenseManager = 1FA0569E12F0B528003F1373 /* Code sense */; executables = ( @@ -330,6 +1351,108 @@ 1F369E791323081C004E7A99 /* PBXTextBookmark */ = 1F369E791323081C004E7A99 /* PBXTextBookmark */; 1F369E7A1323081C004E7A99 /* PBXTextBookmark */ = 1F369E7A1323081C004E7A99 /* PBXTextBookmark */; 1F369E7B1323081C004E7A99 /* PBXTextBookmark */ = 1F369E7B1323081C004E7A99 /* PBXTextBookmark */; + 1F369E8A13230953004E7A99 /* PBXTextBookmark */ = 1F369E8A13230953004E7A99 /* PBXTextBookmark */; + 1F369E8B13230953004E7A99 /* PBXTextBookmark */ = 1F369E8B13230953004E7A99 /* PBXTextBookmark */; + 1F369E8C13230953004E7A99 /* PBXTextBookmark */ = 1F369E8C13230953004E7A99 /* PBXTextBookmark */; + 1F369E9313230981004E7A99 /* PBXTextBookmark */ = 1F369E9313230981004E7A99 /* PBXTextBookmark */; + 1F369E961323099B004E7A99 /* PBXTextBookmark */ = 1F369E961323099B004E7A99 /* PBXTextBookmark */; + 1F369E99132309E0004E7A99 /* PBXTextBookmark */ = 1F369E99132309E0004E7A99 /* PBXTextBookmark */; + 1F369E9A132309E0004E7A99 /* PBXTextBookmark */ = 1F369E9A132309E0004E7A99 /* PBXTextBookmark */; + 1F369E9B132309E0004E7A99 /* PBXTextBookmark */ = 1F369E9B132309E0004E7A99 /* PBXTextBookmark */; + 1F369E9E13230A0F004E7A99 /* PBXTextBookmark */ = 1F369E9E13230A0F004E7A99 /* PBXTextBookmark */; + 1F369E9F13230A0F004E7A99 /* PBXTextBookmark */ = 1F369E9F13230A0F004E7A99 /* PBXTextBookmark */; + 1F369EA013230A0F004E7A99 /* PBXTextBookmark */ = 1F369EA013230A0F004E7A99 /* PBXTextBookmark */; + 1F369EA513230A35004E7A99 /* PBXTextBookmark */ = 1F369EA513230A35004E7A99 /* PBXTextBookmark */; + 1F369EA613230A35004E7A99 /* PBXTextBookmark */ = 1F369EA613230A35004E7A99 /* PBXTextBookmark */; + 1F369EA713230A35004E7A99 /* PBXTextBookmark */ = 1F369EA713230A35004E7A99 /* PBXTextBookmark */; + 1F369EAA13230A56004E7A99 /* PBXTextBookmark */ = 1F369EAA13230A56004E7A99 /* PBXTextBookmark */; + 1F369EAB13230A56004E7A99 /* PBXTextBookmark */ = 1F369EAB13230A56004E7A99 /* PBXTextBookmark */; + 1F369EAC13230A56004E7A99 /* PBXTextBookmark */ = 1F369EAC13230A56004E7A99 /* PBXTextBookmark */; + 1F369EAF13230A6B004E7A99 /* PBXTextBookmark */ = 1F369EAF13230A6B004E7A99 /* PBXTextBookmark */; + 1F369EB413230AAC004E7A99 /* PBXTextBookmark */ = 1F369EB413230AAC004E7A99 /* PBXTextBookmark */; + 1F369EB513230ADE004E7A99 /* PBXTextBookmark */ = 1F369EB513230ADE004E7A99 /* PBXTextBookmark */; + 1F369EB613230B1D004E7A99 /* PBXTextBookmark */ = 1F369EB613230B1D004E7A99 /* PBXTextBookmark */; + 1F369EBB13230B53004E7A99 /* PBXTextBookmark */ = 1F369EBB13230B53004E7A99 /* PBXTextBookmark */; + 1F369EBF13230B6E004E7A99 /* PBXTextBookmark */ = 1F369EBF13230B6E004E7A99 /* PBXTextBookmark */; + 1F369EC013230BF3004E7A99 /* PBXTextBookmark */ = 1F369EC013230BF3004E7A99 /* PBXTextBookmark */; + 1F369EC113230BF3004E7A99 /* PBXTextBookmark */ = 1F369EC113230BF3004E7A99 /* PBXTextBookmark */; + 1F369EC413230DCA004E7A99 /* PBXTextBookmark */ = 1F369EC413230DCA004E7A99 /* PBXTextBookmark */; + 1F369EC613230DE0004E7A99 /* PBXTextBookmark */ = 1F369EC613230DE0004E7A99 /* PBXTextBookmark */; + 1F369ECB13230E71004E7A99 /* PBXTextBookmark */ = 1F369ECB13230E71004E7A99 /* PBXTextBookmark */; + 1F369ECC13230E71004E7A99 /* PBXTextBookmark */ = 1F369ECC13230E71004E7A99 /* PBXTextBookmark */; + 1F369ECD13230E71004E7A99 /* PBXTextBookmark */ = 1F369ECD13230E71004E7A99 /* PBXTextBookmark */; + 1F369ED013230E9E004E7A99 /* PBXTextBookmark */ = 1F369ED013230E9E004E7A99 /* PBXTextBookmark */; + 1F369ED313230EAD004E7A99 /* PBXTextBookmark */ = 1F369ED313230EAD004E7A99 /* PBXTextBookmark */; + 1F369ED413230F2A004E7A99 /* PBXTextBookmark */ = 1F369ED413230F2A004E7A99 /* PBXTextBookmark */; + 1F369ED71323101D004E7A99 /* PBXTextBookmark */ = 1F369ED71323101D004E7A99 /* PBXTextBookmark */; + 1F369ED81323101D004E7A99 /* PBXTextBookmark */ = 1F369ED81323101D004E7A99 /* PBXTextBookmark */; + 1F369ED91323101D004E7A99 /* PBXTextBookmark */ = 1F369ED91323101D004E7A99 /* PBXTextBookmark */; + 1F369EDA1323101D004E7A99 /* PBXTextBookmark */ = 1F369EDA1323101D004E7A99 /* PBXTextBookmark */; + 1F369EDD1323104E004E7A99 /* PBXTextBookmark */ = 1F369EDD1323104E004E7A99 /* PBXTextBookmark */; + 1F369EDE1323104E004E7A99 /* PBXTextBookmark */ = 1F369EDE1323104E004E7A99 /* PBXTextBookmark */; + 1F369EDF1323104E004E7A99 /* PBXTextBookmark */ = 1F369EDF1323104E004E7A99 /* PBXTextBookmark */; + 1F369EE21323105F004E7A99 /* PBXTextBookmark */ = 1F369EE21323105F004E7A99 /* PBXTextBookmark */; + 1F369EE513231076004E7A99 /* PBXTextBookmark */ = 1F369EE513231076004E7A99 /* PBXTextBookmark */; + 1F369EF413231106004E7A99 /* PBXTextBookmark */ = 1F369EF413231106004E7A99 /* PBXTextBookmark */; + 1F369EF91323111F004E7A99 /* PBXTextBookmark */ = 1F369EF91323111F004E7A99 /* PBXTextBookmark */; + 1F369EFC1323113B004E7A99 /* PBXTextBookmark */ = 1F369EFC1323113B004E7A99 /* PBXTextBookmark */; + 1F369EFD1323113B004E7A99 /* PBXTextBookmark */ = 1F369EFD1323113B004E7A99 /* PBXTextBookmark */; + 1F369F011323115B004E7A99 /* PBXTextBookmark */ = 1F369F011323115B004E7A99 /* PBXTextBookmark */; + 1F369F0413231163004E7A99 /* PBXTextBookmark */ = 1F369F0413231163004E7A99 /* PBXTextBookmark */; + 1F369F0B1323128E004E7A99 /* PBXTextBookmark */ = 1F369F0B1323128E004E7A99 /* PBXTextBookmark */; + 1F369F0C1323128E004E7A99 /* PBXTextBookmark */ = 1F369F0C1323128E004E7A99 /* PBXTextBookmark */; + 1F369F0D1323128E004E7A99 /* PBXTextBookmark */ = 1F369F0D1323128E004E7A99 /* PBXTextBookmark */; + 1F369F101323129A004E7A99 /* PBXTextBookmark */ = 1F369F101323129A004E7A99 /* PBXTextBookmark */; + 1F369F16132312C3004E7A99 /* PBXTextBookmark */ = 1F369F16132312C3004E7A99 /* PBXTextBookmark */; + 1F369F1F1323136F004E7A99 /* PBXTextBookmark */ = 1F369F1F1323136F004E7A99 /* PBXTextBookmark */; + 1F369F241323151F004E7A99 /* PBXTextBookmark */ = 1F369F241323151F004E7A99 /* PBXTextBookmark */; + 1F369F2913231563004E7A99 /* PBXTextBookmark */ = 1F369F2913231563004E7A99 /* PBXTextBookmark */; + 1F369F2D13231572004E7A99 /* PBXTextBookmark */ = 1F369F2D13231572004E7A99 /* PBXTextBookmark */; + 1F369F2E1323158B004E7A99 /* PBXTextBookmark */ = 1F369F2E1323158B004E7A99 /* PBXTextBookmark */; + 1F369F33132317A8004E7A99 /* PBXTextBookmark */ = 1F369F33132317A8004E7A99 /* PBXTextBookmark */; + 1F369F34132317A8004E7A99 /* PBXTextBookmark */ = 1F369F34132317A8004E7A99 /* PBXTextBookmark */; + 1F369F35132317A8004E7A99 /* PBXTextBookmark */ = 1F369F35132317A8004E7A99 /* PBXTextBookmark */; + 1F369F36132317A8004E7A99 /* PBXTextBookmark */ = 1F369F36132317A8004E7A99 /* PBXTextBookmark */; + 1F369F631323270D004E7A99 /* PBXTextBookmark */ = 1F369F631323270D004E7A99 /* PBXTextBookmark */; + 1F369F641323270D004E7A99 /* PBXTextBookmark */ = 1F369F641323270D004E7A99 /* PBXTextBookmark */; + 1F369F651323270D004E7A99 /* PBXTextBookmark */ = 1F369F651323270D004E7A99 /* PBXTextBookmark */; + 1F369F6C13232750004E7A99 /* PBXTextBookmark */ = 1F369F6C13232750004E7A99 /* PBXTextBookmark */; + 1F369F6D13232750004E7A99 /* PBXTextBookmark */ = 1F369F6D13232750004E7A99 /* PBXTextBookmark */; + 1F369F6E13232750004E7A99 /* PBXTextBookmark */ = 1F369F6E13232750004E7A99 /* PBXTextBookmark */; + 1F369F711323276C004E7A99 /* PBXTextBookmark */ = 1F369F711323276C004E7A99 /* PBXTextBookmark */; + 1F369F76132327A3004E7A99 /* PBXTextBookmark */ = 1F369F76132327A3004E7A99 /* PBXTextBookmark */; + 1F369F78132327B7004E7A99 /* PBXTextBookmark */ = 1F369F78132327B7004E7A99 /* PBXTextBookmark */; + 1F369F8913232BEE004E7A99 /* PBXTextBookmark */ = 1F369F8913232BEE004E7A99 /* PBXTextBookmark */; + 1F369F8C13232BF6004E7A99 /* PBXTextBookmark */ = 1F369F8C13232BF6004E7A99 /* PBXTextBookmark */; + 1F369F9013232C36004E7A99 /* PBXTextBookmark */ = 1F369F9013232C36004E7A99 /* PBXTextBookmark */; + 1F369F9213232C3B004E7A99 /* PBXTextBookmark */ = 1F369F9213232C3B004E7A99 /* PBXTextBookmark */; + 1F369F9713232C58004E7A99 /* PBXTextBookmark */ = 1F369F9713232C58004E7A99 /* PBXTextBookmark */; + 1F369F9813232C66004E7A99 /* PBXTextBookmark */ = 1F369F9813232C66004E7A99 /* PBXTextBookmark */; + 1F369FAB13233178004E7A99 /* PBXTextBookmark */ = 1F369FAB13233178004E7A99 /* PBXTextBookmark */; + 1F369FAE132331BB004E7A99 /* PBXTextBookmark */ = 1F369FAE132331BB004E7A99 /* PBXTextBookmark */; + 1F369FBB1323344E004E7A99 /* PBXTextBookmark */ = 1F369FBB1323344E004E7A99 /* PBXTextBookmark */; + 1F369FBE132334E1004E7A99 /* PBXTextBookmark */ = 1F369FBE132334E1004E7A99 /* PBXTextBookmark */; + 1F369FC313233530004E7A99 /* PBXTextBookmark */ = 1F369FC313233530004E7A99 /* PBXTextBookmark */; + 1F369FCA132335A2004E7A99 /* PBXTextBookmark */ = 1F369FCA132335A2004E7A99 /* PBXTextBookmark */; + 1F369FCD132335E1004E7A99 /* PBXTextBookmark */ = 1F369FCD132335E1004E7A99 /* PBXTextBookmark */; + 1F369FD2132336DF004E7A99 /* PBXTextBookmark */ = 1F369FD2132336DF004E7A99 /* PBXTextBookmark */; + 1F369FD313233721004E7A99 /* PBXTextBookmark */ = 1F369FD313233721004E7A99 /* PBXTextBookmark */; + 1F369FDA13233780004E7A99 /* PBXTextBookmark */ = 1F369FDA13233780004E7A99 /* PBXTextBookmark */; + 1F369FE1132338AC004E7A99 /* PBXTextBookmark */ = 1F369FE1132338AC004E7A99 /* PBXTextBookmark */; + 1F369FE3132338C0004E7A99 /* PBXTextBookmark */ = 1F369FE3132338C0004E7A99 /* PBXTextBookmark */; + 1F369FE61323395B004E7A99 /* PBXTextBookmark */ = 1F369FE61323395B004E7A99 /* PBXTextBookmark */; + 1F369FE71323395B004E7A99 /* PBXTextBookmark */ = 1F369FE71323395B004E7A99 /* PBXTextBookmark */; + 1F369FE81323395B004E7A99 /* PBXTextBookmark */ = 1F369FE81323395B004E7A99 /* PBXTextBookmark */; + 1F36A00A13233D92004E7A99 /* PBXTextBookmark */ = 1F36A00A13233D92004E7A99 /* PBXTextBookmark */; + 1F36A00B13233D92004E7A99 /* PBXTextBookmark */ = 1F36A00B13233D92004E7A99 /* PBXTextBookmark */; + 1F36A00C13233D92004E7A99 /* PBXTextBookmark */ = 1F36A00C13233D92004E7A99 /* PBXTextBookmark */; + 1F36A00F13233EE7004E7A99 /* PBXTextBookmark */ = 1F36A00F13233EE7004E7A99 /* PBXTextBookmark */; + 1F36A01013233EE7004E7A99 /* PBXTextBookmark */ = 1F36A01013233EE7004E7A99 /* PBXTextBookmark */; + 1F36A01113233EE7004E7A99 /* PBXTextBookmark */ = 1F36A01113233EE7004E7A99 /* PBXTextBookmark */; + 1F36A01713233F1E004E7A99 /* PBXTextBookmark */ = 1F36A01713233F1E004E7A99 /* PBXTextBookmark */; + 1F36A0201323417E004E7A99 /* PBXTextBookmark */ = 1F36A0201323417E004E7A99 /* PBXTextBookmark */; + 1F36A0211323417E004E7A99 /* PBXTextBookmark */ = 1F36A0211323417E004E7A99 /* PBXTextBookmark */; + 1F36A0221323417E004E7A99 /* PBXTextBookmark */ = 1F36A0221323417E004E7A99 /* PBXTextBookmark */; 1FBEBF151319F5C1006D5497 = 1FBEBF151319F5C1006D5497 /* PlistBookmark */; 1FBEC001131AA71C006D5497 = 1FBEC001131AA71C006D5497 /* PBXTextBookmark */; 1FBEC002131AA71C006D5497 = 1FBEC002131AA71C006D5497 /* PBXTextBookmark */; diff --git a/games/Pong/Pong.xcodeproj/project.pbxproj b/games/Pong/Pong.xcodeproj/project.pbxproj index de1410d..2e77be5 100755 --- a/games/Pong/Pong.xcodeproj/project.pbxproj +++ b/games/Pong/Pong.xcodeproj/project.pbxproj @@ -11,6 +11,10 @@ 1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; + 1F369FF813233C1E004E7A99 /* lost.wav in Resources */ = {isa = PBXBuildFile; fileRef = 1F369FF513233C1E004E7A99 /* lost.wav */; }; + 1F369FF913233C1E004E7A99 /* ping.wav in Resources */ = {isa = PBXBuildFile; fileRef = 1F369FF613233C1E004E7A99 /* ping.wav */; }; + 1F369FFA13233C1E004E7A99 /* pong.wav in Resources */ = {isa = PBXBuildFile; fileRef = 1F369FF713233C1E004E7A99 /* pong.wav */; }; + 1F36A00713233CCC004E7A99 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F36A00613233CCC004E7A99 /* AVFoundation.framework */; }; 1FBEBF481319FC56006D5497 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FBEBF471319FC56006D5497 /* CFNetwork.framework */; }; 1FBEBF4D1319FCDE006D5497 /* AsyncSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FBEBF4C1319FCDE006D5497 /* AsyncSocket.m */; }; 1FBEBFEF131A97F8006D5497 /* GGSNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FBEBFEE131A97F8006D5497 /* GGSNetwork.m */; }; @@ -26,6 +30,10 @@ 1D3623250D0F684500981E51 /* PongAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PongAppDelegate.m; sourceTree = ""; }; 1D6058910D05DD3D006BFB54 /* Pong.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Pong.app; sourceTree = BUILT_PRODUCTS_DIR; }; 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 1F369FF513233C1E004E7A99 /* lost.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = lost.wav; sourceTree = ""; }; + 1F369FF613233C1E004E7A99 /* ping.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = ping.wav; sourceTree = ""; }; + 1F369FF713233C1E004E7A99 /* pong.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = pong.wav; sourceTree = ""; }; + 1F36A00613233CCC004E7A99 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; 1FBEBF471319FC56006D5497 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; }; 1FBEBF4B1319FCDE006D5497 /* AsyncSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsyncSocket.h; sourceTree = ""; }; 1FBEBF4C1319FCDE006D5497 /* AsyncSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AsyncSocket.m; sourceTree = ""; }; @@ -51,6 +59,7 @@ 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */, 1FBEBF481319FC56006D5497 /* CFNetwork.framework in Frameworks */, + 1F36A00713233CCC004E7A99 /* AVFoundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -115,6 +124,9 @@ children = ( 2899E5210DE3E06400AC0155 /* PongViewController.xib */, 28AD733E0D9D9553002E5188 /* MainWindow.xib */, + 1F369FF513233C1E004E7A99 /* lost.wav */, + 1F369FF613233C1E004E7A99 /* ping.wav */, + 1F369FF713233C1E004E7A99 /* pong.wav */, 8D1107310486CEB800E47090 /* Pong-Info.plist */, ); name = Resources; @@ -127,6 +139,7 @@ 1D30AB110D05D00D00671497 /* Foundation.framework */, 288765A40DF7441C002DB57D /* CoreGraphics.framework */, 1FBEBF471319FC56006D5497 /* CFNetwork.framework */, + 1F36A00613233CCC004E7A99 /* AVFoundation.framework */, ); name = Frameworks; sourceTree = ""; @@ -182,6 +195,9 @@ files = ( 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */, 2899E5220DE3E06400AC0155 /* PongViewController.xib in Resources */, + 1F369FF813233C1E004E7A99 /* lost.wav in Resources */, + 1F369FF913233C1E004E7A99 /* ping.wav in Resources */, + 1F369FFA13233C1E004E7A99 /* pong.wav in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/games/Pong/lost.wav b/games/Pong/lost.wav new file mode 100644 index 0000000..0ca32c6 Binary files /dev/null and b/games/Pong/lost.wav differ diff --git a/games/Pong/ping.wav b/games/Pong/ping.wav new file mode 100644 index 0000000..581c6a9 Binary files /dev/null and b/games/Pong/ping.wav differ diff --git a/games/Pong/pong.wav b/games/Pong/pong.wav new file mode 100644 index 0000000..00120c8 Binary files /dev/null and b/games/Pong/pong.wav differ diff --git a/src/ggs_coordinator.erl b/src/ggs_coordinator.erl index 1f60425..59d181a 100644 --- a/src/ggs_coordinator.erl +++ b/src/ggs_coordinator.erl @@ -102,7 +102,6 @@ init([]) -> handle_call(join_lobby, From, State) -> Token = helpers:get_new_token(), Players = State#co_state.players, - io:format("join_lobby from: ~p~n", [From]), {Pid, _Sock} = From, NewState = State#co_state{players = [{Pid, Token} | Players]}, back_up(NewState), diff --git a/src/ggs_gamevm_p.erl b/src/ggs_gamevm_p.erl index bd1beb3..4d4cd67 100644 --- a/src/ggs_gamevm_p.erl +++ b/src/ggs_gamevm_p.erl @@ -191,8 +191,9 @@ intern_start(Table, Player) -> true -> ggs_table:notify_all_players(Table, {"game", "start"}), ggs_db:setItem(Table, local_storage, ball, {50,50,1,1}), - spawn(fun() -> game_loop([Table]) end); - false -> + Pid = spawn(fun() -> game_loop([Table]) end), + Pid ! tick; + _Other -> ggs_table:send_command(Table, Player, {"game", "wait"}) end; player2 -> @@ -202,8 +203,9 @@ intern_start(Table, Player) -> true -> ggs_table:notify_all_players(Table, {"game", "start"}), ggs_db:setItem(Table, local_storage, ball, {50,50,-1,-1}), - spawn(fun() -> game_loop([Table]) end); - false -> + GameLoop = spawn(fun() -> game_loop([Table]) end), + GameLoop ! tick; + _Other -> ggs_table:send_command(Table, Player, {"game", "wait"}) end end. @@ -215,18 +217,19 @@ game_loop([Table]) -> Ball = {BX, BY, SX, SY}, ggs_db:setItem(Table, local_storage, ball, Ball), ggs_table:notify_all_players(Table, {"ball", int2str(BX) ++ "," ++ int2str(BY)}), - check_ball(Table, Ball); + check_ball(Table, Ball), + timer:send_after(50, tick), + game_loop([Table]); 'EXIT' -> exit(normal) - after 5000 -> - self() ! tick end. int2str(Int) -> lists:flatten(io_lib:format("~p", [Int])). step_ball({BX, BY, SX, SY}) -> - {BX + SX, BY + SY, SX, BY}. + Ball = {BX + SX, BY + SY, SX, SY}, + Ball. check_ball(Table, {BX, BY, SX, SY}) -> % check up and down bounds @@ -237,43 +240,52 @@ check_ball(Table, {BX, BY, SX, SY}) -> NewSY = SY end, - % check intersection with player1 + % check intersection with a player P1Y = ggs_db:getItem(Table, local_storage, player1_y), - case check_intersect({0, P1Y, 10, 30}, {BX, BY, 10, 10}) of - true -> - SX1 = -SX; - false -> - SX1 = SX - end, - - % check intersection with player2 P2Y = ggs_db:getItem(Table, local_storage, player2_y), - case check_intersect({90, P2Y, 10, 30}, {BX, BY, 10, 10}) of + case (check_intersect({0, P1Y, 10, 30}, {BX, BY, 10, 10}) or check_intersect({99, P2Y, 10, 30}, {BX, BY, 10, 10})) of true -> - SX2 = - SX1; + NewSX = -SX, + case NewSX of + -1 -> + ggs_table:notify_all_players(Table, {"sound", "ping"}); + 1 -> + ggs_table:notify_all_players(Table, {"sound", "pong"}) + end; false -> - SX2 = SX1 + NewSX = SX end, - ggs_db:setItem(Table, local_storage, ball, {BX, BY , SX2, NewSY}), + ggs_db:setItem(Table, local_storage, ball, {BX, BY , NewSX, NewSY}), + % check for point player1 - if BX > 90 -> - Player1Points = ggs_db:getItem(Table, local_storage, player1_points), - NewPlayer1Points = Player1Points + 1, - ggs_db:setItem(Table, local_storage, player1_points, NewPlayer1Points), - ggs_table:notify_all_players(Table, {"player1_points", int2str(NewPlayer1Points)}), - exit(normal) + case BX > 100 of + true -> + Player1Points = ggs_db:getItem(Table, local_storage, player1_points), + NewPlayer1Points = Player1Points + 1, + ggs_db:setItem(Table, local_storage, player1_points, NewPlayer1Points), + ggs_table:notify_all_players(Table, {"player1_points", int2str(NewPlayer1Points)}), + exit(normal); + false -> + ok end, % check for point player2 - if BX < 0 -> - Player2Points = ggs_db:getItem(Table, local_storage, player2_points), - NewPlayer2Points = Player2Points + 1, - ggs_db:setItem(Table, local_storage, player2_points, NewPlayer2Points), - ggs_table:notify_all_players(Table, {"player2_points", int2str(NewPlayer2Points)}), - exit(normal) + case BX < 0 of + true -> + Player2Points = ggs_db:getItem(Table, local_storage, player2_points), + NewPlayer2Points = Player2Points + 1, + ggs_db:setItem(Table, local_storage, player2_points, NewPlayer2Points), + ggs_table:notify_all_players(Table, {"player2_points", int2str(NewPlayer2Points)}), + exit(normal); + false -> + ok end. - - -check_intersect({AX, AY, AW, AH}, {BX, BY, BW, BH}) -> - not (BX > (AX + AW)) or ((BX + BW) < AX) or (BY > (AY + AH)) or ((BY + BH) < AY). + + +check_intersect({AX1, AY1, AW, AH}, {BX1, BY1, BW, BH}) -> + AX2 = AX1 + AW, + AY2 = AY1 + AH, + BX2 = BX1 + BW, + BY2 = BY1 + BH, + (AX1 < BX2) and (AX2 > BX1) and (AY1 < BY2) and (AY2 > BY1). diff --git a/src/ggs_player.erl b/src/ggs_player.erl index 9146799..d6e939e 100644 --- a/src/ggs_player.erl +++ b/src/ggs_player.erl @@ -40,7 +40,6 @@ start_link(Socket) -> %% @spec notify(Player::Pid(), From::Pid(), %% {Command::String(), Message::string()}) -> ok notify(Player, From, Message) -> - erlang:display(Message), {Cmd, Data} = Message, Parsed = ggs_protocol:create_message(Cmd, "text","text", Data), Player ! {notify, From, Parsed}. @@ -62,14 +61,10 @@ stop(_Player,_Table) -> loop(#pl_state{token = _Token, socket = Socket, table = Table} = State) -> receive {tcp, Socket, Data} -> % Just echo for now.. - io:format("Parsing via protocol module..~n"), - erlang:display(Data), Parsed = ggs_protocol:parse(Data), - erlang:display(Parsed), self() ! Parsed, loop(State); {notify, _From, Message} -> - erlang:display(Message), gen_tcp:send(Socket, Message), loop(State); % Below are messages generated by the parser diff --git a/src/ggs_table.erl b/src/ggs_table.erl index 57785e8..909f789 100644 --- a/src/ggs_table.erl +++ b/src/ggs_table.erl @@ -44,7 +44,6 @@ remove_player(Table, Player) -> %% @doc Get a list of all player processes attached to this table get_player_list(TableToken) -> TablePid = ggs_coordinator:table_token_to_pid(TableToken), - erlang:display(TablePid), gen_server:call(TablePid, get_player_list). % @doc stops the table process @@ -88,7 +87,6 @@ handle_call({remove_player, Player}, _From, #state { players = Players } = State {reply, ok, State#state { players = Players -- [Player] }}; handle_call(get_player_list, _From, #state { players = Players } = State) -> - io:format("Players: ~p~n", [Players]), TokenPlayers = lists:map( fun (Pid) -> ggs_coordinator:player_pid_to_token(Pid) end, Players), {reply, {ok, TokenPlayers}, State}; diff --git a/tests/tick.erl b/tests/tick.erl new file mode 100644 index 0000000..0d21220 --- /dev/null +++ b/tests/tick.erl @@ -0,0 +1,26 @@ +-module(tick). +-export([start/0]). + +start() -> + spawn(fun() -> loop() end). + +loop() -> + receive + tick -> + erlang:display("tick!"), + timer:send_after(500, tick), + loop(); + 'EXIT' -> + exit(normal) + end. + +% 1> c(tick). +% {ok,tick} +% 2> Pid = tick:start(). +% <0.38.0> +% % Nothing happens :-( + +% When I send it myself then it responds +% 3> Pid ! tick. +% tick +% 5>