feat(player): hit-box 8×8 per a contacte actor-actor (player, momia, trampa)
This commit is contained in:
1 parent
511f8d5b09
commit
858e444842
6 files changed
+84
-8
No files matched your search
@@ -40,6 +40,17 @@ class Player : public AnimatedSprite {
|
||||
inline static int collision_x_offset = 0;
|
||||
inline static int collision_y_offset = 0;
|
||||
|
||||
// Caixa de "contacte" més petita que la caixa de col·lisió: s'usa per
|
||||
// a les interaccions actor-actor (player↔player, player↔momia/trampa),
|
||||
// on volem que el contacte sigui precís i no dispari a "distància"
|
||||
// de la vora del sprite. La caixa de col·lisió gran continua usant-se
|
||||
// per xocar amb murs i sarcòfags (per mantenir el carril del
|
||||
// passadís). Sense `hit_size` al YAML, s'iguala a `collision_size` i
|
||||
// el comportament és idèntic a l'anterior.
|
||||
inline static int hit_size = 0;
|
||||
inline static int hit_x_offset = 0;
|
||||
inline static int hit_y_offset = 0;
|
||||
|
||||
// Ha de cridar-se abans d'instanciar Player; GameScene ho fa al ctor.
|
||||
static void loadFrom(const std::string& yaml_path);
|
||||
|
||||
@@ -115,10 +126,21 @@ class Player : public AnimatedSprite {
|
||||
[[nodiscard]] auto getCurrentTile() const -> std::pair<int, int>;
|
||||
|
||||
// Rectangle de col·lisió del jugador, en coordenades del canvas. Usat
|
||||
// pel mapa de col·lisions i per les entitats que comproven contacte
|
||||
// amb el jugador (momies, trampes, porta).
|
||||
// pel mapa de col·lisions (tryMove contra murs/sarcòfags).
|
||||
[[nodiscard]] auto getBaseBox() const -> SDL_FRect;
|
||||
|
||||
// Rectangle de contacte actor-actor (hit-box), més petit que la caixa
|
||||
// base i concèntric amb ella. L'usen `checkPlayerCollisions`
|
||||
// (momies, trampes, porta) i el resolver jugador↔jugador per
|
||||
// decidir quan es toquen.
|
||||
[[nodiscard]] auto getHitBox() const -> SDL_FRect;
|
||||
|
||||
// Versió estàtica: deriva la hit-box a partir d'una caixa base
|
||||
// arbitrària (p. ex. la posició proposada per `tryMove` abans
|
||||
// d'aplicar-la). Evita recalcular `hit_x_offset`/`hit_y_offset` fora
|
||||
// de Player.
|
||||
[[nodiscard]] static auto hitBoxFromBase(const SDL_FRect& base) -> SDL_FRect;
|
||||
|
||||
// Override del hook de Sprite: `MovingSprite::tryMove` envia aquesta
|
||||
// caixa al callback de col·lisió. La base del Player és més petita
|
||||
// que el sprite (el cap pot sobresortir per murs/sarcòfags sense
|
||||
|
||||
Reference in new issue
Block a user