feat(decals): tiles de decal de sòl compten com a pintats des del load
This commit is contained in:
1 parent
7cd7b4dc4f
commit
7d0aca506a
6 files changed
+74
-12
No files matched your search
@@ -420,6 +420,32 @@ void EntityManager::loadFromLevel(const std::string& level_yaml_path) {
|
||||
if (OK) { ++loaded; }
|
||||
}
|
||||
|
||||
// Broadcast inicial: marca com a "pintats" tots els tiles ocupats per
|
||||
// decals de sòl (Hole, i futurs pinchos plans, plaques, charcos...).
|
||||
// Imprescindible perquè el jugador no pot trepitjar aquests tiles
|
||||
// (cauria al forat) i els sarcòfags vecins no podrien completar el
|
||||
// perímetre — la sala seria incompletable. Usa el canal semàntic
|
||||
// `tile_painted` (lògica de joc), no `on_tile_entered` (presència
|
||||
// física del jugador). Ho fem aquí, després del bucle de spawns,
|
||||
// perquè tots els sarcòfags ja estan registrats al fan-out (la
|
||||
// subscripció del manager és al ctor, anterior a qualsevol load).
|
||||
int decal_broadcast = 0;
|
||||
for (const auto& entity : entities_) {
|
||||
if (!entity->isFloorDecal()) { continue; }
|
||||
const auto BOX = entity->getCollisionRect();
|
||||
const auto [COL, ROW] = Map::pixelToTile(BOX.x, BOX.y);
|
||||
bus_.publish(Event{
|
||||
.name = "tile_painted",
|
||||
.payload = TilePos{.col = COL, .row = ROW},
|
||||
.player_id = -1,
|
||||
});
|
||||
++decal_broadcast;
|
||||
}
|
||||
if (decal_broadcast > 0) {
|
||||
std::cout << "EntityManager: " << decal_broadcast
|
||||
<< " tile_painted broadcast inicial (decals de sòl)\n";
|
||||
}
|
||||
|
||||
std::cout << "EntityManager: " << loaded << " entitats carregades des de "
|
||||
<< level_yaml_path << '\n';
|
||||
}
|
||||
Reference in new issue
Block a user