Files

36 lines
1.3 KiB
C++

#pragma once
#include "game/entities/entity.hpp"
class Player;
// Base d'entitats d'atac: spawnejades pels jugadors, viuen poc temps i
// poden danyar `Hazard`s i altres `Player`s (mai el seu propi `owner_`).
//
// Branca paral·lela a `Hazard` (no hereta d'ella) perquè la semàntica és
// inversa: un `Hazard` és un perill estàtic/dinàmic que toca el jugador,
// mentre que un `Attack` és el jugador qui colpeja la resta. Mantenir-les
// separades permet, p. ex., que un atac no aparega al test de "què colpeja
// al Player en el seu rect" (`EntityManager::checkPlayerCollisions`) perquè
// el sentit del filtre és un altre.
//
// `Attack` no col·lisiona al test de moviment (els atacs no bloquegen
// passos). El càlcul de quins objectius reben dany el fa cada subclasse
// segons la seua geometria (rectangle direccional per al látigo, cercle
// per a una explosió de bomba en el futur, etc.).
class Attack : public Entity {
public:
Attack() {
collides_ = false;
interactable_ = false;
}
void setOwner(Player* owner) { owner_ = owner; }
[[nodiscard]] auto getOwner() const -> Player* { return owner_; }
protected:
// Jugador que ha llançat l'atac. No rep dany del seu propi atac
// (anti-self-friendly-fire). `nullptr` només a tests sintètics.
Player* owner_{nullptr};
};