Esempio n. 1
0
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;
}
Esempio n. 2
0
void FlowNode::solve(const glm::vec3& constrainPoint, float maxDistance, const FlowCollisionResult& collision) {
    solveConstraints(constrainPoint, maxDistance);
    solveCollisions(collision);
};