| 
					
				 | 
			
			
				@@ -14,14 +14,14 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 USING_NS_CC; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Scene* GameScene::createScene() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Scene* GameScene::createScene(int level) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     auto scene = Scene::createWithPhysics(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     Size visibleSize = Director::getInstance()->getVisibleSize(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     //choose whitch part need to draw, Joint, Shape, Contact, None or All 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    //scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    auto layer = GameScene::create(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    GameScene* layer = GameScene::create(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     scene->addChild(layer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     auto material = PHYSICSBODY_MATERIAL_DEFAULT; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -37,6 +37,12 @@ Scene* GameScene::createScene() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     edgeNode->setPhysicsBody(body); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     scene->addChild(edgeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    auto blocks = BlocksLayer::create(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    blocks->setLevel(level); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    blocks->setPosition(visibleSize.width/2, visibleSize.height); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    layer->addChild(blocks, 20); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    layer->setLevel(level); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return scene; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -54,6 +60,7 @@ bool GameScene::init() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     audio->preloadEffect("pipe.wav"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     audio->preloadEffect("metal.wav"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     audio->preloadEffect("bomb.wav"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    audio->preloadEffect("win.wav"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     auto visibleSize = Director::getInstance()->getVisibleSize(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     Vec2 origin = Director::getInstance()->getVisibleOrigin(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -68,10 +75,6 @@ bool GameScene::init() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ball->throwBall(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     this->addChild(ball, 21); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    auto blocks = BlocksLayer::create(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    blocks->setPosition(visibleSize.width/2, visibleSize.height); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    this->addChild(blocks, 20); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     auto raquete = DrawNode::create(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     float py = RAQUETE_HEIGHT/2.0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     float pxl = - RAQUETE_WIDTH/2; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -127,6 +130,11 @@ bool GameScene::init() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     contactListener->onContactBegin = CC_CALLBACK_1(GameScene::onContactBegin, this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     _eventDispatcher->addEventListenerWithSceneGraphPriority(contactListener, this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    UserDefault *userdata = UserDefault::getInstance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //int level = userdata->getIntegerForKey("level"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    userdata->setIntegerForKey("level", 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    userdata->flush(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -135,14 +143,14 @@ bool GameScene::onContactBegin(PhysicsContact& contact) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     auto nodeB = contact.getShapeB()->getBody()->getNode(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (nodeA && nodeB && nodeA->getTag() != nodeB->getTag()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        CCLOG("%d %d", nodeB->getTag(), nodeA->getTag()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //CCLOG("%d %d", nodeB->getTag(), nodeA->getTag()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // sempre B < A 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (nodeB->getTag() == BLOCK_TAG) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             auto audio = CocosDenshion::SimpleAudioEngine::getInstance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             audio->playEffect("pipe.wav"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             nodeB->removeFromParentAndCleanup(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } if (nodeB->getTag() == INDESTRUCTIBLE_BLOCK_TAG) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else 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) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -162,6 +170,14 @@ void GameScene::ball_collision (Node *ball) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     text->setPosition(visibleSize.width/2, visibleSize.height/2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     this->addChild(text); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this->level = -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    auto menu_item_start = MenuItemFont::create("Restart", CC_CALLBACK_1(GameScene::NextLevel, this)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    menu_item_start->setPosition(text->getPosition()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    menu_item_start->setPositionY(menu_item_start->getPositionY()-50); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    auto *menu = Menu::create(menu_item_start, NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    menu->setPosition(Point(0, 0)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this->addChild(menu, 30); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     auto audio = CocosDenshion::SimpleAudioEngine::getInstance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     audio->playEffect("bomb.wav"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ParticleSun* m_emitter = ParticleSun::create(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -175,6 +191,8 @@ void GameScene::ball_core (Node *core, Node *ball) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     auto scaleBy = ScaleBy::create(1.0f, 20.0f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     core->getPhysicsBody()->setEnabled(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     core->runAction(scaleBy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    auto audio = CocosDenshion::SimpleAudioEngine::getInstance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    audio->playEffect("win.wav"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     auto callbackRotate = CallFunc::create([=](){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         auto visibleSize = Director::getInstance()->getVisibleSize(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -192,7 +210,17 @@ void GameScene::ball_core (Node *core, Node *ball) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GameScene::NextLevel(cocos2d::Ref *pSender) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    auto scene = GameScene::createScene(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    auto scene = GameScene::createScene(this->level + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     Director::getInstance()->replaceScene(scene); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     //Director::getInstance()->end(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void GameScene::setLevel(int level) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this->level = level; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    char level_text[256]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sprintf(level_text,"Level %d", this->level); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    auto text = Label::createWithTTF(level_text, "fonts/Marker Felt.ttf", 30); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    text->setAnchorPoint(Vec2()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    text->setPosition(10, 10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this->addChild(text); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |