// // Cart.m // Cart Collect // // Created by Starla Insigna on 8/9/11. // Copyright 2011 Four Island. All rights reserved. // #import "Cart.h" @implementation Cart @synthesize sprite, immobile, delegate, falling, boundedByScreen; - (id)initWithSprite:(CCSprite*)m_sprite { self = [super init]; if (nil != self) { sprite = m_sprite; immobile = NO; falling = NO; boundedByScreen = YES; } return self; } - (void)tick { if (!immobile) { // Move the cart based on acceleration gathered from accelerometer CGPoint prevLoc = sprite.position; if (boundedByScreen) { sprite.position = ccp(MIN(MAX(sprite.position.x+accelX, 16),464), sprite.position.y); } else { sprite.position = ccp(sprite.position.x+accelX, sprite.position.y); } if ((delegate != nil) && ([delegate respondsToSelector:@selector(cartIsObstructed:)])) { if ([delegate cartIsObstructed:self]) { sprite.position = prevLoc; } } if (falling) { if ((delegate != nil) && ([delegate respondsToSelector:@selector(cartShouldFall:)])) { int bottom = [delegate cartShouldFall:self]; sprite.position = ccp(sprite.position.x, MAX(bottom, sprite.position.y-6)); } else { NSLog(@"Falling is set on a cart without a compatible game mode."); } } } } - (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration { static float prevY=0; #define kFilterFactor 0.05f float accelY = -((float) acceleration.y * kFilterFactor + (1- kFilterFactor)*prevY); prevY = accelY; accelX = accelY * 750; } @end