feat(stats): Player com a font de veritat de vides/score/tresors i sarcs amb recompensa
This commit is contained in:
1 parent
d186f66c2c
commit
f5d251c33b
14 files changed
+226
-34
No files matched your search
@@ -26,6 +26,7 @@
|
||||
#include "core/ui/ui_config.hpp"
|
||||
#include "external/fkyaml_node.hpp"
|
||||
#include "game/entities/concrete/dust.hpp"
|
||||
#include "game/entities/concrete/sarcophagus.hpp"
|
||||
#include "game/entities/concrete/whip_attack.hpp"
|
||||
#include "game/entities/entity.hpp"
|
||||
#include "game/entities/entity_factory.hpp"
|
||||
@@ -321,6 +322,12 @@ GameScene::GameScene(Config config)
|
||||
entity_manager_.getBus().subscribe("player_disabled", [this](const Event& ev) {
|
||||
onPlayerDisabled(ev.player_id);
|
||||
});
|
||||
// `sarcophagus_opened`: extret a `onSarcophagusOpened` per acotar
|
||||
// la complexitat cognitiva del ctor (mateix patró que `player_killed`
|
||||
// i `player_disabled`).
|
||||
entity_manager_.getBus().subscribe("sarcophagus_opened", [this](const Event& ev) {
|
||||
onSarcophagusOpened(ev);
|
||||
});
|
||||
|
||||
// Polvet: precarreguem el surface del Dust una sola vegada perquè
|
||||
// els spawns runtime de l'entitat no facin disc al primer salt.
|
||||
@@ -732,6 +739,21 @@ void GameScene::onPlayerDisabled(int player_id) {
|
||||
players_active_[player_id] = false;
|
||||
}
|
||||
|
||||
void GameScene::onSarcophagusOpened(const Event& ev) {
|
||||
// `player_id < 0`: pintada sense atribució (broadcast inicial). No
|
||||
// hauria de tancar mai un sarc, però per defensa ignorem.
|
||||
if (ev.player_id < 0) { return; }
|
||||
const auto IDX = static_cast<std::size_t>(ev.player_id);
|
||||
if (IDX >= players_.size()) { return; }
|
||||
const auto* ent = std::get_if<Entity*>(&ev.payload);
|
||||
if (ent == nullptr || *ent == nullptr) { return; }
|
||||
auto* sarc = dynamic_cast<Sarcophagus*>(*ent);
|
||||
if (sarc == nullptr) { return; }
|
||||
auto& p = *players_[IDX];
|
||||
p.addScore(sarc->getPointsReward());
|
||||
p.addTreasures(sarc->getTreasuresReward());
|
||||
}
|
||||
|
||||
void GameScene::preloadGameOverAssets() const {
|
||||
// Pre-load del so del countdown: el dispara `updateGameOverFlow`
|
||||
// cada vegada que canvia el número visible de CONTINUE? (incloent
|
||||
|
||||
Reference in new issue
Block a user