HC-08: alpha-mask amb nom a Tilemap::render

`0xFF000000U` passa a `constexpr std::uint32_t ALPHA_MASK` local amb
comentari. No s'ha mogut a defines.hpp perquè només s'usa dins de
Tilemap::render; si apareix a altres llocs es podrà centralitzar.
This commit is contained in:
JailDesigner committed 2026-04-20 18:08:22 +02:00
1 parent beb6a4aad1
commit 6673168ea0
2 files changed
+5 -2

No files matched your search

+1 -1
View File
@@ -47,7 +47,7 @@ Els IDs es mantenen estables una vegada assignats. Cada entrada apunta al fitxer
| HC-05 | `ui_palette.hpp:12-21` | Índexs de paleta (`RENDER_INFO_TEXT=47`, `SHADOW=34`, `CANVAS_BG=65`) en `constexpr` | Menor | DONE | Valors moguts a `Defaults::UI`; `UiColor::*` queda com a alias exportat al joc | | HC-05 | `ui_palette.hpp:12-21` | Índexs de paleta (`RENDER_INFO_TEXT=47`, `SHADOW=34`, `CANVAS_BG=65`) en `constexpr` | Menor | DONE | Valors moguts a `Defaults::UI`; `UiColor::*` queda com a alias exportat al joc |
| HC-06 | `game_scene.cpp:24-26,52` | Rutes `data/maps/pyramid.yaml`, `data/player/player.*`, `pyramid_1.ogg` cablejades | Importante | DONE | Afegit `Defaults::Pyramid::{MAP_YAML,PLAYER_SPRITE,PLAYER_YAML,MUSIC_TRACK}`; `GameScene::Config` struct + `defaultConfig()` passa les rutes al ctor (default ve de Defaults). `Player` ctor accepta `anim_key` en lloc de cablejar `"player.yaml"`. Cache key = basename (mateix conveni que abans) | | HC-06 | `game_scene.cpp:24-26,52` | Rutes `data/maps/pyramid.yaml`, `data/player/player.*`, `pyramid_1.ogg` cablejades | Importante | DONE | Afegit `Defaults::Pyramid::{MAP_YAML,PLAYER_SPRITE,PLAYER_YAML,MUSIC_TRACK}`; `GameScene::Config` struct + `defaultConfig()` passa les rutes al ctor (default ve de Defaults). `Player` ctor accepta `anim_key` en lloc de cablejar `"player.yaml"`. Cache key = basename (mateix conveni que abans) |
| HC-07 | `options.cpp:27,55` | Fallbacks `"letterbox"`/`"off"` com a strings màgics que dupliquen els enums | Menor | DONE | Resolt amb DUP-03: la primera entrada de cada taula és el fallback i només apareix una vegada | | HC-07 | `options.cpp:27,55` | Fallbacks `"letterbox"`/`"off"` com a strings màgics que dupliquen els enums | Menor | DONE | Resolt amb DUP-03: la primera entrada de cada taula és el fallback i només apareix una vegada |
| HC-08 | `tilemap.cpp:135` | `0xFF000000U` com a màscara alfa | Menor | PENDING | Constant amb nom a `defines.hpp` | | HC-08 | `tilemap.cpp:135` | `0xFF000000U` com a màscara alfa | Menor | DONE | `constexpr std::uint32_t ALPHA_MASK = 0xFF000000U` local amb comentari. No s'ha mogut a defines.hpp perquè només s'usa dins de `Tilemap::render` |
## 3. Parxes i improvisacions ## 3. Parxes i improvisacions
+4 -1
View File
@@ -126,13 +126,16 @@ void Tilemap::render() const {
const int X_START = std::max(0, -origin_x_); const int X_START = std::max(0, -origin_x_);
const int X_END = std::min(width_px_, CANVAS_W - origin_x_); const int X_END = std::min(width_px_, CANVAS_W - origin_x_);
// Màscara del canal alfa (els píxels transparents del tilemap queden
// amb alpha=0 i cal mantenir el canvas sota visible).
constexpr std::uint32_t ALPHA_MASK = 0xFF000000U;
for (int y = Y_START; y < Y_END; ++y) { for (int y = Y_START; y < Y_END; ++y) {
const auto* src_row = &pixels_[static_cast<std::size_t>(y) * static_cast<std::size_t>(width_px_)]; const auto* src_row = &pixels_[static_cast<std::size_t>(y) * static_cast<std::size_t>(width_px_)];
auto* dst_row = auto* dst_row =
&canvas[(static_cast<std::size_t>(origin_y_ + y) * static_cast<std::size_t>(CANVAS_W)) + static_cast<std::size_t>(origin_x_)]; &canvas[(static_cast<std::size_t>(origin_y_ + y) * static_cast<std::size_t>(CANVAS_W)) + static_cast<std::size_t>(origin_x_)];
for (int x = X_START; x < X_END; ++x) { for (int x = X_START; x < X_END; ++x) {
const auto PIXEL = src_row[x]; const auto PIXEL = src_row[x];
if ((PIXEL & 0xFF000000U) != 0U) { dst_row[x] = PIXEL; } if ((PIXEL & ALPHA_MASK) != 0U) { dst_row[x] = PIXEL; }
} }
} }
} }