Esempio n. 1
0
void GameScene::updateAnimationState()
{
	switch (m_playerState)
	{
	case PlayerStateIdle:
		idleAnimation();
		break;
	case PlayerStateBoost:
		boostAnimation();
		break;

	default: break;
	}
}
Esempio n. 2
0
void Enemy::update(sf::Time timeElapsed)
{
	sf::Vector2f velocity(0, 0);

	// Cause the enemies to go back to the top of the screen when hitting the bottom
	if (this->sprite.getPosition().y > GAME_HEIGHT + 200)
	{
		this->sprite.setPosition(sprite.getPosition().x, -200);
		this->hasFired = false;
	}

	// Only execute once
	if (order < 4)
	{
		if (moveTimer.getElapsedTime().asSeconds() > 0.005f)
		{
			moveTimer.restart();

			switch (order)
			{
			case (0) :
				amplitude = 200;
				period = 1.0f;

				if (point_num == 0)
				{
					center_x = this->sprite.getPosition().x;
					center_y = this->sprite.getPosition().y;
				}

				sprite.setPosition(point_x, point_y);

				if (point_num <= 90)
				{
					moveSequence(timeElapsed, velocity, point_num, SINUSOID, 90, -2 * 360);
					break;
				}

				order++;
				point_num = 0;
				theta = 90;

			case (1) :
				semi_axis_x = 350;
				semi_axis_y = 200;

				// Use sprite's current position to start sequence (only for starting point)
				if (point_num == 0)
				{
					center_x = this->sprite.getPosition().x - (semi_axis_x * std::cos(theta * (PI / 180)));
					center_y = this->sprite.getPosition().y - (semi_axis_y * std::sin(theta * (PI / 180)));
				}

				if (point_num <= 30)
				{
					//moveSequence(this->shape2, timeElapsed, velocity, point_num, ELLIPSE, 30, 90);
					moveSequence(timeElapsed, velocity, point_num, ELLIPSE, 30, 90);
					sprite.setPosition(point_x, point_y);
					//moveSequence(timeElapsed, velocity, point_num, ELLIPSE, 15, 90);
					break;
				}

				// Move onto next sequence
				order++;
				point_num = 0; // Reset counter
				theta = 180; // New initial theta
				center_x -= (semi_axis_x - radius); // Move shape

			case (2) :
				radius = 200;

				point_x = center_x + (radius * std::cos(theta * (PI / 180)));
				point_y = center_y + (radius * std::sin(theta * (PI / 180)));

				sprite.setPosition(point_x, point_y);

				if (point_num <= 60)
				{
					//moveSequence(this->shape3, timeElapsed, velocity, point_num, CIRCLE, 60, 270);
					moveSequence(timeElapsed, velocity, point_num, CIRCLE, 60, 270);
					break;
				}

				// Move onto next sequence
				order++;
				point_num = 0;
				theta = 90;
				center_y -= (semi_axis_x - radius);

			case (3) :
				semi_axis_x = 200;
				semi_axis_y = 350;

				point_x = center_x + (semi_axis_x * std::cos(theta * (PI / 180)));
				point_y = center_y + (semi_axis_y * std::sin(theta * (PI / 180)));

				sprite.setPosition(point_x, point_y);

				if (point_num <= 30)
				{
					//moveSequence(this->shape4, timeElapsed, velocity, point_num, ELLIPSE, 30, 90);
					moveSequence(timeElapsed, velocity, point_num, ELLIPSE, 30, 90);
					break;
				}

				// Reset values
				order++;
				point_num = 0;
				theta = 0;

				// Go from position into grid formation
				//moveToFormation(timeElapsed);
			}
		}
	}

	// Execute other animations when not doing movement sequence
	else
	{
		// Break position and attack player after a certain amount of time
		if (moveTimer.getElapsedTime().asSeconds() > 5.0f)
		{
			attackPlayer(timeElapsed);
		}

		else
		{
			if (idleAnimateTimer.getElapsedTime().asSeconds() > 0.5f)
			{
				idleAnimateTimer.restart();
				hasWingsOpen = !hasWingsOpen;
				idleAnimation();
			}

			// Execute idle movement pattern
			if (idleMovementTimer.getElapsedTime().asSeconds() > 0.7f)
			{
				idleMovementTimer.restart();
				isEnemyMovingRight = !isEnemyMovingRight;
			}

			if (isEnemyMovingRight)
				velocity.x = ENEMY_SPEED / 2;

			else if (!isEnemyMovingRight)
				velocity.x = -ENEMY_SPEED / 2;

			sprite.move(velocity * timeElapsed.asSeconds());
		}
	}
}