PATCH-05+PATCH-06+DEAD-05: neteja defenses i sort cerimonial a GameScene
- PATCH-05: `if (Audio::get() != nullptr)` eliminat; Director::init crida Audio::init abans de GameScene, comentari ho documenta. Si mai salta, és un bug real que val detectar. - PATCH-06/DEAD-05: short-circuit per `players_.size() <= 1` — no vector temporal ni sort amb un sol jugador. La branca multi-jugador queda preparada per quan n'hi haja >1 o sarcs-sprites.
This commit is contained in:
1 parent
6673168ea0
commit
f64bb5e267
2 files changed
+21
-21
No files matched your search
@@ -81,10 +81,9 @@ GameScene::GameScene(Config config)
|
||||
|
||||
// Música de fons en bucle infinit. El track ja està al Resource::Cache
|
||||
// (preload al Director), així que playMusic només mou el punter cap a
|
||||
// jail_audio i obri l'stream.
|
||||
if (Audio::get() != nullptr) {
|
||||
Audio::get()->playMusic(config_.music_track, -1);
|
||||
}
|
||||
// jail_audio i obri l'stream. Audio::get() està garantit no-null:
|
||||
// Director::init crida Audio::init abans d'instanciar GameScene.
|
||||
Audio::get()->playMusic(config_.music_track, -1);
|
||||
}
|
||||
|
||||
GameScene::~GameScene() = default;
|
||||
@@ -109,20 +108,21 @@ void GameScene::render() {
|
||||
// col·lisions del jugador.
|
||||
tilemap_.render();
|
||||
|
||||
// Ordenem punters a jugadors per Y dels peus (ascendent = més al fons
|
||||
// primer). Usem un vector auxiliar per no tocar l'ordre d'entrada de
|
||||
// players_, que és el d'assignació de controls.
|
||||
std::vector<Player*> sorted;
|
||||
sorted.reserve(players_.size());
|
||||
std::ranges::transform(players_, std::back_inserter(sorted), [](const auto& p) { return p.get(); });
|
||||
std::ranges::sort(sorted, [](const Player* a, const Player* b) {
|
||||
return a->getFeetY() < b->getFeetY();
|
||||
});
|
||||
|
||||
// De moment els sarcòfags no es pinten (seran actors independents);
|
||||
// dibuixem tots els jugadors sobre el tilemap ja ordenats per Y. Quan
|
||||
// els sarcs siguen sprites, tornarem a interleave per al Z-order.
|
||||
for (auto* player : sorted) { player->render(); }
|
||||
// Amb un sol jugador, l'ordre és irrellevant i ens estalviem el vector
|
||||
// temporal. Quan n'hi haja més d'un (o quan els sarcs siguen sprites)
|
||||
// caldrà ordenar per `getFeetY()` ascendent i interleaveing amb les
|
||||
// files de sarcs — l'ordre ascendent manté els més al fons darrere.
|
||||
if (players_.size() <= 1) {
|
||||
for (auto& player : players_) { player->render(); }
|
||||
} else {
|
||||
std::vector<Player*> sorted;
|
||||
sorted.reserve(players_.size());
|
||||
std::ranges::transform(players_, std::back_inserter(sorted), [](const auto& p) { return p.get(); });
|
||||
std::ranges::sort(sorted, [](const Player* a, const Player* b) {
|
||||
return a->getFeetY() < b->getFeetY();
|
||||
});
|
||||
for (auto* player : sorted) { player->render(); }
|
||||
}
|
||||
|
||||
Notifier::get().render();
|
||||
RenderInfo::get().render();
|
||||
|
||||
Reference in new issue
Block a user