From d19677f9f73d8fe7436982bdf8d40f69d69d1b43 Mon Sep 17 00:00:00 2001 From: Starla Insigna Date: Fri, 12 Aug 2011 09:51:50 -0400 Subject: Added tutorial mode GameLayer was also renamed to ClassicGameMode and its pause functionality and score/lives counters were moved out to GameMode. FallingObjectDelegate was created to allow for custom code to be run when items were caught/missed, something that is used extensively by tutorial mode. Important: Cart Collect's bundle identifier was changed in this revision from com.fourisland.Cart-Collect to com.apatheticink.Cart-Collect, so ensure that before attempting to compile/run this build, you clear your build directory and remove the old version of Cart Collect from your device. Closes #193 --- Classes/GameMode.m | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 107 insertions(+), 5 deletions(-) (limited to 'Classes/GameMode.m') diff --git a/Classes/GameMode.m b/Classes/GameMode.m index 6fa31e5..7afbf20 100644 --- a/Classes/GameMode.m +++ b/Classes/GameMode.m @@ -8,6 +8,7 @@ #import "GameMode.h" #import "FallingObject.h" +#import "MainMenuLayer.h" @implementation GameMode @@ -16,7 +17,7 @@ + (CCScene*)scene { CCScene* scene = [CCScene node]; - + GameMode* layer = [self node]; layer.tag = GAME_LAYER; [scene addChild:layer]; @@ -35,6 +36,30 @@ 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; @@ -45,9 +70,9 @@ [cart accelerometer:accelerometer didAccelerate:acceleration]; } -- (void)onEnter +- (void)onEnterTransitionDidFinish { - [super onEnter]; + [super onEnterTransitionDidFinish]; [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / 60)]; [self schedule:@selector(tick:) interval:1.0f/60.0f]; @@ -61,13 +86,90 @@ { if ([object tick]) { - [object retain]; - [self removeChild:object.sprite cleanup:YES]; [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]; -- cgit 1.4.1