DUP-05: clampToPlayfield() extret de Player::update
Els 4 `const auto` MIN_/MAX_ i els dos `std::clamp` es mouen a un mètode privat `clampToPlayfield`. Separa la responsabilitat de mantenir la caixa dins del playfield de la integració de moviment.
This commit is contained in:
1 parent
cb2364490f
commit
df059a6fcb
3 files changed
+9
-1
No files matched your search
+1
-1
@@ -34,7 +34,7 @@ Els IDs es mantenen estables una vegada assignats. Cada entrada apunta al fitxer
|
||||
| DUP-02 | `player.cpp:100-140` | `snapToHorizontalLane` i `snapToVerticalLane` són el mateix algorisme amb eixos permutats | Importante | DONE | `snapToLane(dt, base, pitch, max_idx, get_pos, set_pos)` pren member-fn pointers; els dos wrappers deleguen només amb `Map::pitch_*`/`grid_*` distints |
|
||||
| DUP-03 | `options.cpp:14-62` | Tres parelles `enumToString`/`enumFromString` amb la mateixa forma | Menor | DONE | Tres `constexpr std::array<std::pair<Enum, string_view>, N>` + helpers `enumToString`/`enumFromString` plantilla. La primera entrada és el fallback (documentat). També elimina HC-07 |
|
||||
| DUP-04 | `options.cpp:79-149` | Cada `parse*` repeteix `if (node.contains) { ... get_value<T> }` | Menor | DONE | Afegit `readField<T>(node, key, dst)` plantilla a l'anonymous namespace. Aplicat a les 7 funcions `parse*` + `parsePostFXPreset`/`parseCrtPiPreset` |
|
||||
| DUP-05 | `player.cpp:81-88` | Càlcul `MIN_/MAX_` + `clamp` per eix és la mateixa fórmula que el snap | Menor | PENDING | Fold en helper |
|
||||
| DUP-05 | `player.cpp:81-88` | Càlcul `MIN_/MAX_` + `clamp` per eix és la mateixa fórmula que el snap | Menor | DONE | Extret `Player::clampToPlayfield()`; `update()` el crida després de la col·lisió per eix |
|
||||
|
||||
## 2. Hardcoding
|
||||
|
||||
|
||||
@@ -105,6 +105,10 @@ void Player::update(float delta_time) {
|
||||
setPosY(NEW_Y);
|
||||
if (Map::collides(baseBox())) { setPosY(OLD_Y); }
|
||||
|
||||
clampToPlayfield();
|
||||
}
|
||||
|
||||
void Player::clampToPlayfield() {
|
||||
// Límits de la zona jugable: la caixa de col·lisió no pot eixir del
|
||||
// playfield (muros). El cap del sprite sí pot sobresortir per damunt.
|
||||
const auto MIN_X = static_cast<float>(Map::playfield_x - collision_x_offset);
|
||||
|
||||
@@ -52,6 +52,10 @@ class Player : public AnimatedSprite {
|
||||
// a referència per al Z-order.
|
||||
[[nodiscard]] auto baseBox() const -> SDL_FRect;
|
||||
|
||||
// Clamp de la caixa de col·lisió al playfield (no al sprite sencer:
|
||||
// el cap pot sobresortir pel mur superior sense afectar el joc).
|
||||
void clampToPlayfield();
|
||||
|
||||
// Snap cap al passadís perpendicular a la direcció premuda. Si la caixa
|
||||
// de col·lisió està a ≤ collision_size/2 d'una lane, s'hi aproxima
|
||||
// gradualment (a velocitat de moviment). Permet canviar de direcció
|
||||
|
||||
Reference in new issue
Block a user