afegeix CHANGELOG.md per a release v2.4.0

This commit is contained in:
2026-05-19 21:04:10 +02:00
parent bdbb6bc764
commit a43c3fc5d1
+66
View File
@@ -0,0 +1,66 @@
# Changelog
## v2.4.0
### Novetats principals
- **Migració a temps real (time-based)**. Tot el joc ja no depèn d'una cadència fixa de 60 frames per segon: els moviments, les animacions, les fades, els temporitzadors i els comptadors es calculen a partir del temps real transcorregut entre frames (`dt_s`). Això corregeix l'acceleració del jugador i les animacions en monitors de 144 Hz, i prepara el joc per a qualsevol freqüència de refresc. El refactor s'ha fet entitat per entitat (Bullet, Item, Player, Balloon) i, finalment, al motor principal `Game`.
- **Demo multi-set**. El sistema de demo s'ha portat al patró time-based de Coffee Crisis Arcade Edition: 3 fitxers de demo distints (`demo1.bin`, `demo2.bin`, `demo3.bin`) es trien aleatòriament en cada execució, l'índex es calcula a partir del temps acumulat i el playback és immune a salts de frames. En saltar-la amb una tecla es torna correctament al títol amb el menú visible.
- **Modes de presentació del canvas**. Nou cicle de presentació de la imatge a la finestra: `integer_scale` (escalat enter), `letterbox` (manté l'aspect ratio amb barres negres), `stretched` (omple la finestra deformant) i `overscan` (omple la finestra retallant). El valor antic `integer_scale` del config es migra automàticament.
### Hotkeys (notificacions visibles a la part superior del canvas)
| Tecla | Acció |
|------:|-------|
| F1 / F2 | Reduir / augmentar el zoom de la finestra |
| F3 | Alternar pantalla completa |
| F4 | Activar/desactivar post-procesat (shaders) |
| F5 | Alternar entre shader PostFX i CrtPi |
| F6 | Següent preset del shader actiu |
| F7 | Activar/desactivar V-Sync |
| F8 | Cicla el mode de presentació (integer_scale → letterbox → stretched → overscan) |
| F10 | Mostrar/amagar comptador de FPS (cantonada superior dreta) |
| F11 | Mostrar nom de l'app + versió + hash de git |
| F12 | Pausa |
| ESC | Eixir (doble pulsació per confirmar) |
| BACKSPACE | Cancel·lar a menús |
Les notificacions tenen ara una paleta semàntica (informació, toggle, confirmació, èxit, perill) i un color més saturat (a mig camí entre pastel i color pur).
### Millores
- **Cap tecla de funció ni ESC fa "saltar" cap secció**. Logo, intro, instruccions, títol i demo només es passen amb tecles humanes (Enter, disparar, moviment, botons de gamepad) — les F1F12 i ESC es reserven íntegrament per als hotkeys globals.
- **Notificacions en mode overscan**. Quan el mode `overscan` retalla la franja superior del canvas segons l'aspect ratio de la finestra, les notificacions i el comptador de FPS es desplacen automàticament a la primera fila visible.
- **Versió única de l'aplicació**. La cadena de versió ja només viu a `source/utils/defines.hpp`; CMake l'extreu via regex per al projecte i el Makefile l'usa per als noms dels release. F11 mostra `Coffee Crisis v2.4.0 (<git_hash>)`.
- **Comptador de FPS** dibuixat a la part superior dreta en verd, recalcat cada segon de temps real.
- **Confirmació d'eixida (ESC × 2)** amb finestra visual de confirmació en roig.
- **Pausa amb compte enrere configurable** (`gameplay.pause_countdown` a `config.yaml`).
- **Zoom màxim de la finestra detectat automàticament** segons la resolució del display.
- **Paquet de recursos més robust**: `resources.pack` localitzat via `SDL_GetBasePath` amb fallback al filesystem.
- **Build estandarditzada**: llista explícita de fonts en lloc de `GLOB_RECURSE`, `-Wextra -Wpedantic` activats i warnings netejats.
- **`pre-commit` hooks** per `clang-format`, `clang-tidy` i `cppcheck`.
### Correccions de bugs
- Demo congelada en obrir-se per culpa d'un doble `DeltaTime::tick()` al títol (Game rebia `dt ≈ 0`).
- Salt visual al fons diagonal del títol per posició inicial no ancorada al cicle de tile.
- Rotació de la `PowerBall` perduda en passar per `Game::startAllBalloons` després del rellotge.
- Pausa que es disparava amb el flanc residual de CANCEL/EXIT en entrar al menú.
- Animació del jugador accelerada en monitors de 144 Hz (no propagava `dt_s` als sprites).
- Sub-bucles aniats de pausa, game over, instruccions i demo aplanats a un únic loop SDL3.
- WASM/Emscripten: reset en fer "exit", eliminades les opcions d'eixida, fix de fullscreen, mode `integer_scale=false` per defecte.
- Windows: parsers de text amb finals de línia CRLF, headers SPV del PostFX regenerats.
- `pack_resources` anava a la rel en comptes de `build/`.
### Canvis interns destacats
- **Pipeline SDL3 GPU + fallback `SDL_Renderer`**: shaders PostFX i CrtPi (Vulkan/Metal/D3D12), presets persistents en YAML, scanlines analítiques sense supersampling.
- **Sistema d'opcions modern**: tot a `config.yaml` amb fkyaml; `postfx.yaml` i `crtpi.yaml` per als presets.
- **Sistema d'àudio nou** (`Ja::` namespace, streaming d'OGG, tipus sense prefix `JA_`).
- **API SDL3 Callbacks** (`SDL_AppInit`/`Iterate`/`Event`/`Quit`).
- Migració a `enum class` per a Input::Action, Input::Device, Input::Repeat, Input::Disable, Fade::Type i Bullet::Kind.
- Convencions `CamelCase` aplicades a tipus que encara duien `_t`/`_e` o eren niats sense format.
- Singletons (Lang, Audio, Input, Resource) i sistema de loaders de recursos.
- Migració d'estructura a `source/core/{audio,input,locale,rendering,resources,system}/` i `source/game/{entities,scenes,ui}/`.
- Generació automàtica de `version.h` amb el hash curt de git.
- `clang-format` i `clang-tidy` unificats amb la resta de projectes germans.