From 4d2283d15e4daa0fcafa3ef0e706819e3d87353f Mon Sep 17 00:00:00 2001 From: Andrii Solianyk Date: Mon, 6 Jan 2025 16:17:38 +0100 Subject: [PATCH] powerups fully implemented --- assets/img/powerups/TripleShotPU.png | Bin 0 -> 9551 bytes assets/img/powerups/fireratePU.png | Bin 0 -> 2401 bytes .../{PUSpeed.png => movingSpeedPU.png} | Bin headers/Plansza.h | 7 ++- headers/Player.h | 2 + headers/PowerUp.h | 16 ++++- sources/Plansza.cpp | 55 +++++++++++++++--- sources/Player.cpp | 16 ++++- sources/PowerUp.cpp | 3 +- 9 files changed, 87 insertions(+), 12 deletions(-) create mode 100644 assets/img/powerups/TripleShotPU.png create mode 100644 assets/img/powerups/fireratePU.png rename assets/img/powerups/{PUSpeed.png => movingSpeedPU.png} (100%) diff --git a/assets/img/powerups/TripleShotPU.png b/assets/img/powerups/TripleShotPU.png new file mode 100644 index 0000000000000000000000000000000000000000..c3fa917bfd9dcddd978495e4a48c877ffcc3ca17 GIT binary patch literal 9551 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 enemies; std::vector AEnemies; std::vector BEnemies; diff --git a/headers/Player.h b/headers/Player.h index 0e4823e..6c4ab63 100644 --- a/headers/Player.h +++ b/headers/Player.h @@ -29,6 +29,7 @@ public: void moveUp() override; void moveDown() override; void takeDamage(); + void setTripleShot(bool toogle); void update(); std::vector& getRockets(); @@ -44,6 +45,7 @@ private: sf::Clock immortalityClock; // Zegar kontrolujący czas nieśmiertelności float immortalityDuration = 1.5f; // Czas trwania nieśmiertelności w sec bool isImmortal = false; // flaga na immortal + bool tripleShot = false; // flaga na potrójny strzał }; diff --git a/headers/PowerUp.h b/headers/PowerUp.h index 1766186..e6f5d1d 100644 --- a/headers/PowerUp.h +++ b/headers/PowerUp.h @@ -4,8 +4,22 @@ class PowerUp : public ObjectItem { public: - PowerUp(float x, float y, sf::Texture &texture_); + enum Type { + movingSpeedUp, + firerateUp, + tripleShotUp + }; + + PowerUp(float x, float y, sf::Texture &texture, Type type); + void update() override; + + Type getType() const { + return type_; + } + +private: + Type type_; }; #endif //POWERUP_H diff --git a/sources/Plansza.cpp b/sources/Plansza.cpp index a324b79..403bac0 100644 --- a/sources/Plansza.cpp +++ b/sources/Plansza.cpp @@ -26,7 +26,9 @@ Plansza::Plansza(unsigned int windowHeight, unsigned int windowWidth, sf::Render meteorTexture2.loadFromFile("../assets/img/meteors/meteor-2.png"); heartTexture.loadFromFile("../assets/img/hearts/heart.png"); heartTextureGray.loadFromFile("../assets/img/hearts/heart_gray.png"); - powerUpTexture.loadFromFile("../assets/img/powerups/PUSpeed.png"); + movingSpeedPowerUpTexture.loadFromFile("../assets/img/powerups/movingSpeedPU.png"); + fireratePowerUpTexture.loadFromFile("../assets/img/powerups/fireratePU.png"); + tripleShotPowerUpTexture.loadFromFile("../assets/img/powerups/TripleShotPU.png"); // Ładowanie tekstur wrogów enemyTexture.loadFromFile("../assets/img/enemy/enemy.png"); advancedEnemyTexture.loadFromFile("../assets/img/enemy/advanced_enemy.png"); @@ -70,7 +72,8 @@ Plansza::Plansza(unsigned int windowHeight, unsigned int windowWidth, sf::Render // TODO: Refactor tej metody bo rozrosła się za bardzo już void Plansza::update() { -// tło + srand(time(0)); + // tło background.update(); background.draw(*window); @@ -99,11 +102,11 @@ void Plansza::update() { // TODO: Przenieść obiekt dźwięku wewnątrz klasy Bullet if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) { ship->shoot(); - audioManager.playSoundEffect("shoot", 70.f); // Odtworzenie dźwięku wystrzału + // audioManager.playSoundEffect("shoot", 70.f); // Odtworzenie dźwięku wystrzału } if (sf::Mouse::isButtonPressed(sf::Mouse::Right)) { ship->alternate_shoot(); - audioManager.playSoundEffect("shoot_alt", 70.f); // Odtworzenie dźwięku dla alternatywnego strzału + // audioManager.playSoundEffect("shoot_alt", 70.f); // Odtworzenie dźwięku dla alternatywnego strzału } // generowanie nowego meteoru @@ -148,6 +151,7 @@ void Plansza::update() { // Sprawdzenie, czy meteory i pociski są poza granicami ekranu update_meteors(); update_hearts(); + update_power_ups(); ship->updateBullets(); window->draw(ship->getSprite()); @@ -168,15 +172,41 @@ void Plansza::update() { } // TODO: Dodać obsługę kilku różnych power-upów + + //////////////////////////////////////////////////////////////////////////////////////////////// + // Sprawdzenie kolizji z power-upem na prędkość poruszania się i zwiększenie prędkości statku for (auto powerUpIt = powerUps.begin(); powerUpIt != powerUps.end();) { if (ship->getSprite().getGlobalBounds().intersects(powerUpIt->getSprite().getGlobalBounds())) { - ship->setMovingSpeed(10.0f); + if (powerUpIt->getType() == PowerUp::movingSpeedUp) { + ship->setMovingSpeed(15.0f); + movingSpeedPUTimer.restart(); + } + if (powerUpIt->getType() == PowerUp::firerateUp) { + ship->setFirerate(100); + fireratePUTimer.restart(); + } + if (powerUpIt->getType() == PowerUp::tripleShotUp) { + ship->setTripleShot(true); + tripleShotPUTimer.restart(); + } powerUpIt = powerUps.erase(powerUpIt); } else { ++powerUpIt; } } + if (movingSpeedPUTimer.getElapsedTime().asSeconds() >= 5.0f) { + ship->setMovingSpeed(8.0f); + } + if (fireratePUTimer.getElapsedTime().asSeconds() >= 10.0f) { + ship->setFirerate(200); + } + if (tripleShotPUTimer.getElapsedTime().asSeconds() >= 5.0f) { + ship->setTripleShot(false); + } + ///////////////////////////////Koniec obsługi kolizji z power-upami////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////// + for (auto meteorIt = getMeteors().begin(); meteorIt != getMeteors().end();) { bool meteorHit = false; for (auto rocketIt = ship->getBullets().begin(); rocketIt != ship->getBullets().end();) { @@ -763,7 +793,19 @@ void Plansza::spawn_hearts() { void Plansza::spawn_power_up() { if (powerUpSpawnClock.getElapsedTime().asSeconds() > 5) { if (powerUps.size() < 2) { - powerUps.emplace_back(RandomNumberGenerator::getRandomNumber(50, 499), -100, powerUpTexture); + auto powerUpRand = rand() % 3; + switch (powerUpRand) { + case 0: + powerUps.emplace_back(RandomNumberGenerator::getRandomNumber(50, 499), -100, movingSpeedPowerUpTexture, PowerUp::movingSpeedUp); + break; + case 1: + powerUps.emplace_back(RandomNumberGenerator::getRandomNumber(50, 499), -100, fireratePowerUpTexture, PowerUp::firerateUp); + break; + case 2: + powerUps.emplace_back(RandomNumberGenerator::getRandomNumber(50,499), -100, tripleShotPowerUpTexture, PowerUp::tripleShotUp); + } + + } powerUpSpawnClock.restart(); } @@ -836,7 +878,6 @@ std::vector &Plansza::getMeteors() { return meteors; } -// TODO: naliczanie punktów za zabicie wrogów void Plansza::update_score() { if (scoreClock.getElapsedTime().asMilliseconds() > 500) { score++; diff --git a/sources/Player.cpp b/sources/Player.cpp index 7170b2f..26e505e 100644 --- a/sources/Player.cpp +++ b/sources/Player.cpp @@ -36,8 +36,16 @@ void Player::loadTexture() { void Player::shoot() { auto now = std::chrono::steady_clock::now(); if (std::chrono::duration_cast(now - lastShotTime).count() >= firerate) { - bullets.emplace_back(position.x, position.y, bulletTexture); - lastShotTime = now; + if (tripleShot == true) { + bullets.emplace_back(position.x - 40, position.y, bulletTexture); + bullets.emplace_back(position.x, position.y, bulletTexture); + bullets.emplace_back(position.x + 40, position.y, bulletTexture); + lastShotTime = now; + } + if (tripleShot == false) { + bullets.emplace_back(position.x, position.y, bulletTexture); + lastShotTime = now; + } } } @@ -79,6 +87,10 @@ void Player::takeDamage() { } } +void Player::setTripleShot(bool toogle) { + tripleShot = toogle; +} + void Player::setFirerate(unsigned int firerate) { this->firerate = firerate; } diff --git a/sources/PowerUp.cpp b/sources/PowerUp.cpp index c0e62fe..a8e3ff8 100644 --- a/sources/PowerUp.cpp +++ b/sources/PowerUp.cpp @@ -1,6 +1,6 @@ #include "../headers/PowerUp.h" -PowerUp::PowerUp(float x, float y, sf::Texture &texture): ObjectItem(x, y, texture) { +PowerUp::PowerUp(float x, float y, sf::Texture &texture, PowerUp::Type type): ObjectItem(x, y, texture) { position.x = x; position.y = y; texture_ = texture; @@ -9,6 +9,7 @@ PowerUp::PowerUp(float x, float y, sf::Texture &texture): ObjectItem(x, y, textu sprite.setScale(0.5f, 0.5f); sprite.setPosition(x, y); movingSpeed = 3.0f; + this->type_ = type; } void PowerUp::update() {