int Game::update(sf::Event* event) { currentState = State::GAME; if (isGameOver) { score.updateHighScore(); currentState = State::GAME_OVER; } else { handleInput(event); solveCollisions(); for (unsigned i = 0; i < missiles.size(); i++) { if (missiles[i]->getAlive()) { missiles[i]->update(&explosions); } else { delete missiles[i]; missiles.erase(missiles.begin() + i); } } for (unsigned i = 0; i < meteors.size(); i++) { if (meteors[i]->getAlive()) { meteors[i]->update(&explosions); } else { if (meteors[i]->getIsWaveSpawner()) { dropMeteorWave(); } if (!meteors[i]->getReachedDestination()) { score.offsetScore(settings->scoreForMeteor); } delete meteors[i]; meteors.erase(meteors.begin() + i); } } for (unsigned i = 0; i < explosions.size(); i++) { if (explosions[i]->getAlive()) { explosions[i]->update(); } else { delete explosions[i]; explosions.erase(explosions.begin() + i); } } if (nrOfMeteorsLeftTilNextLevel <= 0 && meteors.empty()) { if (currentLevel != 0) { setRandomBackgroundColor(); } increaseLevel(); dropMeteorWave(); } } return currentState; }
void FlowNode::solve(const glm::vec3& constrainPoint, float maxDistance, const FlowCollisionResult& collision) { solveConstraints(constrainPoint, maxDistance); solveCollisions(collision); };