// // JumpGameMode.m // Cart Collect // // Created by Starla Insigna on 8/17/11. // Copyright 2011 Four Island. All rights reserved. // #import "JumpGameMode.h" #define kMinimumGestureLength 50 @implementation JumpGameMode - (id)init { self = [super init]; if (nil != self) { water = [CCSprite spriteWithFile:@"water.png"]; water.position = ccp(240, -80); [self addChild:water]; self.isTouchEnabled = YES; waterTick = 0; wave = NO; } return self; } - (void)onEnterTransitionDidFinish { [super onEnterTransitionDidFinish]; [self scheduleDelayedAction:^{ wave = YES; } delay:3.0f]; } - (void)tick:(ccTime)dt { [super tick:dt]; if (wave) { waterTick++; water.position = ccp(240, 160 * sin(waterTick / (36 * M_PI)) - 80); if (waterTick == 180) { wave = NO; [self scheduleDelayedAction:^{ wave = YES; } delay:10.0f]; } else if (waterTick == 360) { wave = NO; waterTick = 0; } } if (jump) { jumpTick++; cart.sprite.position = ccp(cart.sprite.position.x, MAX(100 * sin(jumpTick / (2 * M_PI)) + 22, water.position.y+80+11)); if (jumpTick == 20) { jump = NO; jumpTick = 0; } } else { cart.sprite.position = ccp(cart.sprite.position.x, MAX(22, water.position.y+80+11)); } } - (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch* touch = [touches anyObject]; gestureStartPoint = [touch locationInView:nil]; } - (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch* touch = [touches anyObject]; CGPoint gestureCurrentPosition = [touch locationInView:nil]; CGFloat angle = atan2f(gestureCurrentPosition.y - gestureStartPoint.y, gestureCurrentPosition.x - gestureStartPoint.x); CGFloat distance = sqrt(powf((gestureCurrentPosition.x - gestureStartPoint.x),2) + powf((gestureCurrentPosition.y - gestureStartPoint.y),2)); if ((distance >= kMinimumGestureLength) && (angle >= expectedAngle - M_PI_4) && (angle <= expectedAngle + M_PI_4) && (cart.sprite.position.y == 22)) { jump = YES; } } - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { [super accelerometer:accelerometer didAccelerate:acceleration]; expectedAngle = acceleration.y*M_PI_2; } @end