/******************************************************************** * Nomes: Gabriel Capella Números USP: 8962078 * João Herique Luciano 8535957 * * Tarefa: RedCore - EP2 MAC0463 * Arquivo: BeginScene.cpp * Descrição: Classe para tela inicial do jogo. ********************************************************************/ #include "BeginScene.h" #include "GameScene.h" #include "SimpleAudioEngine.h" #include "GameScene/Ball.h" #include "params.h" USING_NS_CC; Scene* BeginScene::createScene() { auto scene = Scene::createWithPhysics(); Size visibleSize = Director::getInstance()->getVisibleSize(); #if DEBUG scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL); #endif auto layer = BeginScene::create(); scene->addChild(layer); auto material = PHYSICSBODY_MATERIAL_DEFAULT; material.density = 1.0f; material.restitution = 1.0f; material.friction = 0.0f; // the edge of the screen auto body = PhysicsBody::createEdgeBox(visibleSize, material); auto edgeNode = Node::create(); edgeNode->setPosition(Point(visibleSize.width/2,visibleSize.height/2)); body->setDynamic(false); edgeNode->setPhysicsBody(body); scene->addChild(edgeNode); return scene; } bool BeginScene::init() { if (!Layer::init()) { return false; } auto visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); // Adiona o fundo auto bg = cocos2d::LayerColor::create(COLOR_back); this->addChild(bg); auto menu_item_start = MenuItemFont::create(MSG_START, CC_CALLBACK_0(BeginScene::Play, this)); menu_item_start->setFontNameObj(FONT); menu_item_start->setPosition(Point(visibleSize.width / 2, (visibleSize.height*0.25))); auto *menu = Menu::create(menu_item_start, NULL); menu->setPosition(Point(0, 0)); this->addChild(menu, 10); for (int i = 0; i < 10; i++) { auto ball = Ball::create(); ball->setPosition(visibleSize.width / 2, BALL_SIZE*2); ball->throwBall(); this->addChild(ball); } auto core = DrawNode::create(); core->drawDot(Vec2(0, 0), CORE_RADIUS*4, Color4F(COLOR_red)); core->setPosition(Point(visibleSize.width / 2, (visibleSize.height*0.75))); this->addChild(core); auto physicsBody = PhysicsBody::createCircle(CORE_RADIUS*4, PhysicsMaterial(0.1f, 0.9f, 0.0f)); physicsBody->setDynamic(false); core->addComponent(physicsBody); auto text = Label::createWithTTF(MSG_TITLE, FONT, 100); text->setPosition(core->getPosition()); this->addChild(text); double last, diff; int level; UserDefault *userdata = UserDefault::getInstance(); level = userdata->getIntegerForKey("level"); last = userdata->getDoubleForKey("time"); unsigned long int sec = time(NULL); diff = 3600 * LOSE_IS + last - sec; while (diff < 0 && level > 0) { last += 3600.0* ((double) LOSE_IS); level--; diff = 3600 * LOSE_IS + last - sec; } userdata->setDoubleForKey("time", last); userdata->setIntegerForKey("level", level); this->level_game = level; char level_text[256]; if (level != 0) { sprintf(level_text,MSG_LEVEL_BACK, level, diff/3600.0); auto textlevel = Label::createWithTTF(level_text, FONT, 20); textlevel->setPosition(menu_item_start->getPositionX(), menu_item_start->getPositionY()-60); this->addChild(textlevel); } return true; } void BeginScene::Play() { auto scene = GameScene::createScene(this->level_game); Director::getInstance()->replaceScene(scene); }