From 1d9ed882de4e2e3a53cdd5e90edc25e8ae10af1b Mon Sep 17 00:00:00 2001 From: Starla Insigna Date: Sun, 7 Aug 2011 10:04:54 -0400 Subject: Implemented tutorial bubbles GameLayer now has support for pausing game flow and displaying a tutorial bubble that the user can tap to dismiss. No code has been written, however, to make use of this, because I think it may be simpler to abstract GameLayer out somewhat and create a separate game mode for the tutorial. Deliberation required. PauseLayer has also been removed and the behavior has been brought into GameLayer. Refs #193 --- Classes/GameLayer.m | 84 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 79 insertions(+), 5 deletions(-) (limited to 'Classes/GameLayer.m') diff --git a/Classes/GameLayer.m b/Classes/GameLayer.m index 32ca483..2ec8ef5 100755 --- a/Classes/GameLayer.m +++ b/Classes/GameLayer.m @@ -11,6 +11,8 @@ @implementation GameLayer +@synthesize currentTutorial; + + (CCScene*)scene { CCScene* scene = [CCScene node]; @@ -19,9 +21,10 @@ [scene addChild:backgroundLayer]; GameLayer* layer = [GameLayer node]; + layer.tag = GAME_LAYER; [scene addChild:layer]; - scene.tag = 436; + scene.tag = GAME_SCENE; return scene; } @@ -266,13 +269,13 @@ return self; } --(void) onEnter +- (void)onEnter { [super onEnter]; [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / 60)]; - [self schedule:@selector(tick:) interval:1.0f/60.0f]; - [self schedule:@selector(randomlyAddObject:) interval:addSpeed]; + [self schedule:@selector(tick:) interval:1.0f/60.0f]; + [self schedule:@selector(randomlyAddObject:) interval:addSpeed]; } - (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration @@ -295,7 +298,78 @@ - (void)pause { - [[CCDirector sharedDirector] replaceScene:[PauseLayer sceneWithScene:[[CCDirector sharedDirector] runningScene]]]; + if (self.currentTutorial != nil) + { + [self.currentTutorial removeFromSuperview]; + } + + [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; + + if (self.currentTutorial != nil) + { + [[[CCDirector sharedDirector] openGLView] addSubview:self.currentTutorial]; + } else { + [self resumeSchedulerAndActions]; + } +} + +- (void)mainmenu +{ + [[CCDirector sharedDirector] replaceScene:[MainMenuLayer scene]]; +} + +- (void)setCurrentTutorial:(TutorialBubble *)m_currentTutorial +{ + @synchronized(self) + { + if (currentTutorial != m_currentTutorial) + { + [currentTutorial release]; + currentTutorial = [m_currentTutorial retain]; + } + } + + if (currentTutorial != nil) + { + [currentTutorial setTarget:self action:@selector(endTutorial)]; + [[[CCDirector sharedDirector] openGLView] addSubview:currentTutorial]; + [self pauseSchedulerAndActions]; + } +} + +- (void)endTutorial +{ + self.currentTutorial = nil; + [self resumeSchedulerAndActions]; } @end -- cgit 1.4.1