123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- /********************************************************************
- * 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);
- }
|