diff options
Diffstat (limited to 'Classes/GameLayer.m')
-rwxr-xr-x | Classes/GameLayer.m | 149 |
1 files changed, 29 insertions, 120 deletions
diff --git a/Classes/GameLayer.m b/Classes/GameLayer.m index 2ec8ef5..95bc83b 100755 --- a/Classes/GameLayer.m +++ b/Classes/GameLayer.m | |||
@@ -7,109 +7,29 @@ | |||
7 | // | 7 | // |
8 | 8 | ||
9 | #import "GameLayer.h" | 9 | #import "GameLayer.h" |
10 | 10 | #import "FallingObject.h" | |
11 | #import "Cherry.h" | ||
12 | #import "Bottle.h" | ||
13 | #import "OneUp.h" | ||
14 | #import "Rock.h" | ||
15 | #import "GameOverLayer.h" | ||
16 | #import "SimpleAudioEngine.h" | ||
17 | #import "MainMenuLayer.h" | ||
11 | 18 | ||
12 | @implementation GameLayer | 19 | @implementation GameLayer |
13 | 20 | ||
14 | @synthesize currentTutorial; | 21 | @synthesize currentTutorial; |
15 | 22 | ||
16 | + (CCScene*)scene | ||
17 | { | ||
18 | CCScene* scene = [CCScene node]; | ||
19 | |||
20 | CCLayerColor* backgroundLayer = [CCLayerColor layerWithColor:ccc4(255, 255, 255, 255)]; | ||
21 | [scene addChild:backgroundLayer]; | ||
22 | |||
23 | GameLayer* layer = [GameLayer node]; | ||
24 | layer.tag = GAME_LAYER; | ||
25 | [scene addChild:layer]; | ||
26 | |||
27 | scene.tag = GAME_SCENE; | ||
28 | |||
29 | return scene; | ||
30 | } | ||
31 | |||
32 | - (void)tick:(ccTime)dt | 23 | - (void)tick:(ccTime)dt |
33 | { | 24 | { |
34 | // Move the cart based on acceleration gathered from accelerometer | ||
35 | cartSprite.position = ccp(MIN(MAX(cartSprite.position.x+accelX, 16),464), cartSprite.position.y); | ||
36 | |||
37 | int lastScore = score; | 25 | int lastScore = score; |
38 | 26 | ||
39 | for (FallingObject* object in objects) | 27 | [super tick:dt]; |
40 | { | ||
41 | // Move objects down | ||
42 | object.sprite.position = ccp(object.sprite.position.x, object.sprite.position.y-object.weight); | ||
43 | |||
44 | // Cart collision detection | ||
45 | CGSize first = [cartSprite boundingBox].size; | ||
46 | CGSize second = [object.sprite boundingBox].size; | ||
47 | |||
48 | if (cartSprite.position.x > (object.sprite.position.x - second.width/2 - first.width/2)) | ||
49 | { | ||
50 | if (cartSprite.position.x < (object.sprite.position.x + second.width/2 + first.width/2)) | ||
51 | { | ||
52 | if (cartSprite.position.y > (object.sprite.position.y - second.height/2 - first.height/2)) | ||
53 | { | ||
54 | if (cartSprite.position.y < (object.sprite.position.y + second.height/2 + first.height/2)) | ||
55 | { | ||
56 | [object retain]; | ||
57 | [objects removeObject:object]; | ||
58 | |||
59 | // If a cart collides with an object, it's going to vanish no matter what | ||
60 | [object.sprite.parent removeChild:object.sprite cleanup:YES]; | ||
61 | |||
62 | NSString* audioFile = nil; | ||
63 | if ([object isKindOfClass:[OneUp class]]) | ||
64 | { | ||
65 | audioFile = [[NSBundle mainBundle] pathForResource:@"1up" ofType:@"wav"]; | ||
66 | lives++; | ||
67 | } else if ([object isKindOfClass:[Rock class]]) | ||
68 | { | ||
69 | audioFile = [[NSBundle mainBundle] pathForResource:@"Damage1" ofType:@"wav"]; | ||
70 | lives--; | ||
71 | } else if ([object conformsToProtocol:@protocol(ValuableObject)]) { | ||
72 | audioFile = [[NSBundle mainBundle] pathForResource:@"Item1" ofType:@"wav"]; | ||
73 | score += [((FallingObject<ValuableObject>*)object) pointValue]; | ||
74 | } | ||
75 | |||
76 | if (audioFile != nil) | ||
77 | { | ||
78 | [[SimpleAudioEngine sharedEngine] playEffect:audioFile]; | ||
79 | } | ||
80 | |||
81 | [self updateLabels]; | ||
82 | |||
83 | continue; // Don't check for collision with floor | ||
84 | } | ||
85 | } | ||
86 | } | ||
87 | } | ||
88 | |||
89 | // Collision detection with floor | ||
90 | if (object.sprite.position.y - (object.sprite.contentSize.height/2) < 0) | ||
91 | { | ||
92 | [object retain]; | ||
93 | [objects removeObject:object]; | ||
94 | |||
95 | [object.sprite.parent removeChild:object.sprite cleanup:YES]; | ||
96 | |||
97 | if ([object conformsToProtocol:@protocol(ValuableObject)]) | ||
98 | { | ||
99 | NSString* audioFile = [[NSBundle mainBundle] pathForResource:@"Damage1" ofType:@"wav"]; | ||
100 | [[SimpleAudioEngine sharedEngine] playEffect:audioFile]; | ||
101 | |||
102 | lives--; | ||
103 | |||
104 | [self updateLabels]; | ||
105 | } | ||
106 | } | ||
107 | } | ||
108 | 28 | ||
109 | if (lives == 0) | 29 | if (lives == 0) |
110 | { | 30 | { |
111 | [self unschedule:@selector(randomlyAddObject:)]; | 31 | [self unscheduleAllSelectors]; |
112 | [self unschedule:@selector(tick:)]; | 32 | |
113 | [[CCDirector sharedDirector] replaceScene:[CCTransitionSlideInT transitionWithDuration:1.5f scene:[GameOverLayer sceneWithScore:score]]]; | 33 | [[CCDirector sharedDirector] replaceScene:[CCTransitionSlideInT transitionWithDuration:1.5f scene:[GameOverLayer sceneWithScore:score]]]; |
114 | } else if (score > lastScore) | 34 | } else if (score > lastScore) |
115 | { | 35 | { |
@@ -237,20 +157,12 @@ | |||
237 | backgroundImage.position = ccp(240, 160); | 157 | backgroundImage.position = ccp(240, 160); |
238 | [self addChild:backgroundImage z:0]; | 158 | [self addChild:backgroundImage z:0]; |
239 | 159 | ||
240 | isAccelerometerEnabled_ = YES; | 160 | cart = [[Cart alloc] initWithSprite:[CCSprite spriteWithFile:@"cart.png"]]; |
241 | 161 | cart.sprite.position = ccp(winWidth/2, 22); | |
242 | //cart = [[Cart alloc] init]; | 162 | cart.sprite.scale = cartScale; |
243 | cartSprite = [CCSprite spriteWithFile:@"cart.png"]; | 163 | [self addChild:cart.sprite]; |
244 | cartSprite.position = ccp(winWidth/2, 22); | 164 | |
245 | cartSprite.scale = cartScale; | 165 | scoreLabel = [CCLabelBMFont labelWithString:@"Score: 0" fntFile:@"helvetica2.fnt"]; |
246 | [self addChild:cartSprite]; | ||
247 | |||
248 | objects = [[NSMutableSet alloc] init]; | ||
249 | |||
250 | score = 0; | ||
251 | lives = 3; | ||
252 | |||
253 | scoreLabel = [CCLabelBMFont labelWithString:@"Score: 0" fntFile:@"helvetica2.fnt"]; | ||
254 | scoreLabel.position = ccp(50, 300); | 166 | scoreLabel.position = ccp(50, 300); |
255 | [self addChild:scoreLabel]; | 167 | [self addChild:scoreLabel]; |
256 | 168 | ||
@@ -258,6 +170,9 @@ | |||
258 | livesLabel.position = ccp(50, 280); | 170 | livesLabel.position = ccp(50, 280); |
259 | [self addChild:livesLabel]; | 171 | [self addChild:livesLabel]; |
260 | 172 | ||
173 | score = 0; | ||
174 | lives = 3; | ||
175 | |||
261 | CCMenuItemImage* pauseButton = [CCMenuItemImage itemFromNormalImage:@"pause2.png" selectedImage:@"pause.png" target:self selector:@selector(pause)]; | 176 | CCMenuItemImage* pauseButton = [CCMenuItemImage itemFromNormalImage:@"pause2.png" selectedImage:@"pause.png" target:self selector:@selector(pause)]; |
262 | CCMenu* pauseMenu = [CCMenu menuWithItems:pauseButton, nil]; | 177 | CCMenu* pauseMenu = [CCMenu menuWithItems:pauseButton, nil]; |
263 | [pauseMenu setPosition:ccp(480-8-16, 320-8-16)]; | 178 | [pauseMenu setPosition:ccp(480-8-16, 320-8-16)]; |
@@ -273,27 +188,21 @@ | |||
273 | { | 188 | { |
274 | [super onEnter]; | 189 | [super onEnter]; |
275 | 190 | ||
276 | [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / 60)]; | ||
277 | [self schedule:@selector(tick:) interval:1.0f/60.0f]; | ||
278 | [self schedule:@selector(randomlyAddObject:) interval:addSpeed]; | 191 | [self schedule:@selector(randomlyAddObject:) interval:addSpeed]; |
279 | } | 192 | } |
280 | 193 | ||
281 | - (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration | 194 | - (void)setScore:(int)m_score |
282 | { | 195 | { |
283 | static float prevY=0; | 196 | score = m_score; |
284 | 197 | ||
285 | #define kFilterFactor 0.05f | 198 | [scoreLabel setString:[NSString stringWithFormat:@"Score: %d", score]]; |
286 | |||
287 | float accelY = -((float) acceleration.y * kFilterFactor + (1- kFilterFactor)*prevY); | ||
288 | |||
289 | prevY = accelY; | ||
290 | accelX = accelY * 750; | ||
291 | } | 199 | } |
292 | 200 | ||
293 | - (void)updateLabels | 201 | - (void)setLives:(int)m_lives |
294 | { | 202 | { |
295 | [scoreLabel setString:[NSString stringWithFormat:@"Score: %d", score]]; | 203 | lives = m_lives; |
296 | [livesLabel setString:[NSString stringWithFormat:@"Lives: %d", lives]]; | 204 | |
205 | [livesLabel setString:[NSString stringWithFormat:@"Lives: %d", lives]]; | ||
297 | } | 206 | } |
298 | 207 | ||
299 | - (void)pause | 208 | - (void)pause |