Kamikadze wybucha nawet bez gracza

This commit is contained in:
2024-12-11 17:49:31 +01:00
parent c1a24a701b
commit 0c706625d2
3 changed files with 24 additions and 17 deletions

View File

@@ -26,6 +26,7 @@ public:
void update(const sf::Vector2f& playerPosition);
bool isAlive() const;
bool isExploding() const;
void takeDamage();
void updateDirection();

View File

@@ -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<float>(position.x), static_cast<float>(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;

View File

@@ -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);
}
}