HC-03: geometria del mapa traslladada de map.hpp al YAML de la piràmide

El bloc `geometry:` de pyramid.yaml porta les 9 constants base (grid, sarc,
pitch, HUD, murs); els derivats (corridor, board, origin, playfield) es
recalculen al `Map::loadFrom()`. `constexpr` passa a `const` on calia i
els membres estàtics adopten snake_case. Desbloqueja la iteració
"pirámide a pirámide" sense recompilar.
This commit is contained in:
JailDesigner committed 2026-04-20 17:32:56 +02:00
1 parent b895475716
commit e6c7f0dcfb
6 files changed
+153 -83

No files matched your search

+17 -4
View File
@@ -20,8 +20,21 @@
#include "utils/defaults.hpp"
#include "utils/defines.hpp"
namespace {
// La geometria ha de quedar inicialitzada abans que Tilemap parsejar el
// mateix YAML i abans que el ctor de Player consulte Map::PLAYFIELD_*.
// Cridar-la des d'una expressió que retorne la ruta permet encadenar-ho
// a l'init list sense fer Tilemap default-constructible.
auto loadMapGeometry(const char* yaml_path) -> const char* {
Map::loadFrom(yaml_path);
return yaml_path;
}
} // namespace
GameScene::GameScene()
: tilemap_("data/maps/pyramid.yaml") {
: tilemap_(loadMapGeometry("data/maps/pyramid.yaml")) {
Resource::Cache::get().loadSurface("player.gif", "data/player/player.gif");
Resource::Cache::get().loadAnimation("player.yaml", "data/player/player.yaml");
@@ -39,10 +52,10 @@ GameScene::GameScene()
// centrada en Y al passadís exterior superior. Així no naix dins de
// cap sarcòfag.
constexpr auto CORRIDOR_CENTER_X = static_cast<float>(GameCanvas::CENTER_X);
constexpr auto CORRIDOR_CENTER_Y =
static_cast<float>(Map::PLAYFIELD_Y) + (static_cast<float>(Map::OUTER_CORRIDOR) / 2.0F);
const auto CORRIDOR_CENTER_Y =
static_cast<float>(Map::playfield_y) + (static_cast<float>(Map::outer_corridor) / 2.0F);
constexpr auto SPAWN_X = CORRIDOR_CENTER_X - (static_cast<float>(Player::SPRITE_WIDTH) / 2.0F);
constexpr auto SPAWN_Y = CORRIDOR_CENTER_Y - static_cast<float>(Player::COLLISION_Y_OFFSET) - (static_cast<float>(Player::COLLISION_SIZE) / 2.0F);
const auto SPAWN_Y = CORRIDOR_CENTER_Y - static_cast<float>(Player::COLLISION_Y_OFFSET) - (static_cast<float>(Player::COLLISION_SIZE) / 2.0F);
players_.emplace_back(std::make_unique<Player>(SPAWN_X, SPAWN_Y, CONTROLS_P1));
// Música de fons de la piràmide 1 en bucle infinit. El track ja està al