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();
}
Exemplo n.º 2
0
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();
}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
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));
}
Exemplo n.º 5
0
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);
};
Exemplo n.º 6
0
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();
}
Exemplo n.º 7
0
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;
  }
}
Exemplo n.º 8
0
    // 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();
}
Exemplo n.º 9
0
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);
}
Exemplo n.º 10
0
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);
}