feat(entities): integració del sistema d'entitats al GameScene
This commit is contained in:
1 parent
96b71b0f65
commit
7191a08618
16 files changed
+683
-15
No files matched your search
@@ -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};
|
||||
|
||||
Reference in new issue
Block a user