diff --git a/source/game/entities/event_bus.hpp b/source/game/entities/event_bus.hpp index 35524c5..a61a1cf 100644 --- a/source/game/entities/event_bus.hpp +++ b/source/game/entities/event_bus.hpp @@ -23,16 +23,27 @@ class Entity; // 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` -// per evitar alias ambigus al variant (dos ints sense nom). +// Tile (col, row) — payload de `tile_painted` (i altres events de tile sense +// metadada extra). No és un `pair` per evitar alias ambigus al +// variant (dos ints sense nom). struct TilePos { int col{0}; int row{0}; }; +// Tile pintat pel jugador — payload de `on_tile_entered`. Porta l'índex +// de tile amb què el jugador pinta (cada Player pot pintar amb un tile +// diferent, llegit del YAML del mapa). El PaintLayer filtra pintabilitat, +// marca i re-publica `tile_painted` amb només la posició. +struct PaintedTile { + int col{0}; + int row{0}; + int tile_index{-1}; +}; + struct Event { std::string name; - using Payload = std::variant; + using Payload = std::variant; Payload payload; }; @@ -71,6 +82,9 @@ class EventBus { void publish(const std::string& name, TilePos tile) { publish(Event{.name = name, .payload = tile}); } + void publish(const std::string& name, PaintedTile painted) { + publish(Event{.name = name, .payload = painted}); + } private: struct Subscription {