Exemplo n.º 1
0
// Check if emitters needs to send a wave
void World::checkWaveCreation(BodyEmitter* emitter)
{

    if (emitter->getEndOfTransmission())
    {
        // Create a new wave, and set its endOfTransmission flag
        Wave* w = createWave(emitter->GetPosition(), emitter->getId(), emitter->getCurrentSpeed(), 1.0f);
        w->setEndOfTransmission(true);
        w->setMaxRadius(emitter->getMaxRadius());

        // Drop the emitter's end of transmission flag
        emitter->acknowledgeEndOfTransmission();
    }
    // If that emitter wants to send a wave
    else if (emitter->checkForSend(this->currentFrameTime))
    {
        // Create a new wave
        Wave* w = createWave(emitter->GetPosition(), emitter->getId(), emitter->getCurrentSpeed(), emitter->getCurrentAmplitude());

        w->setMaxRadius(emitter->getMaxRadius());

        // Transmission is just starting, there is no delay
        if (emitter->getStartOfTransmission())
        {
            emitter->setLastSendTime(this->currentFrameTime);
            emitter->acknowledgeStartTransmission();
        }

        // Transmission had started before, we need to compute the delay
        else
        {
            // Compute the delay between when the emitter wanted to send, and the current frame
            sf::Time newLastSendTime = emitter->getNextSendTime();
            sf::Time delay = this->currentFrameTime - newLastSendTime;
            //cout << "Delay " << delay.asSeconds() << endl;

            // Compensate that delay on the wave : Since it should have spawned earlier, so it should have traveled farther too.
            w->setRadius(delay.asSeconds()*w->getSpeed());

            // Update the emitter's send time
            emitter->setLastSendTime(newLastSendTime);
        }

        /*std::cout << "Creating new wave : " << std::endl;
        std::cout << "  NewSendTime  : " << newLastSendTime.asSeconds() << std::endl;
        std::cout << "  NextSendTime : " << emitter->getNextSendTime().asSeconds() << std::endl;
        std::cout << "  Delay  : " << delay.asSeconds() << std::endl;
        std::cout << "  Radius : " << delay.asSeconds()*w->getSpeed() << std::endl;*/
    }
}
Exemplo n.º 2
0
void doWave()                                           // Lance la création d'une vague si la vague précédente est vaincue
{
    getEnnemiAlive();   // Récupère le nombre d'ennemis sur la carte

     if(Game.nbEnnemiAlive==0 && Game.stade == 1 )
        {

            if(Game.countdown - Game.timer < 0 )
            {

                Game.countdown = Game.timer + 300;  // Ajoute du temps avant la création de la prochaine vague

                if(Tir != NULL)                     // Annule les tirs lasers en cours d'éxécution
                        {
                        freeTir((*Tir).suivant);
                        (*Tir).suivant = NULL;
                        }
            }

            else if(Game.countdown - Game.timer == 0 )  // Lance la création d'une vague à la fin du temps imparti entre les deux vagues
            {
                    Game.nbEnnemiCreated = 0;
                    createWave();


            }

        }
}
Exemplo n.º 3
0
RDHPIRecordStream::Error RDHPIRecordStream::createWave(QString filename)
{
  if(is_open) {
    return RDHPIRecordStream::AlreadyOpen;
  }
  setName(filename);
  return createWave();
}
void HelloWorld::onEnter()
{
	createWave();

	scheduleUpdate();

	Layer::onEnter();
}
Exemplo n.º 5
0
void Rythm::generateWaves(sf::Time elapsedTime)
{
    _elapsedTimeBeat += elapsedTime;

    if(!_waves.empty())
    {
        if(_waves.back()->getPosition().y > _waves.back()->getRect().height && _totalWaves % 2 == 0)
        {
            createWave();
            _elapsedTimeBeat = _elapsedTimeBeat.Zero;
        }
        else if(_waves.back()->getPosition().y > _waves.back()->getRect().height * 2 && _totalWaves % 2 == 1)
        {
            createWave();
            _elapsedTimeBeat = _elapsedTimeBeat.Zero;
        }
    }
    else
    {
        createWave();
        _elapsedTimeBeat = _elapsedTimeBeat.Zero;
    }
}
Exemplo n.º 6
0
void World::forceEndOfTransmission(BodyEmitter * body)
{
    if (body == NULL)
        return;

    body = static_cast<BodyEmitter*>(body);
    if (body == NULL)
        return;

    // Create a new wave, and set its endOfTransmission flag
    Wave* w = createWave(body->GetPosition(), body->getId(), body->getCurrentSpeed(), 1.0f);
    w->setEndOfTransmission(true);
    w->setMaxRadius(body->getMaxRadius());

    // Drop the emitter's end of transmission flag
    body->stopSending();
    body->acknowledgeEndOfTransmission();
}
Exemplo n.º 7
0
////////////////////////////////////////////////////////////
/// Entry point of application
///
/// \return Application exit code
///
////////////////////////////////////////////////////////////
int main()
{
    srand((unsigned)time(0));
    bool spaceIsPressed = false;
    bool finishedEnteringName = false;
    bool savedToFile = false;

    sf::Clock clock;
    float currentTime, deathTime = 0.0f;

    sf::String whatever;
    whatever.SetPosition(300, 300);
    sf::String youMadeIt("You made it to the high score list! Enter your name:");
    youMadeIt.SetPosition(300, 275);
    std::string inputString;
    initHighScores(highScoreList);
    sf::String highScoreString(convertScoresToString(highScoreList));

    bool gameOver = false;

    sf::Music backgroundMusic;
    if ( !backgroundMusic.OpenFromFile("Music/02 - Salt In The Wounds.ogg"))
        return -9;
    backgroundMusic.Play();


    // Create the main rendering window
    sf::RenderWindow App(sf::VideoMode(1280, 720, 32), "Space Invaders!");
    App.UseVerticalSync(true);

    // Load the sprite image from a file
    sf::Image PlayerImage;
    if (!PlayerImage.LoadFromFile("Images/player.psd"))
        return EXIT_FAILURE;

    sf::Sprite Player(PlayerImage);
    Player.SetPosition(200.f, 100.f);
    Player.SetCenter(32.f, 32.f);

    sf::Image BackgroundImage;
    if ( !BackgroundImage.LoadFromFile("Images/space.psd"))
        return -1;
    sf::Sprite Background(BackgroundImage);

    std::vector<sf::Sprite> missiles;
    sf::Image MissileImage;
    if ( !MissileImage.LoadFromFile("Images/Missle.psd"))
        return -1;

    std::vector<Enemy> enemies;
    if ( !EnemyImage.LoadFromFile("Images/Bad Guy!.psd"))
        return -2;
    createWave(enemies);

    std::vector<sf::Sprite> enemyMissiles;
    if ( !EnemyMissileSprite.LoadFromFile("Images/BadGuyMissile.psd") )
        return -3;

    sf::String help("Use WASD to move and change your direction.\nUse the arrow keys to move without changing your direction.\nPress space to fire.");
    help.SetSize(16.0f);
    help.SetColor(sf::Color::Red);
    help.SetPosition(848, 0);

    // Start game loop
    while (App.IsOpened())
    {
        // Process events
        sf::Event Event;
        while (App.GetEvent(Event))
        {
            // Close window : exit
            if (Event.Type == sf::Event::Closed)
                App.Close();

            if (Event.Key.Code == sf::Key::F1)
            {
                sf::Image Screen = App.Capture();
                Screen.SaveToFile("screenshot.png");
            }

            if ( gameOver && score > getLastScore(highScoreList))
            {

                if (Event.Type == sf::Event::TextEntered)
                {
                    char c = Event.Text.Unicode;

                    if (c == 8)//8 is backspace
                    {
                        if (inputString.size() > 0)//check that there is something to delete
                        {
                            inputString.erase(inputString.end() - 1);//delete the last character
                        }
                    }
                    else if (c < 128 && c > 31)//pretty much anything you want should be between 31 and 128
                    {
                        inputString.push_back(c);
                    }
                }


                whatever.SetText(inputString);
            }

        }

        // Get elapsed time
        float ElapsedTime = App.GetFrameTime();
        currentTime = clock.GetElapsedTime();

        if ( !gameOver )
        {
            // Move the sprite
            if ((App.GetInput().IsKeyDown(sf::Key::A) || App.GetInput().IsKeyDown(sf::Key::Left)) && Player.GetPosition().x > 32)
            {
                Player.Move(-250 * ElapsedTime, 0);
            }
            if ((App.GetInput().IsKeyDown(sf::Key::D) || App.GetInput().IsKeyDown(sf::Key::Right)) && Player.GetPosition().x < 300)
            {
                Player.Move( 250 * ElapsedTime, 0);
            }
            if ((App.GetInput().IsKeyDown(sf::Key::W) || App.GetInput().IsKeyDown(sf::Key::Up)) && Player.GetPosition().y > 32)
            {
                Player.Move(0, -250 * ElapsedTime);
            }
            if ((App.GetInput().IsKeyDown(sf::Key::S) || App.GetInput().IsKeyDown(sf::Key::Down)) && Player.GetPosition().y < 688)
            {
                Player.Move(0,  250 * ElapsedTime);
            }

            //rotate the sprite
            if (App.GetInput().IsKeyDown(sf::Key::A))
            {
                Player.SetRotation(180);
            }
            if (App.GetInput().IsKeyDown(sf::Key::D) )
            {
                Player.SetRotation(0);
            }
            if (App.GetInput().IsKeyDown(sf::Key::W) )
            {
                Player.SetRotation(90);
            }
            if (App.GetInput().IsKeyDown(sf::Key::S) )
            {
                Player.SetRotation(270);
            }


            if ( !App.GetInput().IsKeyDown(sf::Key::Space) )
            {
                spaceIsPressed = false;
            }

            if ( App.GetInput().IsKeyDown(sf::Key::Space) && !spaceIsPressed)
            {
                sf::Sprite Missile(MissileImage);
                Missile.SetPosition(Player.GetPosition());
                Missile.SetRotation(Player.GetRotation());
                missiles.push_back(Missile);
                spaceIsPressed = true;
            }

            makeEnemiesShoot(enemies, enemyMissiles);

            moveMissiles(missiles, ElapsedTime);
            moveEnemyMissiles(enemyMissiles, ElapsedTime);

            checkMissiles(missiles);
            checkMissiles(enemyMissiles);

            if ( !enemiesInPlace )
                moveEnemiesIn(enemies, ElapsedTime);

            testCollisions(enemies, missiles);
            if ( checkCollisions(Player, enemyMissiles) )
            {
                // Player has been hit! Clear the screen of missiles, reset his position, and decrease the lives
                lives--;
                enemyMissiles.clear();
                Player.SetPosition(200.0f, 32.0f);
                deathTime = clock.GetElapsedTime();

                if ( lives < 0 )
                    gameOver = true;
            }

            if ( getAliveEnemies(enemies) == 0 )
                createWave(enemies);
        }
        else
        {
            if ( App.GetInput().IsKeyDown(sf::Key::Escape) )
                App.Close();
            if ( App.GetInput().IsKeyDown(sf::Key::Return))
                finishedEnteringName = true;
        }
        std::string sStats;
        std::stringstream out;


        out<< "Lives: ";
        if ( lives < 0)
            out<< "Dead";
        else
            out<< lives;

        out << "  Score: " << score;
        sStats = out.str();


        sf::String StringStats(sStats);
        StringStats.SetPosition(10,680);
        // Clear screen
        App.Clear();

        // Display sprite in our window
        App.Draw(Background);
        for ( unsigned int i = 0; i < missiles.size(); i++ )
            App.Draw(missiles.at(i));
        if ( !gameOver )
            App.Draw(Player);

        for ( unsigned int i = 0; i < enemies.size(); i++)
            if ( enemies.at(i).isAlive() )
                App.Draw(enemies.at(i).getSprite());
        for ( unsigned int i = 0; i < enemyMissiles.size(); i++ )
            App.Draw(enemyMissiles.at(i));

        App.Draw(StringStats);
        App.Draw(help);

        if ( currentTime - deathTime < 1.0f && clock.GetElapsedTime() > 1.0f)
        {
            sf::String deathInfo("You've been killed!");
            deathInfo.SetPosition(360, 0);
            App.Draw(deathInfo);
        }

        if ( gameOver )
        {
            sf::String gameOverString("Game Over! You lose! Press Esc to quit.");
            std::string scoreMsg;
            if ( score == 0 )
                scoreMsg = "Wow you suck";
            else if ( score < 750 )
            {
                scoreMsg = "You're getting there! Better luck next time.";
            }
            else
            {
                scoreMsg = "You died, but you died after killing a lot of people. Good job!";
            }

            sf::String ScoreMsg(scoreMsg);

            gameOverString.SetPosition(350, 600);
            ScoreMsg.SetPosition(350, 625);
            App.Draw(gameOverString);
            App.Draw(ScoreMsg);
            App.Draw(highScoreString);
            if ( score > getLastScore(highScoreList) && !finishedEnteringName )
            {
                App.Draw(youMadeIt);
                App.Draw(whatever);
            }

            if ( finishedEnteringName && !savedToFile)
            {
                if ( score > getLastScore(highScoreList))
                {
                    for ( unsigned int i = 0; i < highScoreList.size(); i++ )
                    {
                        Score temp = highScoreList.at(i);
                        if ( score >  temp.Getscore())
                        {
                            //add the new score before this one
                            Score newScore(inputString, score);
                            highScoreList.insert(highScoreList.begin()+i, newScore);
                            highScoreList.erase(highScoreList.end()-1);
                            break;
                        }
                    }

                    saveScoresToFile(highScoreList);
                    highScoreString.SetText(convertScoresToString(highScoreList));
                    savedToFile = true;
                }
            }
        }

        // Display window contents on screen
        App.Display();
    }

    return EXIT_SUCCESS;
}
Exemplo n.º 8
0
Wave* World::createWave(std::vector<float> position, int emitterId, float speed, float amplitude)
{
    return createWave(position.at(0), position.at(1), emitterId, speed, amplitude);
}