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
@@ -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 {
|
||||
|
||||
Reference in new issue
Block a user