void advanceGame(void* gameMemory, OOGameInput* input, OOGameOutput* output) { cbgame * game = (cbgame*) gameMemory; oofloat respawnTime = 2.f; if(game->p1.score == CombatGame_ScoreLimit) { //Player 1 wins } else if (game->p2.score == CombatGame_ScoreLimit) { //Player 2 Wins } if(!game->p1.alive && game->time >= game->p1.timeOfDeath + respawnTime) { respawnPlayer(game, &game->p1); } else if (!game->p2.alive && game->time >= game->p2.timeOfDeath + respawnTime) { respawnPlayer(game, &game->p2); } game->input = input; game->output = output; if( !game->initialised ) { initGame(game); } game->moveDelta = game->p1.x; updateGame(game); game->moveDelta -= game->p1.x; clearScreen(game); moveWall(game); drawPlayer(game, &game->p2); drawPlayer(game, &game->p1); drawArena(game); if(game->p1.missile.isFiring) { drawMissile(game,&game->p1); } if(game->p2.missile.isFiring) { drawMissile(game,&game->p2); } game->time += game->input->dt; }
void EntityManager::setMode(Mode mode) { // re-init particles m_particles.clear(); MessageSystem::clear(); ControlPanel::getInstance().setMode(mode); switch (mode) { case LEVELS_MODE: ControlPanel::getInstance().setLevelDuration(m_levels.getDuration()); m_spawnMethod = &EntityManager::levelsCallback; // le vaisseau du joueur est conservé d'un niveau à l'autre if (m_mode != LEVELS_MODE || m_player == NULL || m_player->getHP() <= 0) { respawnPlayer(); } else { // Delete all entities but player for (EntityList::iterator it = m_entities.begin(); it != m_entities.end();) { if (*it != m_player) { delete *it; it = m_entities.erase(it); } else { ++it; } } m_player->setPosition(0, m_height / 2); m_player->onInit(); } // Set background images if (m_levels.getBottomLayer()) { m_layer1.setTexture(*m_levels.getBottomLayer()); m_layer1.setColor(sf::Color::White); } if (m_levels.getTopLayer()) { m_layer2.setTexture(*m_levels.getTopLayer()); m_layer2.setColor(m_levels.getLayerColor()); } m_decor_height = m_levels.getDecorHeight(); m_stars_emitter.createParticles(m_levels.getStarsCount()); // Set background music if (m_levels.getMusicName() != NULL) { std::string filename = Resources::getSearchPath() + "/music/" + m_levels.getMusicName(); SoundSystem::openMusicFromFile(filename); SoundSystem::playMusic(); } else { SoundSystem::stopMusic(); } break; case INFINITY_MODE: { m_spawnMethod = &EntityManager::infinityModeCallback; respawnPlayer(); // Fog with random color on layer 2, sf::Color color(math::rand(0, 40), math::rand(0, 40), math::rand(20, 60)); m_layer1.setTexture(Resources::getTexture("layers/blue.jpg")); m_layer1.setColor(color); m_layer2.setTexture(Resources::getTexture("layers/fog.png")); m_layer2.setColor(color); m_decor_height = 0; m_stars_emitter.createParticles(math::rand(50, 100)); SoundSystem::openMusicFromFile(Resources::getSearchPath() + "/music/spacesong.mod"); SoundSystem::playMusic(); m_max_droppable_index = 1; m_max_droppable_points = 0; break; } } m_mode = mode; m_timer = 0.f; }