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); }
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; }
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 }
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; } }