void GameScene::updateAnimationState() { switch (m_playerState) { case PlayerStateIdle: idleAnimation(); break; case PlayerStateBoost: boostAnimation(); break; default: break; } }
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()); } } }