Beispiel #1
0
void World::step() {
  QWorld::step();

  particleSystem()->step();
  lightSystem()->step();
  mainAction()->step();

  emit m_worldObject.fpsChanged();
  emit m_worldObject.playerScoreChanged();
}
Beispiel #2
0
Game::Game(Item* parent)
    : DisplayItemFrame(parent),
      m_viewWorld(this),
      m_lightSystem(this, view()->world()),
      m_particleSystem(m_lightSystem.lightTexture()->sourceItem()) {
  view()->initialize();
  lightSystem()->initialize();

  particleSystem()->setLightSystem(lightSystem());

  load(":/json/map00.json");
}
int main(int argc, char** argv)
{

    std::unique_ptr<fj::BloodSPHMethod> solver;
    std::unique_ptr<fj::ParticleCollisionDispatcher> collisionDispatcher;
    fj::BloodParticleSystem particleSystem(std::move(solver), std::move(collisionDispatcher));
    
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 5; j++) {
            for (int k = 0; k < 10; k++) {
                particleSystem.createParticle( fj::Vector3(i, j, k) );
            }
        }
    }
    
    
    return EXIT_SUCCESS;
}
int main(int argc, char** argv)
{
  if (argc!=3){
    std::cerr<<"There should be two arguments"<<std::endl;
    return -1;
  }
  
  std::string parameterfile = argv[1];
  std::string datafile = argv[2];
  
  ParameterReader parameters;
  parameters.readParameters(parameterfile);
  
  MolDy particleSystem(parameters);
  
  particleSystem.readData(datafile);
  particleSystem.simulate();
  return 0;
}
void SplatterSystem::particleInteraction( const double & delta, ParticleSystem::Particle & particle )
{
	if( mTerrain->getHeightAboveGround( particle.position() ) > -particleSystem()->size()/2.0f )
		return;
	particle.setLife( 0.0f );
}
Beispiel #6
0
int main(int argc, char** argv) {

  sf::RenderWindow App(sf::VideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 32),
      "Olivier in zombie land");

  App.SetFramerateLimit(60);
  bool game_over = false;

  sf::Image BackgroundImage;
  sf::Sprite BackgroundSprite;

  if(!BackgroundImage.LoadFromFile("../resources/backgrounds/Floor.png")) {
    return EXIT_FAILURE;
  }
  BackgroundSprite.SetImage(BackgroundImage);

  sf::Image predDeathImg;
  sf::Sprite predDeathSprite;
  if(!predDeathImg.LoadFromFile("../resources/sprites/predDeath.png")) {
    return EXIT_FAILURE;
  }
  predDeathSprite.SetImage(predDeathImg);
  predDeathSprite.Resize(predDeathImg.GetWidth() * 2, predDeathImg.GetHeight() * 2);
  predDeathSprite.SetPosition(50, 300);

  std::vector<Object*> objects;

  Player *player = new Player; 
  objects.push_back(player);


  SpatialHash grid;

  sf::Font MyFont;
  if (!MyFont.LoadFromFile("../resources/fonts/comics.ttf", 50)) {
    std::cout << "Fail" << std::endl;
    return EXIT_FAILURE;
  }

  sf::Font megaFont;
  if (!megaFont.LoadFromFile("../resources/fonts/megaman_2.ttf", 50)) {
    std::cout << "Fail megaman font" << std::endl;
    return EXIT_FAILURE;
  }

  sf::String waveText;
  waveText.SetFont(megaFont);
  waveText.SetColor(sf::Color::Red);
  waveText.SetSize(75.f);
  waveText.SetPosition(225, SCREEN_HEIGHT/2 - waveText.GetSize());

  float waveTime = 0;
  int waveNumber = 0;
  bool newWave = true;

  int numBoss = 1;
  int killPerWave = 15;
  int killThisWave = 0;

  sf::String Timer, KillCount, HP, GameOverString, Score;


  Timer.SetFont(MyFont);
  Timer.SetColor(sf::Color(0, 0, 255));
  Timer.SetSize(50.f);
  Timer.SetPosition(SCREEN_WIDTH/2 - Timer.GetSize()/2 - 75, 10.f);

  KillCount.SetFont(MyFont);
  KillCount.SetColor(sf::Color(255, 0, 0));
  KillCount.SetSize(50.f);
  KillCount.SetPosition(SCREEN_WIDTH - 250.f, 10.f);

  HP.SetFont(MyFont);
  HP.SetColor(sf::Color(0, 255, 0));
  HP.SetSize(50.f);
  HP.SetPosition(25.f, 10.f);

  float running_time = 0.0;
  float last_time = 0.0;

  std::srand(std::time(NULL));

  int spawn_rate = 1;
  float spawn_time = 0.0;

  sf::SoundBuffer predBuffer;
  sf::Sound predSound;

  if (!predBuffer.LoadFromFile("../resources/sfx/predator.ogg")) {
    std::cout << "Error loading sfx" << std::endl; 
  }
  predSound.SetBuffer(predBuffer);

  //Title stuff
  Title title(App);

  GameState gameState = INTRO;

  
  //Title loop
  while (App.IsOpened()) {

    //Process events
    sf::Event Event;

    //Window closed
    while (App.GetEvent(Event)) 
    {
      if(Event.Type == sf::Event::Closed)
        App.Close();

      //Escape key pressed
      if((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))	
        App.Close();
    }

    if (title.showTitle())
    {
      App.Clear();
      title.update();
      App.Display();
      continue;
    }
    else
    {
      gameState = WAVE;
      break;
    }
  }


  Music::GetInstance().playNormal();

  ParticleSystem particleSystem(SCREEN_WIDTH, SCREEN_HEIGHT);
  particleSystem.setDissolve( true );
  particleSystem.setDissolutionRate( 1 );
	//particleSystem.setGravity(2.0f, 1.2f );

  //Peaking
  Peak peaker(App);

  //Effect
  EffectSystem& effectSystem = EffectSystem::GetInstance();

  //Start game loop
  while (App.IsOpened()) {

    //Process events
    sf::Event Event;

    //Window closed
    while (App.GetEvent(Event)) 
    {
      if(Event.Type == sf::Event::Closed)
        App.Close();

      //Escape key pressed
      if((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))	
        App.Close();

      if(Event.Key.Code == sf::Key::F1) {

        sf::Image Screen = App.Capture();
        Screen.SaveToFile("../screenshots/screenshot.jpg");
      }      
    }

    if (player->getHealth() > 0)
    {
        float ElapsedTime = App.GetFrameTime();
        running_time += ElapsedTime;


        switch (gameState)
        {
            case INTRO:
                break;
            case WAVE:
            {
                if (newWave)
                {
                  waveNumber++;
                  waveTime = running_time;
                  newWave = false;

                  std::stringstream wave;
                  wave << waveNumber;
                  waveText.SetText("Wave " + wave.str());

                  killPerWave += 10 * waveNumber;
                  killThisWave = 0;
                }

                if (killThisWave > killPerWave && gameState == WAVE)
                {
                    gameState = BOSS;

                    //Create Boss
                    for (int i = 0; i < numBoss; i++) {
                      objects.push_back(new Boss(particleSystem, sf::Randomizer::Random(200, 600), sf::Randomizer::Random(200, 500), 40));
                    }

                    newWave = true;
                    if (!player->isRageMode())
                    {
                      Music::GetInstance().stop();
                      Music::GetInstance().playBoss();
                    }
                    break;
                }

                if (!player->isRageMode() && Music::GetInstance().getSong() != "dark_encounter.ogg")
                {
                  Music::GetInstance().stop();
                  Music::GetInstance().playNormal();
                }

                //Increase spawn rate every 30 seconds
                if (running_time - spawn_time > 30) {
                    spawn_rate++;
                    spawn_time = running_time;
                }

                //Spawn Enemy every 2 seconds
                if (running_time - last_time > 2.0) {
                    for (int i = 0; i < spawn_rate; i++) {

                    objects.push_back(new Enemy(particleSystem, rand() % (SCREEN_WIDTH-100) + 40, rand() % (SCREEN_HEIGHT-100) + 40));
                    }
                    last_time = running_time;
                }

                grid.setup(objects);

                //Get elapsed time

                //Handle input
                player->handleInput(App, ElapsedTime, objects, grid);

                App.Draw(BackgroundSprite);

                //Draw body part over floor
                effectSystem.drawBg(App);

                drawScore(App, player, KillCount, Timer, HP, Score, static_cast<int> (running_time));

                player->update(App);
                player->draw(App);

                //Move and draw all object (except bullets)
                for (unsigned int i = 0; i < objects.size(); ++i) {

                    //Aggro is only for enemy
                    objects[i]->aggro(*player, ElapsedTime, objects, grid.getNearby(objects[i]), running_time);

                    //Don't draw player here
                    if (!objects[i]->isPlayer())
                    App.Draw(objects[i]->getSprite());
                }

                //Draw then move bullets
                for(unsigned int i = 0; i < player->bullets.size(); ++i) {
                    App.Draw(player->bullets[i]->getSprite());
                    player->bullets[i]->move(ElapsedTime, objects, grid.getNearby(player->bullets[i]), player->bullets, i);
                    //player->bullets[i]->drawEdge(App);
                }

                //Check if player kill a zombie
                for(unsigned int i = 0; i < objects.size(); ++i) {
                    if (!objects[i]->alive(objects, i, running_time))
                    {
                        player->addKill();
                        killThisWave++;
                    }
                }

                break;
            }
            case BOSS:
                if (newWave)
                {
                  waveTime = running_time;
                  newWave = false;
                  waveText.SetText("BOSS");
                }

                if (!player->isRageMode() && Music::GetInstance().getSong() != "vbogey.ogg")
                {
                  Music::GetInstance().stop();
                  Music::GetInstance().playBoss();
                }

                grid.setup(objects);

                //Handle input
                player->handleInput(App, ElapsedTime, objects, grid);

                App.Draw(BackgroundSprite);

                //Draw body part over floor
                effectSystem.drawBg(App);

                drawScore(App, player, KillCount, Timer, HP, Score, static_cast<int> (running_time));

                player->update(App);
                player->draw(App);

                //Move and draw all object (except bullets)
                for (unsigned int i = 0; i < objects.size(); ++i) {

                    //Aggro is only for enemy
                    objects[i]->aggro(*player, ElapsedTime, objects, grid.getNearby(objects[i]), running_time);

                    //Don't draw player here
                    if (!objects[i]->isPlayer())
                    App.Draw(objects[i]->getSprite());
                }

                //Draw then move bullets
                for(unsigned int i = 0; i < player->bullets.size(); ++i) {
                    App.Draw(player->bullets[i]->getSprite());
                    player->bullets[i]->move(ElapsedTime, objects, grid.getNearby(player->bullets[i]), player->bullets, i);
                    //player->bullets[i]->drawEdge(App);
                }
                
                //Check if player kill a zombie
                for(unsigned int i = 0; i < objects.size(); ++i) {
                    if (!objects[i]->alive(objects, i, running_time))
                    {
                        player->addKill();
                    }
                }

                //if objects contain only player
                if (objects.size() == 1)
                {
                  gameState = WAVE;
                  newWave = true;

                  //Increase number of Boss every 5 waves
                  if (waveNumber % 5 == 0)
                  {
                    numBoss++;
                  }
                  if (!player->isRageMode())
                  {
                    Music::GetInstance().stop();
                    Music::GetInstance().playNormal();
                  }
                }

                break;
        }

        grid.clear();

        particleSystem.remove();
        particleSystem.update();
        particleSystem.render();

        effectSystem.update(App.GetFrameTime());
        effectSystem.draw(App);

        App.Draw(particleSystem.getSprite());

        //Peaking
        peaker.update();

        if (running_time - waveTime <= 1.5)
        {
          App.Draw(waveText);
        }

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

    //Dead
    else
    {
      if (player->playDeath(App))
      {
        App.Display();
      }
      else if (game_over)  {
        App.Clear();
        App.Draw(predDeathSprite);
        App.Draw(GameOverString);
        App.Draw(Timer);
        App.Draw(KillCount);
        App.Draw(Score);
        App.Display();
      }

      else {
        game_over = true;
        Music::GetInstance().stop();

        //play game over song
        Music::GetInstance().playGameOver();

        //Stay there until credit end
        showCredits(App);

        GameOverString.SetFont(MyFont);
        GameOverString.SetColor(sf::Color(255, 255, 0));
        GameOverString.SetSize(100.f);
        GameOverString.SetPosition(SCREEN_WIDTH/2 -
            GameOverString.GetSize()/2 - 225,
            SCREEN_HEIGHT/2 - 200);

        GameOverString.SetText("Game Over");

        Timer.SetFont(MyFont);
        Timer.SetColor(sf::Color(255, 255, 0));
        Timer.SetSize(50.f);
        Timer.SetPosition(SCREEN_WIDTH/2 - Timer.GetSize()/2 - 75,
            SCREEN_HEIGHT/2);

        KillCount.SetFont(MyFont);
        KillCount.SetColor(sf::Color(255, 255, 0));
        KillCount.SetSize(50.f);
        KillCount.SetPosition(SCREEN_WIDTH/2 - KillCount.GetSize()/2 - 80,
            SCREEN_HEIGHT/2 + 100);

        Score.SetFont(MyFont);
        Score.SetColor(sf::Color(255, 255, 0));
        Score.SetSize(50.f);

        Score.SetPosition(SCREEN_WIDTH/2 - KillCount.GetSize()/2 - 80,
            SCREEN_HEIGHT/2 + 200);

        Music::GetInstance().stop();
        predSound.Play();
      }    
    }
  }
  return 0;      
}