Exemplo n.º 1
0
void HitMeScene::hitMeFire(Ref* sender)
{
    Point velocity_delta = Point(CCRANDOM_0_1(), CCRANDOM_0_1()) * 300;
    velocity_delta = (CCRANDOM_0_1() < 0.5f)? velocity_delta : -velocity_delta;
    PhysicsBody* body = _hitItem->getPhysicsBody();
    body->setVelocity(body->getVelocity() + velocity_delta);
    body->setAngularVelocity(body->getAngularVelocity() + 5.0f * CCRANDOM_0_1());
}
bool GameScene::setHit(cocos2d::PhysicsContact &contact)
{

	if (GameManager::sharedGameManager()->isGameLive == true)
	{

		PhysicsBody *a = contact.getShapeA()->getBody();
		PhysicsBody *b = contact.getShapeB()->getBody();

		float* v = new float[2];
		v[0] = a->getVelocity().length(); // Created By An Unknown Source, Via Stack OverFlow
		v[1] = b->getVelocity().length(); // Created By An Unknown Source, Via Stack OverFlow

		contact.setData(v);


		if ((1 == a->getCollisionBitmask() && 2 == b->getCollisionBitmask()) || (2 == a->getCollisionBitmask() && 1 == b->getCollisionBitmask()))// BACK TO FRONT FOR NOW
		{
			bool hit = true;
		}

		else
		{
			bool hit = false;
		}

		if (hit = true)
		{

			if ((a->getCollisionBitmask() == Paddle_Bitmask && b->getCollisionBitmask() == Ball_Bitmask) || (a->getCollisionBitmask() == Ball_Bitmask && b->getCollisionBitmask() == Paddle_Bitmask))
			{
				Ball::sharedBall()->AddToDampening(5000.0f);
				SoundManager::sharedSoundManager()->PlaySoundEffect("ballRebound.mp3", false, 1.0f, 1.0f, 1.0f);
			}

			if ((a->getCollisionBitmask() == Brick_Bitmask && b->getCollisionBitmask() == Ball_Bitmask) || (a->getCollisionBitmask() == Ball_Bitmask && b->getCollisionBitmask() == Brick_Bitmask))
			{
				Ball::sharedBall()->AddToDampening(5000.0f);
				GameManager::sharedGameManager()->AddToScore(1);
				this->removeChild(contact.getShapeB()->getBody()->getNode());

				Ball::sharedBall()->AddToAcceleration(5000);
				//ScoreLabel->setString(StringUtils::format("%d", GameManager::sharedGameManager()->GetScore()));

				Vec2 first = contact.getShapeA()->getBody()->getNode()->convertToWorldSpace(Vec2(50, 50));

				x = first.x;
				y = first.y;

				this->schedule(schedule_selector(GameScene::SetPowerUp));

				//level = 50;
				if (level == 1)
				{
					number = number + 1;
					CCLOG("number = %i", number);

					brick.SetLevel(level);
					//if (number == 5)
					//{
					// CCLOG("level 2");
					// //level = 2;
					// this->removeChild(contact.getShapeA()->getBody()->getNode());
					//this->schedule(schedule_selector(GameScene::SetBrick));
					//this->schedule(schedule_selector(GameScene::SetBall));
					//}
				}

				else if (level == 2)
				{
					number = number + 1;
					brick.SetLevel(level);
					/*if (number == 5)
					{
					level = 3;
					this->removeChild(contact.getShapeA()->getBody()->getNode());
					this->schedule(schedule_selector(GameScene::SetBrick));
					this->schedule(schedule_selector(GameScene::SetBall));
					}*/

				}

				else if (level == 3)
				{
					number = number + 1;
					brick.SetLevel(level);
					/*if (number == 5)
					{
					level = 4;
					this->removeChild(contact.getShapeA()->getBody()->getNode());
					this->schedule(schedule_selector(GameScene::SetBrick));
					this->schedule(schedule_selector(GameScene::SetBall));
					}*/
				}

				else if (level == 4)
				{
					number = number + 1;
					brick.SetLevel(level);
					/*if (number == 5)
					{
					level = 5;
					this->removeChild(contact.getShapeA()->getBody()->getNode());
					this->schedule(schedule_selector(GameScene::SetBrick));
					this->schedule(schedule_selector(GameScene::SetBall));
					}*/
				}
				else if (level == 5)
				{
					number = number + 1;
					brick.SetLevel(level);
				}
			}
			//LIFE
			if ((a->getCollisionBitmask() == Paddle_Bitmask && b->getCollisionBitmask() == LiveUp_Bitmask) || (a->getCollisionBitmask() == LiveUp_Bitmask && b->getCollisionBitmask() == Paddle_Bitmask))
			{
				GameManager::sharedGameManager()->AddToLives(1);

				this->removeChild(contact.getShapeA()->getBody()->getNode());


			}
			//TWO
			if ((a->getCollisionBitmask() == Paddle_Bitmask && b->getCollisionBitmask() == TwoSplit_Bitmask) || (a->getCollisionBitmask() == TwoSplit_Bitmask && b->getCollisionBitmask() == Paddle_Bitmask))
			{

				this->removeChild(contact.getShapeA()->getBody()->getNode());

				Vec2 BallPos = contact.getShapeB()->getBody()->getNode()->convertToWorldSpace(Vec2(50, 50));
				xb = BallPos.x;
				yb = BallPos.y;

				balls = balls + 2;
				ba = ba + 2;

				CCLOG("Balls pu:%i", balls);
				this->schedule(schedule_selector(GameScene::SetBall));
			}
			//THREE
			if ((a->getCollisionBitmask() == Paddle_Bitmask && b->getCollisionBitmask() == ThreeSplit_Bitmask) || (a->getCollisionBitmask() == ThreeSplit_Bitmask && b->getCollisionBitmask() == Paddle_Bitmask))
			{
				this->removeChild(contact.getShapeA()->getBody()->getNode());

				Vec2 BallPos = contact.getShapeB()->getBody()->getNode()->convertToWorldSpace(Vec2(50, 50));
				xb = BallPos.x;
				yb = BallPos.y;

				balls = balls + 3;
				ba = ba + 3;
				this->schedule(schedule_selector(GameScene::SetBall));

			}
			//FOUR
			if ((a->getCollisionBitmask() == Paddle_Bitmask && b->getCollisionBitmask() == NineSplit_Bitmask) || (a->getCollisionBitmask() == NineSplit_Bitmask && b->getCollisionBitmask() == Paddle_Bitmask))
			{
				this->removeChild(contact.getShapeA()->getBody()->getNode());

				Vec2 BallPos = contact.getShapeB()->getBody()->getNode()->convertToWorldSpace(Vec2(50, 50));
				xb = BallPos.x;
				yb = BallPos.y;

				balls = balls + 8;
				ba = ba + 8;
				this->schedule(schedule_selector(GameScene::SetBall));
			}

			if ((a->getCollisionBitmask() == Death_Bitmask && b->getCollisionBitmask() == Ball_Bitmask) || (a->getCollisionBitmask() == Ball_Bitmask && b->getCollisionBitmask() == Death_Bitmask))
			{
				
				CCLOG("Balls enter:%i", balls);
				this->lives = GameManager::sharedGameManager()->GetLives();
				if (balls <= 1 && lives > 0)
				{
					GameManager::sharedGameManager()->AddToLives(-1);
					this->schedule(schedule_selector(GameScene::SetBall));
					balls = balls + 1;
					ba = ba + 1;

				}

				else if (balls <= 1 && lives <= 0)
				{
					GameManager::sharedGameManager()->AddToLives(-1);
				}

				if (balls > 1 && lives > 0)
				{
					
					balls = balls - 1;
					CCLOG("Balls return:%i", balls);
				}

				if (lives <= 0)
				{
					/*auto scene = HelloWorld::createScene();
					Director::getInstance()->replaceScene(TransitionFade::create(Transition_Length, scene));*/

					this->GameOver();
				}
				this->removeChild(contact.getShapeA()->getBody()->getNode());

			}

			if ((a->getCollisionBitmask() == Death_Bitmask && b->getCollisionBitmask() == LiveUp_Bitmask) || (a->getCollisionBitmask() == LiveUp_Bitmask && b->getCollisionBitmask() == Death_Bitmask))
			{
				this->removeChild(contact.getShapeA()->getBody()->getNode());
			}

			if ((a->getCollisionBitmask() == Death_Bitmask && b->getCollisionBitmask() == TwoSplit_Bitmask) || (a->getCollisionBitmask() == TwoSplit_Bitmask && b->getCollisionBitmask() == Death_Bitmask))
			{
				this->removeChild(contact.getShapeA()->getBody()->getNode());

			}

			if ((a->getCollisionBitmask() == Death_Bitmask && b->getCollisionBitmask() == ThreeSplit_Bitmask) || (a->getCollisionBitmask() == ThreeSplit_Bitmask && b->getCollisionBitmask() == Death_Bitmask))
			{
				this->removeChild(contact.getShapeA()->getBody()->getNode());
			}

			if ((a->getCollisionBitmask() == Death_Bitmask && b->getCollisionBitmask() == NineSplit_Bitmask) || (a->getCollisionBitmask() == NineSplit_Bitmask && b->getCollisionBitmask() == Death_Bitmask))
			{
				this->removeChild(contact.getShapeA()->getBody()->getNode());
			}
		}
	}
	return true;
}