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

+14 -3
View File
@@ -16,15 +16,23 @@ class Entity;
// Event pub/sub minimalista. Hi ha un únic `EventBus` per mundus (propietat
// de l'`EntityManager`); les entitats que el necessiten en reben un punter
// via `Entity::setEventBus`. Aquest sistema cobreix les necessitats
// actuals (sarcophagus_opened, level_complete, player_hit) sense portar-hi
// senyalització més pesada.
// actuals (sarcophagus_opened, level_complete, player_hit, on_tile_entered)
// sense portar-hi senyalització més pesada.
//
// Decisió: `std::variant` per al payload — evita any/void* i facilita
// consumir events tipats amb `std::get_if`. Si apareixen més tipus de
// payload, s'amplia aquí sense tocar cridants existents.
// Tile (col, row) — payload de `on_tile_entered`. No és un `pair<int,int>`
// per evitar alias ambigus al variant (dos ints sense nom).
struct TilePos {
int col{0};
int row{0};
};
struct Event {
std::string name;
using Payload = std::variant<std::monostate, int, std::string, Entity*>;
using Payload = std::variant<std::monostate, int, std::string, Entity*, TilePos>;
Payload payload;
};
@@ -60,6 +68,9 @@ class EventBus {
void publish(const std::string& name, int value) {
publish(Event{.name = name, .payload = value});
}
void publish(const std::string& name, TilePos tile) {
publish(Event{.name = name, .payload = tile});
}
private:
struct Subscription {