|
@@ -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);
|
|
|
+}
|