Exemplo n.º 1
0
HoldLine::HoldLine(QWidget *parent) : QWidget(parent){
  XLOC = 36;
  level = 0;
  points = 0;
  gameOver = false;
  gameWon = false;
  paused = false;
  gameStarted = false;
  moving = false;
  prot = new Protagonist();
  quiver = new Quiver();
  trapBag = new TrapBag();
  protect = new Protect();
  protectItem = new ProtectItem();

  ammoList.push_back(quiver);
  ammoList.push_back(trapBag);

  
  MAXENEMIES = 10;
  createBullets(3);
  createArrows(8);
  createTraps(5);
  createTrees(4);

}
Exemplo n.º 2
0
bool LevelTwo::init()
{
	if (!Layer::init())
	{
		return false;
	}

	preloadAudio();
	//playAudio();

	//Audio stuff created here. 
	//CocosDenshion::SimpleAudioEngine::getInstance()->preloadBackgroundMusic("audio/main.mp3");
	CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("audio/main.mp3", true);

	//GameState initial setting.
	//m_gameState = GameStates::PlaceGunTower;
	//Listeners for touch events created.
	auto listener = EventListenerTouchAllAtOnce::create();
	listener->onTouchesBegan = CC_CALLBACK_2(LevelTwo::onTouchesBegan, this);
	listener->onTouchesMoved = CC_CALLBACK_2(LevelTwo::onTouchesMoved, this);
	listener->onTouchesEnded = CC_CALLBACK_2(LevelTwo::onTouchesEnded, this);
	_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
	
	Size visibleSize = Director::getInstance()->getVisibleSize();
	Point origin = Director::getInstance()->getVisibleOrigin();

	bool dir;
	bool jump = true;
	bool removeTraps = false;
	bool addPlatfroms = false;

	//Edge body created. Adding screen Boundry. 
	/*auto edgeBody = PhysicsBody::createEdgeBox(visibleSize, PHYSICSBODY_MATERIAL_DEFAULT, 1);
	auto edgeNode = Node::create();
	edgeNode->setPosition(Point(2000 / 2 + origin.x, 2000 / 2 + origin.y));
	edgeNode->setPhysicsBody(edgeBody);
	this->addChild(edgeNode);
	*/
	//Pause Button Creation
	auto pauseItem =
		MenuItemImage::create("GameScreen/Pause_Button.png",
			"GameScreen/Pause_Button(Click).png",
			CC_CALLBACK_1(LevelTwo::activatePauseScene, this));

	//Set Pause button position
	pauseItem->setPosition(Point(pauseItem->getContentSize().width -
		(pauseItem->getContentSize().width / 4) + 20,
		visibleSize.height - pauseItem->getContentSize().height +
		(pauseItem->getContentSize().width / 4) - 20));
	pauseItem->setScale(2);
	//Attach the pause button to the screen
	auto menu = Menu::create(pauseItem, NULL);
	menu->setPosition(Point::ZERO);
	this->addChild(menu, 10);

	//.........................................................................................
	//DPad

	//LeftButton to move the player.
	auto leftbutton = ui::Button::create("GameScreen/leftButtonIdle.png",
		"GameScreen/leftbuttonActive.png");
	leftbutton->setPosition(Vec2(origin.x + visibleSize.width / 10,
		origin.y + visibleSize.height / 6));
	leftbutton->setScale(2);
	leftbutton->addTouchEventListener([&](Ref* sender, ui::Widget::TouchEventType type) {
		switch (type)
		{
		case ui::Widget::TouchEventType::BEGAN:
			//handleTouch(this);
			//player->getPhysicsBody()->applyForce(Vec2(1000, 0));
			//player->getPhysicsBody()->setDynamic(true);
			dir = true;
			if (player1Selected == true) {
				player->pMovement(player, dir);
			}
			if (player2Selected == true) {
				player2->p2Movement(player2, dir);
			}
			break;
		case ui::Widget::TouchEventType::ENDED:
			player->getPhysicsBody()->setVelocity(Vec2(0, 0));
			player2->getPhysicsBody()->setVelocity(Vec2(0, 0));
			break;
		default:
			break;
		}
	});
	this->addChild(leftbutton, 10);

	//RightButton to move the player.
	auto rightbutton = ui::Button::create("GameScreen/rightButtonIdle.png",
		"GameScreen/rightbuttonActive.png");
	rightbutton->setPosition(Vec2(origin.x + visibleSize.width / 6,
		origin.y + visibleSize.height / 6));
	rightbutton->setScale(2);
	rightbutton->addTouchEventListener([&](Ref* sender, ui::Widget::TouchEventType type) {
		switch (type)
		{
		case ui::Widget::TouchEventType::BEGAN:
			//handleTouch(this);
			//player->getPhysicsBody()->applyForce(Vec2(1000, 0));
			dir = false;
			if (player1Selected == true) {
				player->pMovement(player, dir);
			}
			if (player2Selected == true) {
				player2->p2Movement(player2, dir);
			}
			break;
		case ui::Widget::TouchEventType::ENDED:
			player->getPhysicsBody()->setVelocity(Vec2(0, 0));
			player2->getPhysicsBody()->setVelocity(Vec2(0, 0));
			break;
		default:
			break;
		}
	});
	this->addChild(rightbutton, 10);

	int stop;

	//JumpButton to move the player.
	auto jumpbutton = ui::Button::create("GameScreen/jumpButtonIdle.png",
		"GameScreen/jumpButtonActive.png");
	jumpbutton->setPosition(Vec2(origin.x + visibleSize.width - 100,
		origin.y + visibleSize.height / 6));
	jumpbutton->setScale(2);
	jumpbutton->addTouchEventListener([&](Ref* sender, ui::Widget::TouchEventType type) {
		switch (type)
		{
		case ui::Widget::TouchEventType::BEGAN:
			//handleTouch(this);
			CCLOG("Jump button has been pressed");
			//player->getPhysicsBody()->applyForce(Vec2(1000, 0));
			if (player1Selected == true) {
				CCLOG("I've entered the jump if statement!");
				player->pJump(p1Jumped, player);
				p1Jumped = true;
				playJumpSound = true;
			}
			if (player2Selected == true) {
				CCLOG("I've entered the jump if statement!");
				player2->p2Jump(p2Jumped, player2);
				p2Jumped = true;
				playJumpSound = true;
			}

			break;
		case ui::Widget::TouchEventType::ENDED:
			break;
		default:
			break;
		}
	});

	this->addChild(jumpbutton, 10);
	addEvents();
	/*TowerBase * base = TowerBase::create(Vec2(ptr->m_towerBaseX[i], ptr->m_towerBaseY[i]), m_gameState);
	m_towerBases.push_back(base);
	spritebatch->addChild(base, -5);*/

	//Player select
	auto p1Select =
		MenuItemImage::create("GameScreen/p1Idle.png",
			"GameScreen/p1Select.png",
			CC_CALLBACK_0(LevelTwo::playerOneSelected, this));
	p1Select->setScale(2);
	p1Select->setPosition(Vec2((origin.x + visibleSize.width / 2) - 20,
		origin.y + visibleSize.height / 10));
	//this->addChild(p1Select, 5);

	auto p2Select =
		MenuItemImage::create("GameScreen/p2Idle.png",
			"GameScreen/p2Select.png",
			CC_CALLBACK_0(LevelTwo::playerTwoSelected, this));
	p2Select->setScale(2);
	p2Select->setPosition(Vec2((origin.x + visibleSize.width / 2) + 20,
		origin.y + visibleSize.height / 10));

	auto selectMenu = Menu::create(p1Select, p2Select, NULL);
	selectMenu->setPosition(Point::ZERO);
	this->addChild(selectMenu, 5);

	//Player Stuff Just testing stuff. Cut me some slack, Man!
	//Player One creation g and attachment ot the scene
	//Check player.cpp for Physics details.
	player = Player::create();
	player->setPosition(Vec2(20, 400));
	this->addChild(player, 0);

	//Same comment applies for player two as player one!
	player2 = Player2::create();
	player2->setPosition(Vec2(70, 400));
	this->addChild(player2, 0);

	//BackGround
	addBackGroundSprite(visibleSize, origin);

	//Create the Tower base. I'll be repurposing these for my level bases! 
	//Needs to be done urgently! 
	createPlatforms();
	createTraps();
	//createEndGame();
	createEndGameJack();
	createEndGameJill();
	createButton();
	createRemovablePlats();
	createFlameEmiiter();

	//Camera stuff.........................................
	auto camScene = Camera::create();
	camScene->setCameraFlag(CameraFlag::USER1);

	//HUD layer
	auto hud = Layer::create();
	hud->addChild(p2Select, 10);
	hud->addChild(p1Select, 10);
	//hud->addChild(selectMenu, 10);
	hud->addChild(jumpbutton, 10);
	hud->addChild(rightbutton, 10);
	hud->addChild(leftbutton, 10);
	hud->addChild(menu, 10);
	hud->setCameraMask((unsigned short)CameraFlag::USER1);

	this->addChild(camScene);

	auto contactListener = EventListenerPhysicsContact::create();

	contactListener->onContactBegin = CC_CALLBACK_1(LevelTwo::onContactBegin, this);
	this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(contactListener, this);

	cameraTarget = Sprite::create();
	cameraTarget->setPosition(player->getPositionX(), player->getPositionY());

	this->addChild(cameraTarget);
	camera = Follow::create(cameraTarget, Rect::ZERO);
	
	camera->retain();
	this->runAction(camera);

	this->scheduleUpdate();

	return true;
}
Exemplo n.º 3
0
void HoldLine::checkCollision(){
   for(int i = 0; i < enemyList.size(); i++){
      if(!(enemyList[i]->isDestroyed())){
         if((prot->getRect()).intersects(enemyList[i]->getRect())){
            enemyList[i]->setDestroyed(true);
            enemyList[i]->resetState();
            
            if(protect->isDestroyed()){
                prot->resetState();
                prot->damage();
                points += 100;
            } 

            enemyCount++;
            if(enemyCount == MAXENEMIES) stopGame();
            if(prot->getLives() == 0)
               stopGame();
            break;
         }//end if
      }//end if
   }//end for

   for(int i = 0; i < enemyList.size(); i++){
      if(!(enemyList[i]->isDestroyed())){
          if(!protect->isDestroyed()){
            if((protect->getRect()).intersects(enemyList[i]->getRect())){
                enemyList[i]->setDestroyed(true);
                 enemyList[i]->resetState();
                 enemyCount++;
                 points += 100;
                 if(enemyCount == MAXENEMIES) stopGame();
                 break;
            }//end if
          }
      }//end if
   }//end for

  for(int i = 0; i < arrowList.size(); i++){
     if(!(arrowList[i]->isDestroyed())){
        for(int j = 0; j < enemyList.size(); j++){
            if(!(enemyList[j]->isDestroyed())){
               if((arrowList[i]->getRect()).intersects(enemyList[j]->getRect())){
                 numRand = rand() % 100;
                 if(numRand < 10 && protectItem->isDestroyed() && protect->isDestroyed()){
                    protectItem->resetState(enemyList[j]->getRect().left(),enemyList[j]->getRect().top());
                    protectItem->setDestroyed(false);
                    timeridItem = startTimer(5000);
                 }
                 arrowList[i]->setDestroyed(true);
                 enemyList[j]->setDestroyed(true);
                 enemyList[j]->resetState();
                 enemyCount++;
                 points += 100;
                 if(enemyCount == MAXENEMIES) stopGame();
                 break;
              }//end if
            }//end if
        }//end for
     }//end if
  }//end for  

  for(int i = 0; i < ammoList.size(); i++){
      if((prot->getRect()).intersects(ammoList[i]->getRect())){
          Ammunition *a;
          a = dynamic_cast <Quiver*> (ammoList[i]);

          if(a != NULL){
            createArrows(8);
            remainingArrows = 8;
            break;
          }

          else{
           createTraps(5);
           remainingTraps = 5;
           break;
          }
     }
  }
  
  if(!protectItem->isDestroyed()){
     if((prot->getRect()).intersects(protectItem->getRect())){
        protectItem->setDestroyed(true);
        killTimer(timeridItem);
        protect->setDestroyed(false);
        protect->resetState(prot->getRect().right(),prot->getRect().top());
        timeridInvincible = startTimer(4000);
     }
  }

  for(int i = 0; i< trapList.size();i++){
     if(!trapList[i]->isDestroyed()){
        if((prot->getRect()).intersects(trapList[i]->getRect())){

            if(protect->isDestroyed()){
                prot->resetState();
                prot->damage();
            } 

            trapList[i]->setDestroyed(true);
            if(prot->getLives() == 0)
               stopGame();
            break;
        }//end if
     }//end if
  }//end for


    for(int i = 0; i< bulletList.size();i++){
     if(!bulletList[i]->isDestroyed()){
        if((prot->getRect()).intersects(bulletList[i]->getRect())){

            if(protect->isDestroyed()){
                prot->resetState();
                prot->damage();
            } 

            bulletList[i]->setDestroyed(true);
            if(prot->getLives() == 0)
               stopGame();
            break;
        }//end if
     }//end if
  }//end for


  for(int i = 0; i < trapList.size(); i++){
     if(!(trapList[i]->isDestroyed())){
        for(int j = 0; j < enemyList.size(); j++){
            if(!(enemyList[j]->isDestroyed())){
               if((trapList[i]->getRect()).intersects(enemyList[j]->getRect())){

                 numRand = rand() % 100;
                 if(numRand < 20 && protectItem->isDestroyed() && protect->isDestroyed()){
                    protectItem->resetState(enemyList[j]->getRect().left(),enemyList[j]->getRect().top());
                    protectItem->setDestroyed(false);
                    timeridItem = startTimer(5000);
                 }

                 trapList[i]->setDestroyed(true);
                 enemyList[j]->setDestroyed(true);
                 enemyList[j]->resetState();
                 enemyCount++;
                 points += 100;

                 if(enemyCount == MAXENEMIES) stopGame();
                 break;
              }//end if
            }//end if
        }//end for
     }//end if
  }//end for

  for(int i = 0; i < arrowList.size(); i++){
     if(!(arrowList[i]->isDestroyed())){
        for(int j = 0; j < treeList.size(); j++){
               if((arrowList[i]->getRect()).intersects(treeList[j]->getRect())){
                 arrowList[i]->setDestroyed(true);
                 break;
              }//end if
        }//end for
     }//end if
  }//end for

}
Exemplo n.º 4
0
void HoldLine::startGame(){
  if(!gameStarted) { 
     prot->resetState();
     arrowCount = 0;
     remainingArrows = 8;
     trapCount = 0;
     remainingTraps = 5;
     enemyCount = 0;
     crossedLine = 0;
     prot->setHealth();
     level++;

     if(level == 1){
          createEnemies(MAXENEMIES);

         for(int i = 0; i < arrowList.size(); i++)
            arrowList[i]->setDestroyed(true);

         for(int i = 0; i < trapList.size(); i++)
            trapList[i]->setDestroyed(true);

         for(int i = 0; i < bulletList.size(); i++)
            bulletList[i]->setDestroyed(true); 

         protectItem->setDestroyed(true);
         protect->setDestroyed(true);

     }

     else if(level == 2){
         for(int i = 0; i < enemyList.size(); i++){
             enemyList[i]->setDestroyed(false);
             enemyList[i]->setDir(0,3);
             enemyList[i]->resetState();
         }
         createEnemies(13);
 
         MAXENEMIES += 13;

         deleteArrows();
         arrowList.resize(0);
         createArrows(8);

         deleteTraps();
         trapList.resize(0);
         createTraps(5);


         for(int i = 0; i < arrowList.size(); i++)
            arrowList[i]->setDestroyed(true);

         for(int i = 0; i < trapList.size(); i++)
            trapList[i]->setDestroyed(true);

         for(int i = 0; i < bulletList.size(); i++)
            bulletList[i]->setDestroyed(true); 

         protectItem->setDestroyed(true);
         protect->setDestroyed(true);
     }//end level 2

     else if(level == 3){
         EnemyObject* f;

         for(int i = 0; i < enemyList.size(); i++){
             enemyList[i]->setDestroyed(false);
             f = dynamic_cast <Enemy*> (enemyList[i]);

             if(f != NULL)
                 enemyList[i]->setDir(0,3);

             enemyList[i]->resetState();
         }

         createEnemies(12);

         MAXENEMIES += 12;

         deleteArrows();
         arrowList.resize(0);
         createArrows(8);

         deleteTraps();
         trapList.resize(0);
         createTraps(5);

         for(int i = 0; i < arrowList.size(); i++)
            arrowList[i]->setDestroyed(true);

         for(int i = 0; i < trapList.size(); i++)
            trapList[i]->setDestroyed(true);

         protectItem->setDestroyed(true);
         protect->setDestroyed(true);
     }//end level 3
     

     startTimers();

     gameOver = false;
     gameWon = false;
     gameStarted = true;
  }
}