feat(event_bus): afegeix PaintedTile al payload

This commit is contained in:
JailDesigner committed 2026-04-23 13:13:47 +02:00
1 parent 01145464ed
commit 48ff1839bc
1 file changed
+17 -3
+17 -3
View File
@@ -23,16 +23,27 @@ class Entity;
// consumir events tipats amb `std::get_if`. Si apareixen més tipus de // consumir events tipats amb `std::get_if`. Si apareixen més tipus de
// payload, s'amplia aquí sense tocar cridants existents. // payload, s'amplia aquí sense tocar cridants existents.
// Tile (col, row) — payload de `on_tile_entered`. No és un `pair<int,int>` // Tile (col, row) — payload de `tile_painted` (i altres events de tile sense
// per evitar alias ambigus al variant (dos ints sense nom). // metadada extra). No és un `pair<int,int>` per evitar alias ambigus al
// variant (dos ints sense nom).
struct TilePos { struct TilePos {
int col{0}; int col{0};
int row{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 { struct Event {
std::string name; std::string name;
using Payload = std::variant<std::monostate, int, std::string, Entity*, TilePos>; using Payload = std::variant<std::monostate, int, std::string, Entity*, TilePos, PaintedTile>;
Payload payload; Payload payload;
}; };
@@ -71,6 +82,9 @@ class EventBus {
void publish(const std::string& name, TilePos tile) { void publish(const std::string& name, TilePos tile) {
publish(Event{.name = name, .payload = tile}); publish(Event{.name = name, .payload = tile});
} }
void publish(const std::string& name, PaintedTile painted) {
publish(Event{.name = name, .payload = painted});
}
private: private:
struct Subscription { struct Subscription {