feat(players): suport del segon jugador amb events amb player_id
This commit is contained in:
1 parent
74dad71cc2
commit
4e9d5df872
21 files changed
+309
-49
No files matched your search
+10
-6
@@ -114,16 +114,20 @@ Hud::Hud(EventBus& bus, std::shared_ptr<Text> font)
|
||||
// i puntuacions, ampliarem aquí sense tocar callers.
|
||||
subs_.push_back(bus_.subscribe("player_hit", [this](const Event& ev) {
|
||||
const auto* dmg = std::get_if<int>(&ev.payload);
|
||||
// TODO: quan l'event porte player_id, fer dispatch al bloc real.
|
||||
// Mentrestant, apliquem el hit a P1 (consistent amb el log del
|
||||
// GameScene actual, que tampoc desambigua el jugador).
|
||||
constexpr std::size_t IDX = 0;
|
||||
// Dispatch pel `player_id` de l'event. 0 = P1 (bloc LEFT), 1 = P2
|
||||
// (bloc RIGHT). Si l'event arriba sense id (-1, event world-wide)
|
||||
// fem fallback a P1 per no perdre'l — a la pràctica tots els
|
||||
// publishers de `player_hit` actuals sí que porten id.
|
||||
const std::size_t IDX = (ev.player_id == 1) ? 1U : 0U;
|
||||
if (!players_[IDX].active) { return; }
|
||||
if (players_[IDX].lives > 0) { --players_[IDX].lives; }
|
||||
auto& blk = blocks_[IDX]; // P1 → bloc esquerre
|
||||
const std::size_t BLK_IDX = (IDX == 0) ? static_cast<std::size_t>(BlockId::LEFT)
|
||||
: static_cast<std::size_t>(BlockId::RIGHT);
|
||||
auto& blk = blocks_[BLK_IDX];
|
||||
blk.flash_ms_left = UiConfig::get().hudFlashMs();
|
||||
blk.shake_ms_left = UiConfig::get().hudShakeMs();
|
||||
blk.shake_intensity = 1.5F;
|
||||
std::cout << "[HUD] player_hit dmg=" << (dmg != nullptr ? *dmg : 0)
|
||||
std::cout << "[HUD] player_hit p" << (IDX + 1) << " dmg=" << (dmg != nullptr ? *dmg : 0)
|
||||
<< " lives=" << players_[IDX].lives << '\n';
|
||||
}));
|
||||
|
||||
|
||||
Reference in new issue
Block a user