////////////Template code //////////// Chunk 4 //Deal with ball hitting blocks else if(([nameA containsString:@"Ball"] && [nameB containsString:@"Block"]) || ([nameA containsString:@"Block"] && [nameB containsString:@"Ball"])){ // Figure out which body is exploding SKNode *block; if([nameA containsString:@"Block"]){ block = contact.bodyA.node; } else{ block = contact.bodyB.node; } // Do the build up SKAction *actionAudioRamp = [SKAction playSoundFileNamed:@"sound_block.m4a" waitForCompletion:NO]; NSString *particleRampPath = [[NSBundle mainBundle] pathForResource:@"ParticleRampUp" ofType:@"sks"]; SKEmitterNode *particleRamp = [NSKeyedUnarchiver unarchiveObjectWithFile:particleRampPath]; particleRamp.position = CGPointMake(0,0); particleRamp.zPosition = 0; SKAction *actionParticleRamp = [SKAction runBlock:^{ [block addChild:particleRamp]; }]; //Group SKAction *actionRampSequence = [SKAction group:@[actionAudioRamp,actionParticleRamp]]; SKAction *actionAudioExplode = [SKAction playSoundFileNamed:@"sound_explode.m4a" waitForCompletion:NO]; NSString *particleExplosionPath = [[NSBundle mainBundle] pathForResource:@"ParticleBlock" ofType:@"sks"]; SKEmitterNode *particleExplosion = [NSKeyedUnarchiver unarchiveObjectWithFile:particleExplosionPath]; particleExplosion.position = CGPointMake(0,0); particleExplosion.zPosition = 2; SKAction *actionParticleExplosion = [SKAction runBlock:^{ [block addChild:particleExplosion]; }]; NSString *particleScorePath = [[NSBundle mainBundle] pathForResource:@"ParticleScore" ofType:@"sks"]; SKEmitterNode *particleScore = [NSKeyedUnarchiver unarchiveObjectWithFile:particleScorePath]; particleScore.position = CGPointMake(0,0); particleScore.zPosition = 2; SKAction *actionParticleScore = [SKAction runBlock:^{ [block addChild:particleScore]; }]; SKAction *actionRemoveBlock = [SKAction removeFromParent]; SKAction *actionExplodeSequence = [SKAction sequence:@[actionAudioExplode,actionParticleExplosion,[SKAction fadeOutWithDuration:1]]]; SKAction *checkGameOver = [SKAction runBlock:^{ // Are we out of blocks? If so, game is over. Just wait a second so its // not too abrupt. BOOL anyBlocksRemaining = ([self childNodeWithName:@"Block"] != nil); if (!anyBlocksRemaining) { SKView *skView = (SKView *)self.view; [self removeFromParent]; MyGameOver *scene = [MyGameOver nodeWithFileNamed:@"GameOver"]; scene.scaleMode = SKSceneScaleModeAspectFit; [skView presentScene:scene]; }; }]; [block runAction:[SKAction sequence:@[actionParticleScore,actionRampSequence,actionExplodeSequence,actionRemoveBlock,checkGameOver]]]; }