diff --git a/headers/Kamikadze.h b/headers/Kamikadze.h index 1783fcd..8f33f86 100644 --- a/headers/Kamikadze.h +++ b/headers/Kamikadze.h @@ -26,6 +26,7 @@ public: void update(const sf::Vector2f& playerPosition); bool isAlive() const; + bool isExploding() const; void takeDamage(); void updateDirection(); diff --git a/sources/Kamikadze.cpp b/sources/Kamikadze.cpp index bd8f05c..79eb3ae 100644 --- a/sources/Kamikadze.cpp +++ b/sources/Kamikadze.cpp @@ -74,24 +74,25 @@ void Kamikadze::followPlayer(const sf::Vector2f& playerPosition) { void Kamikadze::explode(const sf::Vector2f& playerPosition, bool& playerHit) { if (!exploding) { - // Kamikadze rozpoczyna eksplozję + // Rozpocznij eksplozję exploding = true; explosionClock.restart(); - movementSpeed = 0.0f; // Zatrzymaj ruch + movementSpeed = 0.0f; // Zatrzymaj Kamikadze - // Sprawdź, czy gracz jest w obszarze eksplozji - const float explosionRange = 50.0f; // Zakładając promień wybuchu + // Zakres, w jakim gracz może zostać trafiony + const float explosionRange = 50.0f; sf::Vector2f diff = playerPosition - sf::Vector2f(static_cast(position.x), static_cast(position.y)); float distance = std::sqrt(diff.x * diff.x + diff.y * diff.y); + // Trafienie gracza, jeśli jest w obszarze eksplozji if (distance <= explosionRange) { - playerHit = true; // Gracz został trafiony + playerHit = true; } } - // Po zakończeniu eksplozji, Kamikadze umiera - if (exploding && explosionClock.getElapsedTime().asSeconds() >= 0.5f) { // 0.5 sekundy - alive = false; + // Sprawdzanie czasu wybuchu + if (exploding && explosionClock.getElapsedTime().asSeconds() >= 0.5f) { + alive = false; // Kamikadze ulega zniszczeniu po eksplozji } } @@ -114,6 +115,9 @@ void Kamikadze::update(const sf::Vector2f& playerPosition) { } } +bool Kamikadze::isExploding() const { + return exploding; +} bool Kamikadze::isAlive() const { return alive; diff --git a/sources/Plansza.cpp b/sources/Plansza.cpp index 9383785..e02f4b8 100644 --- a/sources/Plansza.cpp +++ b/sources/Plansza.cpp @@ -264,29 +264,31 @@ void Plansza::update() { for (auto it = KEnemies.begin(); it != KEnemies.end();) { - sf::Vector2f playerPosition = ship.getSprite().getPosition(); // Pozycja gracza + sf::Vector2f playerPosition = ship.getSprite().getPosition(); // Aktualna pozycja gracza bool playerHit = false; - // Aktualizacja ruchu Kamikadze - + // Aktualizacja pozycji Kamikadze it->update(playerPosition); - // Sprawdź kolizję z graczem + // Wybuch, gdy Kamikadze dotknie gracza if (ship.getSprite().getGlobalBounds().intersects(it->getSprite().getGlobalBounds())) { it->explode(playerPosition, playerHit); - if (playerHit) { - ship.takeDamage(); // Gracz traci punkt życia + ship.takeDamage(); // Gracz otrzymuje obrażenia } } - // Rysuj Kamikadze na ekranie + // Kamikadze eksploduje po aktywacji niezależnie od obecności gracza + if (it->isExploding()) { + it->explode(playerPosition, playerHit); // Eksplozja trwa + } + + // Usunięcie martwego Kamikadze z listy if (it->isAlive()) { window->draw(it->getSprite()); ++it; } else { - // Usuń, jeśli Kamikadze już nie żyje - std::cout << "Kamikadze has exploded!" << std::endl; + std::cout << "Kamikadze exploded!" << std::endl; it = KEnemies.erase(it); } }