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

+19 -1
View File
@@ -2,6 +2,7 @@
#include <SDL3/SDL.h>
#include <memory>
#include <optional>
#include <string>
@@ -10,9 +11,10 @@
// Forward-declaracions: mantenim aquest header lleuger. `Player` viu a
// `source/game/entities/player.hpp` i només es referencia per referència
// dins `onPlayerContact`; `EventBus` és opcional a cada entitat i viu al
// seu header propi.
// seu header propi. `Surface` és el backend de render paletitzat del motor.
class Player;
class EventBus;
class Surface;
// Entitat genèrica del món. Actua com a dada en comú per a tots els actors
// del joc (decoratius, interactables, perills mòbils i estàtics): manté
@@ -78,11 +80,27 @@ class Entity {
// estàtiques de moment) el poden ignorar.
void setEventBus(EventBus* bus) { bus_ = bus; }
// Assigna la caixa de render en píxels. La invoca `EntityManager` durant
// `loadFromLevel` un cop sap la posició definitiva de l'entitat al mapa.
void setPixelRect(SDL_FRect rect) { pixel_rect_ = rect; }
// Assigna la surface per al dibuix. `shared_ptr` perquè les surfaces
// viuen al `Resource::Cache` i es comparteixen. Si no s'assigna,
// `render()` no fa res.
void setSurface(std::shared_ptr<Surface> surface) { surface_ = std::move(surface); }
// Accessor públic (la viewable rep per tipus complet `shared_ptr`, però
// el valor pot ser nul). L'usa `EntityManager::renderAll` per dibuixar
// sense dependre de la dispatch virtual — el dibuix és centralitzat al
// manager per tal de confinar la dependència cap a `Surface`.
[[nodiscard]] auto getSurface() const -> const std::shared_ptr<Surface>& { return surface_; }
protected:
std::string name_;
TilePos tile_{};
SDL_FRect pixel_rect_{};
std::optional<AnimationComponent> anim_;
std::shared_ptr<Surface> surface_{nullptr};
bool collides_{false};
bool interactable_{false};
EventBus* bus_{nullptr};