void World::buildScene() { // Initialize the different layers for (std::size_t i = 0; i < LayerCount; ++i) { Category::Type category = (i == Air) ? Category::SceneAirLayer : Category::None; SceneNode::Ptr layer(new SceneNode(category)); mSceneLayers[i] = layer.get(); mSceneGraph.attachChild(std::move(layer)); } // Prepare the tiled background sf::Texture& texture = mTextures.get(Textures::Desert); sf::IntRect textureRect(mWorldBounds); texture.setRepeated(true); // Add the background sprite to the scene std::unique_ptr<SpriteNode> backgroundSprite(new SpriteNode(texture, textureRect)); backgroundSprite->setPosition(mWorldBounds.left, mWorldBounds.top); mSceneLayers[Background]->attachChild(std::move(backgroundSprite)); // Add player's aircraft std::unique_ptr<Aircraft> player(new Aircraft(Aircraft::Eagle, mTextures, mFonts)); mPlayerAircraft = player.get(); mPlayerAircraft->setPosition(mSpawnPosition); mSceneLayers[Air]->attachChild(std::move(player)); // Add enemy aircraft addEnemies(); }
void World::buildScene() { for ( std::size_t i=0; i<LayerCount; i++ ) { // TODO: replace it with more readable construct Category::Type category = (i == LowerAir) ? Category::SceneAirLayer : Category::None; SceneNode::Ptr layer( new SceneNode( category ) ); mSceneLayers[i] = layer.get(); mSceneGraph.AttachChild( std::move( layer ) ); } // Prepare the tiled background // Wrap up it into a private method later sf::Texture& jungleTexture = mTextures.get( Textures::Jungle ); jungleTexture.setRepeated( true ); float viewHeight = mWorldView.getSize().y; sf::IntRect textureRect( mWorldBounds ); textureRect.height += static_cast<int>( viewHeight ); // Add the background sprite to the scene std::unique_ptr<SpriteNode> jungleSprite( new SpriteNode( jungleTexture, textureRect ) ); jungleSprite->setPosition( mWorldBounds.left, mWorldBounds.top ); mSceneLayers[Background]->AttachChild( std::move( jungleSprite ) ); // Add the finsh line to the scene sf::Texture& finishTexture = mTextures.get( Textures::FinishLine ); std::unique_ptr<SpriteNode> finishSprite( new SpriteNode( finishTexture ) ); finishSprite->setPosition( 0.0f, -76.0f ); mFinishSprite = finishSprite.get(); mSceneLayers[Background]->AttachChild( std::move( finishSprite ) ); // Add particle node to the scene std::unique_ptr<ParticleNode> smokeNode( new ParticleNode( Particle::Smoke, mTextures ) ); mSceneLayers[LowerAir]->AttachChild( std::move( smokeNode ) ); // Add propellant particle node to scene std::unique_ptr<ParticleNode> propellantNode( new ParticleNode( Particle::Propellant, mTextures ) ); mSceneLayers[LowerAir]->AttachChild( std::move( propellantNode ) ); // Add sound effect node std::unique_ptr<SoundNode> soundNode( new SoundNode( mSounds ) ); mSceneGraph.AttachChild( std::move( soundNode ) ); // Add network node, if necessary if ( mNetworkedWorld ) { std::unique_ptr<NetworkNode> networkNode( new NetworkNode() ); mNetworkNode = networkNode.get(); mSceneGraph.AttachChild( std::move( networkNode ) ); } addEnemies(); }
void GameScene::setLevel(int level) { m_level = level; qDebug() << "Starting level" << level; lastSpecialSpawnTime = 0; setTimeFactor(normalTimeFactor); foreach(QGraphicsItem *item, items()) { if(Particle* particle = qgraphicsitem_cast<Particle*>(item)) { removeItem(particle); delete particle; // Delete the particle completely. Should (hopefully) not be referenced anywhere else. } } if(gameMode() == ModeClassic && level == 1) { setRemainingPositiveCharges(20); setRemainingNegativeCharges(20); setLevelTime(27); } else if(gameMode() == ModeClassic) { setLevelTime(baseTime + (int)(timeIncrement * level)); setRemainingPositiveCharges(baseChargeNum + (int)(incrementChargeNum * level)); setRemainingNegativeCharges(baseChargeNum + (int)(incrementChargeNum * level)); } else if(gameMode() == ModeParty) { setLevelTime(baseTimeParty + (int)(timeIncrementParty * level)); setRemainingPositiveCharges(baseChargeNumPositiveParty + (int)(incrementChargeNumParty * level)); setRemainingNegativeCharges(baseChargeNumNegativeParty + (int)(incrementChargeNumParty * level)); specialParticles()->clear(); if(level == 14) { specialParticles()->append(Particle::ParticleTransfer); } setRemainingSpecialCharges(specialParticles()->count()); } else { qWarning() << "Some unknown mode is set!"; } // set text of remaining charges updateRemainingChargeText(); // add player player = new Particle(this); #ifndef BENCHMARK addItem(player); #endif player->setCharge(playerCharge * (1 + levelChargeFactor * pow((double)level,2))); player->setParticleType(Particle::ParticlePlayer); if(gameMode() == ModeClassic && level == 1) { player->setPosition(QVector2D(gameRectF().width() * 0.9,gameRectF().height() * 0.9)); } else { player->setPosition(QVector2D(gameRectF().width() / 2,gameRectF().height() / 2)); } // add enemies addEnemies(); // Notify everyone about the level change emit levelChanged(level); }
void World::buildScene() { // Initialize the different layers for (auto i = 0u; i < LayerCount; ++i) { auto category = (i == Space) ? Category::SceneSpaceLayer : Category::None; auto layer(std::make_unique<SceneNode>(category)); mSceneLayers[i] = layer.get(); mSceneGraph.attachChild(std::move(layer)); } // Add the background sprite to the scene auto backgroundSprite(std::make_unique<SpriteNode>(SpriteNode::Background, mTextures)); backgroundSprite->setDirtyFlag(false); mSceneLayers[Background]->attachChild(std::move(backgroundSprite)); // add Line auto lineSprite(std::make_unique<SpriteNode>(SpriteNode::Line, getBattlefieldBounds())); lineSprite->setDirtyFlag(false); mSceneLayers[Background]->attachChild(std::move(lineSprite)); // add Score auto score(std::make_unique<ScoreNode>(mFonts)); mScore = score.get(); mScore->setDirtyFlag(false); mSceneLayers[Background]->attachChild(std::move(score)); // add lives auto life(std::make_unique<LifeNode>(Player::PlayerShip, mTextures)); mLife = life.get(); mLife->setDirtyFlag(false); mSceneLayers[Background]->attachChild(std::move(life)); // Add player's spaceship auto bounds(getBattlefieldBounds()); auto YPadding = bounds.top + bounds.height - Padding / 2u - mSpawnPosition.y; mPlayerFactory.setSceneNode(mSceneLayers[Space]); mPlayer = mPlayerFactory.create(mSpawnPosition + sf::Vector2f(0.f, YPadding)); // Prepare for adding Boss mBossFactory.setSceneNode(mSceneLayers[Space]); // Add enemy Spaceships addEnemies(); // add Shields addShields(); // Add sound effect node auto soundNode(std::make_unique<SoundNode>(mSounds)); mSceneGraph.attachChild(std::move(soundNode)); }
void updateGame(Game *game){ game->totalTime++; if(game->levelTime){ game->levelTime++; addEnemies(game);//Adds enemies and checks if level is finished } updateTowers(game); updateEnemies(game); updateBullets(game); };
void World::buildScene() { // Initialize the different layers for (std::size_t i = 0; i < LayerCount; ++i) { Category::Type category = (i == LowerAir) ? Category::SceneAirLayer : Category::None; SceneNode::Ptr layer(new SceneNode(category)); mSceneLayers[i] = layer.get(); mSceneGraph.attachChild(std::move(layer)); } // Prepare the tiled background sf::Texture& jungleTexture = mTextures.get(Textures::Jungle); jungleTexture.setRepeated(true); float viewHeight = mWorldView.getSize().y; sf::IntRect textureRect(mWorldBounds); textureRect.height += static_cast<int>(viewHeight); // Add the background sprite to the scene std::unique_ptr<SpriteNode> jungleSprite(new SpriteNode(jungleTexture, textureRect)); jungleSprite->setPosition(mWorldBounds.left, mWorldBounds.top - viewHeight); mSceneLayers[Background]->attachChild(std::move(jungleSprite)); // Add the finish line to the scene sf::Texture& finishTexture = mTextures.get(Textures::FinishLine); std::unique_ptr<SpriteNode> finishSprite(new SpriteNode(finishTexture)); finishSprite->setPosition(0.f, -76.f); mSceneLayers[Background]->attachChild(std::move(finishSprite)); // Add particle node to the scene std::unique_ptr<ParticleNode> smokeNode(new ParticleNode(Particle::Smoke, mTextures)); mSceneLayers[LowerAir]->attachChild(std::move(smokeNode)); // Add propellant particle node to the scene std::unique_ptr<ParticleNode> propellantNode(new ParticleNode(Particle::Propellant, mTextures)); mSceneLayers[LowerAir]->attachChild(std::move(propellantNode)); // Add sound effect node std::unique_ptr<SoundNode> soundNode(new SoundNode(mSounds)); mSceneGraph.attachChild(std::move(soundNode)); // Add player's aircraft std::unique_ptr<Aircraft> player(new Aircraft(Aircraft::Eagle, mTextures, mFonts)); mPlayerAircraft = player.get(); mPlayerAircraft->setPosition(mSpawnPosition); mSceneLayers[UpperAir]->attachChild(std::move(player)); // Add enemy aircraft addEnemies(); }
void PlayState::update() { player->update(); for (int i = 0; i < (int) enemies.size(); i++) { enemies[i]->update(); } int countDownSeconds = 90 - gameClock.getElapsedTime().asSeconds(); gameClockString = std::to_string((int) floor(countDownSeconds / 60)) + ":" + std::to_string((int) (countDownSeconds - floor(countDownSeconds / 60) * 60)); if (countDownSeconds <= 0) { player->satisfactionSound.stop(); game->currentState = new GameOverState(game, 1, currentLevel); } int beginCountDown = 2 - beginClock.getElapsedTime().asSeconds(); if (beginCountDown <= 0 && !hasBegun) { addEnemies(); beginCountDown = 10; hasBegun = true; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)) { sf::Time delayTime = sf::seconds(0.5f); sf::sleep(delayTime); game->currentState = new TitleState(game); } if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) { if (canGoPreviousLevel && currentLevel != 1) { currentLevel--; setup(); canGoPreviousLevel = false; } } else { canGoPreviousLevel = true; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) { if (canGoNextLevel && currentLevel != game->findNumberOfMaps()) { currentLevel++; setup(); canGoNextLevel = false; } } else { canGoNextLevel = true; } }
// Update const void World::update(const sf::Time& dt) { for (unsigned i = 0; i < (mPlayers.size() > mEnemies.size() ? mPlayers.size() : mEnemies.size()); i++) { if (mPlayers.begin()+i < mPlayers.end() && mPlayers[i].getVisible()) { mPlayers[i].update(dt); mTextHolder.correctProperties(mTextHolder.get(Texts::Scores, i)); } if (mEnemies.begin()+i < mEnemies.end() && mEnemies[i].getVisible()) mEnemies[i].update(dt); if (mPowerUps.begin()+i < mPowerUps.end() && mPowerUps[i].getVisible()) mPowerUps[i].update(dt); } addEnemies(); recycleEnemies(); addPowerUps(); recyclePowerUps(); }
void Game::toLevel(bool pause) { engine->hideCursor(true); engine->setCursorToCenter(); engine->resetInput(); if (!pause) { drop(); if (!addFighter()) exit(1); if (!addEnemies()) exit(1); effects->createEffects(engine->getManager(), texManager->getEffectsTexture()[0]); timer.zeroTimes(); engine->setTime(0); } gui->game(engine->getGUI(), texManager); }
World::World(sf::RenderWindow& window, FontHolder& fonts) : mWindow(window) , mWorldView(window.getDefaultView()) , mFonts(fonts) , mScore(0) , mLevel(1) , mWorldBounds ( 0.f, //left x position 0.f, // top y position mWorldView.getSize().x, //width 2500.f) //height , mScrollSpeed(-50.f) , mSpawnPosition(mWorldView.getSize().x / 2.f, //X mWorldBounds.height - mWorldView.getSize().y / 2.f) //Y , mPlayerAircraft(nullptr) { loadTextures(); addEnemies(); buildScene(); mWorldView.setCenter(mSpawnPosition); }