feat(entities): integració del sistema d'entitats al GameScene

This commit is contained in:
JailDesigner committed 2026-04-21 13:55:21 +02:00
1 parent 96b71b0f65
commit 7191a08618
16 files changed
+683 -15

No files matched your search

+22
View File
@@ -3,9 +3,12 @@
#include <SDL3/SDL.h>
#include <string>
#include <utility>
#include "core/rendering/sprite/animated_sprite.hpp"
class EventBus;
class Player : public AnimatedSprite {
public:
// Mapeig de tecles per al moviment del jugador. Cada jugador local en pot
@@ -47,6 +50,16 @@ class Player : public AnimatedSprite {
return getPosY() + static_cast<float>(collision_y_offset + collision_size);
}
// Injecta el bus del nivell. El Player publica `on_tile_entered` cada
// vegada que el centre de la seua caixa de col·lisió entra en una
// cel·la nova del tilemap. Si el bus no s'injecta, no emet res.
void setEventBus(EventBus* bus) { bus_ = bus; }
// Tile actual del jugador (centre de `baseBox()` convertit a
// coordenades de tile del tilemap, usant Map::tile_size i
// Map::tilemap_origin_*). Retorna (col, row).
[[nodiscard]] auto getCurrentTile() const -> std::pair<int, int>;
private:
// Rectangle de col·lisió del jugador, usat pel mapa de colisions i com
// a referència per al Z-order.
@@ -72,4 +85,13 @@ class Player : public AnimatedSprite {
void (Player::*set_pos)(float));
Controls controls_;
// Bus del nivell (opcional). Propietat externa (EntityManager); el
// Player només en guarda un punter per publicar events.
EventBus* bus_{nullptr};
// Últim tile publicat. Inicialitzats a un sentinel fora de rang perquè
// el primer frame en què el bus estigui connectat ja emeti un event.
int last_tile_col_{-9999};
int last_tile_row_{-9999};
};