Browse Source

Adicionando fazedor de powerups

capellaresumo 7 years ago
parent
commit
411db70df8

+ 5 - 5
Classes/BeginScene.cpp

@@ -10,8 +10,9 @@ Scene* BeginScene::createScene() {
     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);
+#if DEBUG
+    scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);
+#endif
     
     auto layer = BeginScene::create();
     scene->addChild(layer);
@@ -31,7 +32,7 @@ Scene* BeginScene::createScene() {
     
     return scene;
 }
-// on "init" you need to initialize your instance
+
 bool BeginScene::init() {
     //////////////////////////////
     // 1. super init first
@@ -95,7 +96,7 @@ bool BeginScene::init() {
     userdata->setDoubleForKey("time", last);
     userdata->setIntegerForKey("level", level);
     
-    this->levels = level;
+    this->levels = 0; // todo!!!! level
     
     char level_text[256];
     if (level != 0) {
@@ -112,7 +113,6 @@ bool BeginScene::init() {
 void BeginScene::Play(cocos2d::Ref *pSender) {
     auto scene = GameScene::createScene(this->levels);
     Director::getInstance()->replaceScene(scene);
-    //Director::getInstance()->end();
 }
 
 

+ 49 - 83
Classes/GameScene.cpp

@@ -111,6 +111,9 @@ bool GameScene::init() {
     balls = Node::create();
     addChild(balls, 21);
     
+    power_ups = Node::create();
+    addChild(power_ups, 20);
+    
     return true;
 }
 
@@ -125,7 +128,7 @@ bool GameScene::onContactBegin(PhysicsContact& contact) {
     auto nodeA = contact.getShapeA()->getBody()->getNode();
     auto nodeB = contact.getShapeB()->getBody()->getNode();
     
-    if (nodeA && nodeB && nodeA->getTag() != nodeB->getTag()) {
+    if (nodeA && nodeB && nodeA->getTag() != nodeB->getTag() && !over) {
         
         if (nodeB->getTag() > nodeA->getTag()) {
             auto tmp = nodeB;
@@ -158,19 +161,19 @@ bool GameScene::onContactBegin(PhysicsContact& contact) {
             caseBallCore(nodeB, nodeA);
         }  else if (nodeB->getTag() == BALL_TAG && nodeA->getTag() == CORE_TAG) {
             caseBallCore(nodeA, nodeB);
-        }  else if (nodeB->getTag() == SAVE_TAG && nodeA->getTag() == RACKET_TAG) {
+        }  else if (nodeB->getTag() == SAVE_TAG && nodeA->getTag() == PADDLE_TAG) {
             caseSaveLevel(nodeB);
-        } else if (nodeB->getTag() == THREE_BALLS_TAG && nodeA->getTag() == RACKET_TAG) {
+        } else if (nodeB->getTag() == THREE_BALLS_TAG && nodeA->getTag() == PADDLE_TAG) {
             caseTripleBalls(nodeB);
-        } else if (nodeB->getTag() == SUPERBALL_TAG && nodeA->getTag() == RACKET_TAG) {
+        } else if (nodeB->getTag() == SUPERBALL_TAG && nodeA->getTag() == PADDLE_TAG) {
             caseSuperBall(nodeB);
-        } else if (nodeB->getTag() == RACKET_BALL_TAG && nodeA->getTag() == RACKET_TAG) {
+        } else if (nodeB->getTag() == PADDLE_BALL_TAG && nodeA->getTag() == PADDLE_TAG) {
             caseRaqueteBall(nodeB);
         } else if (nodeB->getTag() == SAVE_TAG && nodeA->getTag() == BOTTOM_TAG) {
             nodeB->removeFromParentAndCleanup(true);
         } else if (nodeB->getTag() == THREE_BALLS_TAG && nodeA->getTag() == BOTTOM_TAG) {
             nodeB->removeFromParentAndCleanup(true);
-        } else if (nodeB->getTag() == RACKET_BALL_TAG && nodeA->getTag() == BOTTOM_TAG) {
+        } else if (nodeB->getTag() == PADDLE_BALL_TAG && nodeA->getTag() == BOTTOM_TAG) {
             nodeB->removeFromParentAndCleanup(true);
         } else if (nodeB->getTag() == SUPERBALL_TAG && nodeA->getTag() == BOTTOM_TAG) {
             nodeB->removeFromParentAndCleanup(true);
@@ -192,6 +195,7 @@ void GameScene::caseBallCollision (Node *ball) {
     
     if (balls->getChildrenCount() == 0) {
         over = true;
+        removeBallsAndPowersUP ();
         auto text = Label::createWithTTF(MSG_OVER, FONT, 40);
         text->setPosition(width/2, height/2);
         addChild(text);
@@ -202,7 +206,6 @@ void GameScene::caseBallCollision (Node *ball) {
         auto *menu = Menu::create(menu_item_start, NULL);
         menu->setPosition(Point(0, 0));
         addChild(menu, 30);
-        balls->removeFromParentAndCleanup(true);
     }
 }
 
@@ -212,10 +215,11 @@ void GameScene::caseBallCore (Node *core, Node *ball) {
     core->runAction(scaleBy);
     auto audio = CocosDenshion::SimpleAudioEngine::getInstance();
     audio->playEffect("win.wav");
-    
     auto callbackRotate = CallFunc::create([=](){
+        removeBallsAndPowersUP();
         level = level + 1;
         auto menu_item_start = MenuItemFont::create(MSG_NEXT_LEVEL, CC_CALLBACK_1(GameScene::NextLevel, this));
+        menu_item_start->setFontNameObj(FONT);
         menu_item_start->setPosition(Point(width / 2, (height / 2)));
         auto *menu = Menu::create(menu_item_start, NULL);
         menu->setPosition(Point(0, 0));
@@ -256,29 +260,13 @@ void GameScene::setLevel(int level) {
 void GameScene::saveLevel() {
     if (over) return;
     
-    if (rand_0_1() < DROP_LEVEL_SAVE){
-        auto ball_draw = DrawNode::create();
-        ball_draw->drawDot(Vec2(0, 0), BALL_SIZE/3.0, Color4F(COLOR_green));
-        
-        auto physicsBody = PhysicsBody::createCircle(BALL_SIZE/3.0, PhysicsMaterial(0.0f, 1.0f, 0.0f));
-        physicsBody->setGravityEnable(true);
-        physicsBody->setVelocity(Vec2(0,0));
-        physicsBody->setLinearDamping(0.0);
-        physicsBody->setMass(1.0f);
-        physicsBody->setContactTestBitmask(0xFFFFFFFF);
-        physicsBody->setGroup(-1);
-        ball_draw->addComponent(physicsBody);
-        ball_draw->setTag(SAVE_TAG);
-        
-        ball_draw->setPosition(width * rand_0_1(), height);
-        addChild(ball_draw, 20);
-    }
-    
-    auto delay = DelayTime::create(1.0);
+    if (rand_0_1() < DROP_LEVEL_SAVE)
+        createPowerUpBody(COLOR_green, SAVE_TAG);
+
+    auto delay = DelayTime::create(POWER_UP_INTERVAL);
     CallFunc *runCallback = CallFunc::create(CC_CALLBACK_0(GameScene::saveLevel, this));
     auto seq = Sequence::create(delay, runCallback, nullptr);
     runAction(seq);
-    
 }
 
 // Power-up: deixa 3 bolas na tela ao invés de 1
@@ -288,25 +276,10 @@ void GameScene::tripleBallsAppearance() {
     
     if (rand_0_1() < delta*DROP_TRIPLE_BALL){
         last_touch = time(NULL);
-        
-        auto ball_draw = DrawNode::create();
-        ball_draw->drawDot(Vec2(0, 0), BALL_SIZE/3.0, Color4F(COLOR_pink));
-        
-        auto physicsBody = PhysicsBody::createCircle(BALL_SIZE/3.0, PhysicsMaterial(0.0f, 1.0f, 0.0f));
-        physicsBody->setGravityEnable(true);
-        physicsBody->setVelocity(Vec2(0,0));
-        physicsBody->setLinearDamping(0.0);
-        physicsBody->setMass(1.0f);
-        physicsBody->setContactTestBitmask(0xFFFFFFFF);
-        physicsBody->setGroup(-1);
-        ball_draw->addComponent(physicsBody);
-        ball_draw->setTag(THREE_BALLS_TAG);
-        
-        ball_draw->setPosition(width * rand_0_1(), height);
-        addChild(ball_draw, 20);
+        createPowerUpBody(COLOR_pink, THREE_BALLS_TAG);
     }
     
-    auto delay = DelayTime::create(1.0);
+    auto delay = DelayTime::create(POWER_UP_INTERVAL);
     CallFunc *runCallback = CallFunc::create(CC_CALLBACK_0(GameScene::tripleBallsAppearance, this));
     auto seq = Sequence::create(delay, runCallback, nullptr);
     runAction(seq);
@@ -322,25 +295,10 @@ void GameScene::caseTripleBalls(Node *powerup_ball) {
 void GameScene::paddleBallAppearance() {
     if (over) return;
     
-    if (rand_0_1() < DROP_RACKET_BALL && over == false){
-        auto ball_draw = DrawNode::create();
-        ball_draw->drawDot(Vec2(0, 0), BALL_SIZE/3.0, Color4F(COLOR_blue));
-        
-        auto physicsBody = PhysicsBody::createCircle(BALL_SIZE/3.0, PhysicsMaterial(0.0f, 1.0f, 0.0f));
-        physicsBody->setGravityEnable(true);
-        physicsBody->setVelocity(Vec2(0,0));
-        physicsBody->setLinearDamping(0.0);
-        physicsBody->setMass(1.0f);
-        physicsBody->setContactTestBitmask(0xFFFFFFFF);
-        physicsBody->setGroup(-1);
-        ball_draw->addComponent(physicsBody);
-        ball_draw->setTag(RACKET_BALL_TAG);
-        
-        ball_draw->setPosition(width * rand_0_1(), height);
-        addChild(ball_draw, 20);
-    }
+    if (rand_0_1() < DROP_PADDLE_BALL && over == false)
+        createPowerUpBody(COLOR_blue, PADDLE_BALL_TAG);
     
-    auto delay = DelayTime::create(1.0);
+    auto delay = DelayTime::create(POWER_UP_INTERVAL);
     CallFunc *runCallback = CallFunc::create(CC_CALLBACK_0(GameScene::paddleBallAppearance, this));
     auto seq = Sequence::create(delay, runCallback, nullptr);
     runAction(seq);
@@ -376,27 +334,10 @@ void GameScene::alert(std::string text) {
 void GameScene::superBallAppearance() {
     if (over) return;
     
-    if (rand_0_1() < DROP_SUPER_BALL){
-        last_touch = time(NULL);
-        
-        auto ball_draw = DrawNode::create();
-        ball_draw->drawDot(Vec2(0, 0), BALL_SIZE/3.0, Color4F(COLOR_orange));
-        
-        auto physicsBody = PhysicsBody::createCircle(BALL_SIZE/3.0, PhysicsMaterial(0.0f, 1.0f, 0.0f));
-        physicsBody->setGravityEnable(true);
-        physicsBody->setVelocity(Vec2(0,0));
-        physicsBody->setLinearDamping(0.0);
-        physicsBody->setMass(1.0f);
-        physicsBody->setContactTestBitmask(0xFFFFFFFF);
-        physicsBody->setGroup(-1);
-        ball_draw->addComponent(physicsBody);
-        ball_draw->setTag(SUPERBALL_TAG);
-        
-        ball_draw->setPosition(width * rand_0_1(), height);
-        addChild(ball_draw, 20);
-    }
+    if (rand_0_1() < DROP_SUPER_BALL)
+        createPowerUpBody(COLOR_orange, SUPERBALL_TAG);
     
-    auto delay = DelayTime::create(1.0);
+    auto delay = DelayTime::create(POWER_UP_INTERVAL);
     CallFunc *runCallback = CallFunc::create(CC_CALLBACK_0(GameScene::superBallAppearance, this));
     auto seq = Sequence::create(delay, runCallback, nullptr);
     runAction(seq);
@@ -410,3 +351,28 @@ void GameScene::caseSuperBall(Node *powerup_ball) {
     ball->setSuperball();
     powerup_ball->removeFromParentAndCleanup(true);
 }
+
+void GameScene::removeBallsAndPowersUP () {
+    balls->removeAllChildrenWithCleanup(true);
+    power_ups->removeAllChildrenWithCleanup(true);
+    paddle->removeFromParentAndCleanup(true);
+}
+
+void GameScene::createPowerUpBody(Color4B color, int tag) {
+    auto ball_draw = DrawNode::create();
+    ball_draw->drawDot(Vec2(0, 0), BALL_SIZE/3.0, Color4F(color));
+    
+    auto material = PhysicsMaterial(0.0f, 1.0f, 0.0f);
+    auto physicsBody = PhysicsBody::createCircle(BALL_SIZE/3.0, material);
+    physicsBody->setGravityEnable(true);
+    physicsBody->setVelocity(Vec2(0,0));
+    physicsBody->setLinearDamping(0.0);
+    physicsBody->setMass(1.0f);
+    physicsBody->setContactTestBitmask(0xFFFFFFFF);
+    physicsBody->setGroup(-1);
+    ball_draw->addComponent(physicsBody);
+    ball_draw->setTag(SUPERBALL_TAG);
+    
+    ball_draw->setPosition(width * rand_0_1(), height);
+    power_ups->addChild(ball_draw, 20);
+}

+ 3 - 0
Classes/GameScene.h

@@ -33,10 +33,13 @@ class GameScene : public cocos2d::Layer {
         void superBallAppearance();
         void caseSuperBall(Node *powerup_ball);
         void addAndThrowBall();
+        void removeBallsAndPowersUP();
+        void createPowerUpBody(cocos2d::Color4B color, int tag);
         int level;
         bool over; // salva se o jogo acabou!
         Paddle * paddle;
         cocos2d::Node* balls; // Bolas
+        cocos2d::Node* power_ups; // Bolas
         double height, width; // tamanho do quadro
         unsigned long int last_touch; // ultima vez que a bola colidiu com algo
 };

+ 10 - 7
Classes/params.h

@@ -37,21 +37,24 @@
 #define CORE_TAG 11
 #define BOTTOM_TAG 12
 #define INDESTRUCTIBLE_BLOCK_TAG 13
-#define RACKET_TAG 14
+#define PADDLE_TAG 14
 
 #define THREE_BALLS_TAG 9
 #define SAVE_TAG 8
-#define RACKET_BALL_TAG 7
+#define PADDLE_BALL_TAG 7
 #define SUPERBALL_TAG 6
 
 // Probabilities
-#define DROP_LEVEL_SAVE 0.05
-#define DROP_TRIPLE_BALL 0.05 // Aumenta com o tempo
-#define DROP_RACKET_BALL 0.15
-#define DROP_SUPER_BALL 0.05
+#define DROP_LEVEL_SAVE 0.035
+#define DROP_TRIPLE_BALL 0.06 // Aumenta com o tempo
+#define DROP_PADDLE_BALL 0.07
+#define DROP_SUPER_BALL 0.04
 
+// Power Ups Seconds Interval
+#define POWER_UP_INTERVAL 2.5
 
-#define POWER_UP_PADDLE_SECONDS 10
+
+//#define POWER_UP_PADDLE_SECONDS 10
 
 // Hours to lose level
 #define LOSE_IS 12

+ 9 - 0
proj.android-studio/app/RedCore.iml

@@ -415,16 +415,25 @@
       <excludeFolder url="file://$MODULE_DIR$/build/.DS_Store" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-resources" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndkBuild" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/restart-dex" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/split-apk" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
       <excludeFolder url="file://$MODULE_DIR$/build/outputs" />

BIN
proj.ios_mac/RedCore.xcodeproj/project.xcworkspace/xcuserdata/capella.xcuserdatad/UserInterfaceState.xcuserstate


+ 6 - 6
proj.ios_mac/RedCore.xcodeproj/xcuserdata/capella.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -74,11 +74,11 @@
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "../Classes/GameScene.cpp"
-            timestampString = "518835408.157334"
+            timestampString = "518886381.326596"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "198"
-            endingLineNumber = "198"
+            startingLineNumber = "202"
+            endingLineNumber = "202"
             landmarkName = "GameScene::caseBallCollision (Node *ball)"
             landmarkType = "7">
          </BreakpointContent>
@@ -90,11 +90,11 @@
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "../Classes/GameScene.cpp"
-            timestampString = "518835408.157334"
+            timestampString = "518885903.07127"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "409"
-            endingLineNumber = "409"
+            startingLineNumber = "413"
+            endingLineNumber = "413"
             landmarkName = "GameScene::caseSuperBall(Node *powerup_ball)"
             landmarkType = "7">
          </BreakpointContent>