| 
					
				 | 
			
			
				@@ -48,6 +48,13 @@ bool GameScene::init() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // https://www.freesound.org/people/schademans/sounds/13290/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    FileUtils::getInstance()->addSearchPath("res"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    auto audio = CocosDenshion::SimpleAudioEngine::getInstance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    audio->preloadEffect("pipe.wav"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    audio->preloadEffect("metal.wav"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    audio->preloadEffect("bomb.wav"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     auto visibleSize = Director::getInstance()->getVisibleSize(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     Vec2 origin = Director::getInstance()->getVisibleOrigin(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -130,12 +137,14 @@ bool GameScene::onContactBegin(PhysicsContact& contact) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (nodeA && nodeB && nodeA->getTag() != nodeB->getTag()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         CCLOG("%d %d", nodeB->getTag(), nodeA->getTag()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (nodeA->getTag() == BLOCK_TAG) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            nodeA->removeFromParentAndCleanup(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else if (nodeB->getTag() == BLOCK_TAG) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // sempre B < A 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (nodeB->getTag() == BLOCK_TAG) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            auto audio = CocosDenshion::SimpleAudioEngine::getInstance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            audio->playEffect("pipe.wav"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             nodeB->removeFromParentAndCleanup(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else if (nodeA->getTag() == BOTTOM_TAG && nodeB->getTag() == BALL_TAG) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ball_collision(nodeB); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } if (nodeB->getTag() == INDESTRUCTIBLE_BLOCK_TAG) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            auto audio = CocosDenshion::SimpleAudioEngine::getInstance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            audio->playEffect("metal.wav"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } else if (nodeB->getTag() == BOTTOM_TAG && nodeA->getTag() == BALL_TAG) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ball_collision(nodeA); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }  else if (nodeB->getTag() == CORE_TAG && nodeA->getTag() == BALL_TAG) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -144,11 +153,17 @@ bool GameScene::onContactBegin(PhysicsContact& contact) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ball_core(nodeA, nodeB); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    //bodies can collide 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GameScene::ball_collision (Node *ball) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    auto visibleSize = Director::getInstance()->getVisibleSize(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    auto text = Label::createWithTTF("Game Over...", "fonts/Marker Felt.ttf", 40); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    text->setPosition(visibleSize.width/2, visibleSize.height/2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this->addChild(text); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    auto audio = CocosDenshion::SimpleAudioEngine::getInstance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    audio->playEffect("bomb.wav"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ParticleSun* m_emitter = ParticleSun::create(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     m_emitter->setPosition(ball->getPosition()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     m_emitter->setDuration(1); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -163,7 +178,7 @@ void GameScene::ball_core (Node *core, Node *ball) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     auto callbackRotate = CallFunc::create([=](){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         auto visibleSize = Director::getInstance()->getVisibleSize(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        auto menu_item_start = MenuItemFont::create("Next Level"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        auto menu_item_start = MenuItemFont::create("Next Level", CC_CALLBACK_1(GameScene::NextLevel, this)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         menu_item_start->setPosition(Point(visibleSize.width / 2, (visibleSize.height / 2))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         auto *menu = Menu::create(menu_item_start, NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         menu->setPosition(Point(0, 0)); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -175,3 +190,9 @@ void GameScene::ball_core (Node *core, Node *ball) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     core->runAction(seq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ball->removeFromParentAndCleanup(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void GameScene::NextLevel(cocos2d::Ref *pSender) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    auto scene = GameScene::createScene(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Director::getInstance()->replaceScene(scene); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //Director::getInstance()->end(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |