feat(debug): starting_level a debug.yaml
Nova clau opcional al debug.yaml:
starting_level: { pyramid: 2, room: 3 }
DebugConfig::resolveStartingLevel retorna optional<StartingLevel>; el
Director, abans de crear el GameScene, demana al LevelManager
setStartingPoint(pyramid, room) — que cerca l'entrada al levels.yaml
i hi posiciona l'índex. Si la clau no està (cas habitual) o
(pyramid, room) no existeix, la progressió arrenca a la primera sala
amb un avís a stderr. createDefaultIfMissing documenta la nova clau
sense escriure-la (la deixem opcional).
Drive-by: NOLINT puntual al capture de STARTING_PLAYERS al Director.
És pre-existent i s'ha activat ara perquè el commit toca director.cpp;
la captura és imprescindible en Debug (valor runtime), clang la veu
redundant en Release on és constexpr literal.
This commit is contained in:
1 parent
b147590a39
commit
738cde12bb
5 files changed
+81
-1
No files matched your search
@@ -86,4 +86,19 @@ namespace Levels {
|
||||
}
|
||||
}
|
||||
|
||||
auto LevelManager::setStartingPoint(int pyramid, int room) -> bool {
|
||||
for (std::size_t i = 0; i < entries_.size(); ++i) {
|
||||
if (entries_[i].pyramid == pyramid && entries_[i].room == room) {
|
||||
index_ = static_cast<int>(i);
|
||||
std::cout << "LevelManager: starting_point P" << pyramid << "-R" << room
|
||||
<< " trobat a l'índex " << i << " (" << currentPath() << ")\n";
|
||||
return true;
|
||||
}
|
||||
}
|
||||
std::cerr << "LevelManager: starting_point P" << pyramid << "-R" << room
|
||||
<< " no trobat a levels.yaml — es manté l'índex actual ("
|
||||
<< currentLabel() << ")\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace Levels
|
||||
@@ -55,9 +55,16 @@ namespace Levels {
|
||||
void restart();
|
||||
|
||||
// Salta a un índex concret. Clamp als bordes [0, count()-1].
|
||||
// Pensat per als hotkeys debug i per `debug.yaml.starting_level`.
|
||||
// Pensat per als hotkeys debug.
|
||||
void setIndex(int new_index);
|
||||
|
||||
// Posiciona l'índex a la primera entrada que coincideix amb
|
||||
// (pyramid, room). Retorna true si trobada; si no, l'índex no
|
||||
// es modifica i el caller decideix què fer (típicament ignorar i
|
||||
// arrencar des de la primera sala). Pensat per al
|
||||
// `debug.yaml.starting_level` i per a futures lookups per coords.
|
||||
auto setStartingPoint(int pyramid, int room) -> bool;
|
||||
|
||||
private:
|
||||
LevelManager();
|
||||
~LevelManager() = default;
|
||||
|
||||
Reference in new issue
Block a user