// // GameLayer.m // Cart Collect // // Created by iD Student Account on 7/18/11. // Copyright 2011 __MyCompanyName__. All rights reserved. // #import "GameLayer.h" #import "FallingObject.h" #import "Cherry.h" #import "Bottle.h" #import "OneUp.h" #import "Rock.h" #import "GameOverLayer.h" #import "SimpleAudioEngine.h" #import "MainMenuLayer.h" @implementation GameLayer @synthesize currentTutorial; - (void)tick:(ccTime)dt { int lastScore = score; [super tick:dt]; if (lives == 0) { [self unscheduleAllSelectors]; [[CCDirector sharedDirector] replaceScene:[CCTransitionSlideInT transitionWithDuration:1.5f scene:[GameOverLayer sceneWithScore:score]]]; } else if (score > lastScore) { if ((lastScore < 6500) && (score >= 6500)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:0.6f]; addSpeed = 0.6f; } else if ((lastScore < 4500) && (score >= 4500)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:0.7f]; addSpeed = 0.7f; } else if ((lastScore < 2500) && (score >= 2500)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:0.8f]; addSpeed = 0.8f; } else if ((lastScore < 1500) && (score >= 1500)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:0.9f]; addSpeed = 0.9f; } else if ((lastScore < 500) && (score >= 500)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:1.0f]; addSpeed = 1.0f; } else if ((lastScore < 150) && (score >= 150)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:2.0f]; addSpeed = 2.0f; } } } - (void)randomlyAddObject:(ccTime)dt { FallingObject* object; int oneuppercent = 98 - (lives == 1 ? 1 : 0); if (score < 1000) { int randomval = arc4random()%100; if (randomval < 65) { object = [[Cherry alloc] init]; } else if (randomval < oneuppercent) { object = [[Bottle alloc] init]; } else { object = [[OneUp alloc] init]; } } else { int randomval = arc4random()%100; if (randomval < 40) { object = [[Cherry alloc] init]; } else if (randomval < 70) { object = [[Rock alloc] init]; } else if (randomval < oneuppercent) { object = [[Bottle alloc] init]; } else { object = [[OneUp alloc] init]; } } int objectX = arc4random()%448+16; object.sprite.position = ccp(objectX, 360); object.sprite.scale = 1; [self addChild:object.sprite]; [objects addObject:object]; [object release]; if (score >= 2000) { if (arc4random() % 100 > 80) { object = [[Rock alloc] init]; objectX = arc4random()%448+16; object.sprite.position = ccp(objectX, 360); object.sprite.scale = 1; [self addChild:object.sprite]; [objects addObject:object]; [object release]; } } if (score >= 4000) { if (arc4random() % 100 > 80) { object = [[Rock alloc] init]; objectX = arc4random()%448+16; object.sprite.position = ccp(objectX, 360); object.sprite.scale = 1; [self addChild:object.sprite]; [objects addObject:object]; [object release]; } } } - (id)init { self = [super init]; int winWidth = [CCDirector sharedDirector].winSize.width; //int winHeight = [CCDirector sharedDirector].winSize.height; int cartScale = 2; if (self != nil) { CCSprite* backgroundImage = [CCSprite spriteWithFile:@"SeaBeach.png"]; backgroundImage.position = ccp(240, 160); [self addChild:backgroundImage z:0]; cart = [[Cart alloc] initWithSprite:[CCSprite spriteWithFile:@"cart.png"]]; cart.sprite.position = ccp(winWidth/2, 22); cart.sprite.scale = cartScale; [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; 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]; addSpeed = 2.5f; } return self; } - (void)onEnter { [super onEnter]; [self schedule:@selector(randomlyAddObject:) interval:addSpeed]; } - (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)pause { 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