refactor(pause): elimina pausa F11 (cobreix-la el menú de servei)
This commit is contained in:
1 parent
a8bff31a7c
commit
63a03ae632
11 files changed
+34
-257
No files matched your search
@@ -55,24 +55,11 @@ class GameScene : public Scene {
|
||||
void setState(RoomFsm::State new_state);
|
||||
|
||||
// Avança la transició activa via `RoomFsm::advance`. S'executa cada
|
||||
// frame amb delta real (no escalat per la pausa) perquè la transició
|
||||
// viu en temps de UI. Si l'estat retornat és diferent de l'actual,
|
||||
// crida `setState` (que reseteja la `Transition`).
|
||||
// frame amb delta real perquè la transició viu en temps de UI. Si
|
||||
// l'estat retornat és diferent de l'actual, crida `setState` (que
|
||||
// reseteja la `Transition`).
|
||||
void updateRoomTransition(int delta_ms);
|
||||
|
||||
// Consumeix events d'aquest frame (F11 del KeyConfig "pause") per
|
||||
// disparar les transicions de pausa. El mando ja no participa: el
|
||||
// botó START és ara una acció remapeable per dispositiu i el menú
|
||||
// de servei fa de pausa quan cal. No alterna un flag binari: inicia
|
||||
// (o inverteix mid-flight) un "dial" de temps que frena el món amb
|
||||
// easing.
|
||||
void handlePauseInput();
|
||||
|
||||
// Avança la transició activa, recalcula `pause_.scale` i aplica el
|
||||
// fade de volum de música. S'executa cada frame amb el delta real
|
||||
// (no escalat) perquè la transició viu en temps real.
|
||||
void updatePauseTransition(int delta_ms);
|
||||
|
||||
// Spawna un Dust transitori centrat a (`feet_x_center`, `feet_y`).
|
||||
// Cridat per la subscripció del bus a `player_jumped` /
|
||||
// `player_landed` per pintar el polvet de despegue / aterratge.
|
||||
@@ -239,41 +226,11 @@ class GameScene : public Scene {
|
||||
// la destrucció.
|
||||
std::unique_ptr<Hud> hud_;
|
||||
|
||||
// Pausa de gameplay com a "dial" de temps. En lloc d'un interruptor,
|
||||
// `pause_.scale` va de 1 (món corrent) a 0 (món congelat) amb una
|
||||
// corba d'easing durant ENTERING, i al revés durant EXITING. El
|
||||
// `delta_ms` del món (players + EntityManager) es multiplica per
|
||||
// aquesta escala; HUD, Notifier i GlobalInputs reben sempre el
|
||||
// delta real. Les inversions mid-flight capturen la `scale` actual
|
||||
// com a `from_scale` i escalen la durada a la distància restant per
|
||||
// mantenir la sensació de velocitat. La font és la mateixa que
|
||||
// abans — ja cachejada al Director.
|
||||
std::shared_ptr<Text> pause_font_;
|
||||
|
||||
// Font del rètol de transició de sala (ROOM_INTRO i ROOM_OUTRO).
|
||||
// Distinta de `pause_font_` perquè el rètol de fase té estètica
|
||||
// pròpia (CaesarDressing per defecte, configurable via
|
||||
// `data/config/ui.yaml > fonts.room_text`). La pausa segueix amb la
|
||||
// placeholder.
|
||||
// Té estètica pròpia (CaesarDressing per defecte, configurable via
|
||||
// `data/config/ui.yaml > fonts.room_text`).
|
||||
std::shared_ptr<Text> room_text_font_;
|
||||
|
||||
enum class PauseState : std::uint8_t {
|
||||
IDLE, // Joc corrent; cap transició en marxa. scale == 1.
|
||||
ENTERING, // Frenant cap a la pausa. scale decreix a 0.
|
||||
PAUSED, // Món congelat. scale == 0.
|
||||
EXITING, // Accelerant de tornada. scale creix a 1.
|
||||
};
|
||||
|
||||
struct PauseTransition {
|
||||
PauseState state{PauseState::IDLE};
|
||||
float scale{1.0F}; // 0 = parat, 1 = corrent.
|
||||
float from_scale{1.0F}; // Valor de `scale` al començar la transició.
|
||||
float to_scale{1.0F}; // Valor objectiu (0.0 o 1.0).
|
||||
int elapsed_ms{0}; // Temps transcorregut dins la transició.
|
||||
int duration_ms{0}; // Durada total (escalada a la distància).
|
||||
UiConfig::CurveFn curve{nullptr}; // Corba activa.
|
||||
} pause_;
|
||||
|
||||
// Configuració de la FSM de sala (intro/outro). Carregada al ctor des
|
||||
// de `data/scenes/game/game.yaml`; valors per defecte si manca el YAML.
|
||||
RoomFsm::Config transition_config_{};
|
||||
@@ -445,11 +402,10 @@ class GameScene : public Scene {
|
||||
#endif
|
||||
|
||||
#ifdef _DEBUG
|
||||
// Editor modal del tilemap. Mútuament excloent amb la pausa: si la
|
||||
// pausa no està IDLE la tecla de toggle de l'editor s'ignora, i
|
||||
// viceversa. Quan `editor_.active()` és true, saltem entitats i
|
||||
// jugador (update i render) i deixem el tilemap visible perquè es
|
||||
// pugui editar.
|
||||
// Editor modal del tilemap. Mútuament excloent amb el menú de servei:
|
||||
// si el menú està obert, la tecla de toggle de l'editor s'ignora.
|
||||
// Quan `editor_.active()` és true, saltem entitats i jugador (update
|
||||
// i render) i deixem el tilemap visible perquè es pugui editar.
|
||||
Editor editor_;
|
||||
#endif
|
||||
};
|
||||
Reference in new issue
Block a user