// // GameMode.m // Cart Collect // // Created by Starla Insigna on 8/9/11. // Copyright 2011 Four Island. All rights reserved. // #import "GameMode.h" #import "FallingObject.h" #import "MainMenuLayer.h" @implementation GameMode @synthesize cart, score, lives; + (CCScene*)scene { CCScene* scene = [CCScene node]; GameMode* layer = [self node]; layer.tag = GAME_LAYER; [scene addChild:layer]; scene.tag = GAME_SCENE; return scene; } - (id)init { self = [super init]; if (nil != self) { isAccelerometerEnabled_ = YES; objects = [[NSMutableSet alloc] init]; cart = [[Cart alloc] initWithSprite:[CCSprite spriteWithFile:@"cart.png"]]; cart.sprite.position = ccp(240, 22); cart.sprite.scale = 2; [self addChild:cart.sprite]; scoreLabel = [CCLabelBMFont labelWithString:@"Score: 0" fntFile:@"helvetica2.fnt"]; scoreLabel.position = ccp(50, 300); [self addChild:scoreLabel]; livesLabel = [CCLabelBMFont labelWithString:@"Lives: 3" fntFile:@"helvetica2.fnt"]; livesLabel.position = ccp(50, 280); [self addChild:livesLabel]; score = 0; lives = 3; if ([self canPause]) { CCMenuItemImage* pauseButton = [CCMenuItemImage itemFromNormalImage:@"pause2.png" selectedImage:@"pause.png" target:self selector:@selector(pause)]; CCMenu* pauseMenu = [CCMenu menuWithItems:pauseButton, nil]; [pauseMenu setPosition:ccp(480-8-16, 320-8-16)]; [self addChild:pauseMenu]; } } return self; } - (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration { [cart accelerometer:accelerometer didAccelerate:acceleration]; } - (void)onEnterTransitionDidFinish { [super onEnterTransitionDidFinish]; [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / 60)]; [self schedule:@selector(tick:) interval:1.0f/60.0f]; } - (void)tick:(ccTime)dt { [cart tick]; for (FallingObject* object in objects) { if ([object tick]) { [objects removeObject:object]; } } } - (BOOL)canPause { return YES; } - (void)pause { if ([self canPause]) { [self pauseSchedulerAndActions]; shadedLayer = [CCLayerColor layerWithColor:ccc4(0, 0, 0, 127)]; [[[CCDirector sharedDirector] runningScene] addChild:shadedLayer]; pauseLayer = [CCLayer node]; CCLabelBMFont* scoreLabel2 = [CCLabelBMFont labelWithString:@"PAUSE" fntFile:@"helvetica.fnt"]; scoreLabel2.position = ccp(240,90); [pauseLayer addChild:scoreLabel2]; CCMenuItemImage* pauseButton = [CCMenuItemImage itemFromNormalImage:@"pause2.png" selectedImage:@"pause.png" target:self selector:@selector(unpause)]; CCMenu* pauseMenu = [CCMenu menuWithItems:pauseButton, nil]; [pauseMenu setPosition:ccp(480-8-16, 320-8-16)]; [pauseLayer addChild:pauseMenu]; CCMenuItemImage* newgameMenuItem = [CCMenuItemImage itemFromNormalImage:@"back.png" selectedImage:@"back2.png" target:self selector:@selector(mainmenu)]; CCMenu* myMenu = [CCMenu menuWithItems:newgameMenuItem, nil]; myMenu.position = ccp(240, 60); [pauseLayer addChild:myMenu]; [[[CCDirector sharedDirector] runningScene] addChild:pauseLayer]; } } - (void)unpause { [[[CCDirector sharedDirector] runningScene] removeChild:shadedLayer cleanup:YES]; [[[CCDirector sharedDirector] runningScene] removeChild:pauseLayer cleanup:YES]; shadedLayer = nil; pauseLayer = nil; [self resumeSchedulerAndActions]; } - (void)mainmenu { [[CCDirector sharedDirector] replaceScene:[MainMenuLayer scene]]; } - (void)setScore:(int)m_score { score = m_score; [scoreLabel setString:[NSString stringWithFormat:@"Score: %d", score]]; } - (void)setLives:(int)m_lives { lives = m_lives; [livesLabel setString:[NSString stringWithFormat:@"Lives: %d", lives]]; } - (void)scheduleDelayedAction:(void(^)(void))m_delayedAction delay:(float)delay { delayedAction = Block_copy([m_delayedAction retain]); [self schedule:@selector(runDelayedAction) interval:delay]; } - (void)runDelayedAction { [self unschedule:@selector(runDelayedAction)]; delayedAction(); [delayedAction release]; delayedAction = nil; } - (void)dealloc { [objects release]; [cart release]; [super dealloc]; } @end