7ee359b910
Sweep final del naming a CamelCase/camelBack/lower_case:
Fitxers renombrats:
- effects/gestor_puntuacio_flotant.{hpp,cpp} -> floating_score_manager.{hpp,cpp}
- effects/puntuacio_flotant.hpp -> floating_score.hpp
Tipus (CamelCase):
- GestorPuntuacioFlotant -> FloatingScoreManager
- PuntuacioFlotant -> FloatingScore
- ConfigStage -> StageConfig
- ConfigSistemaStages -> StageSystemConfig
- NauTitol -> TitleShip
- EstatNau -> ShipState
Metodes publics (camelBack):
- obte_renderer -> getRenderer
- get_num_actius -> getActiveCount
- calcular_direccio_explosio -> computeExplosionDirection
- trobar_slot_lliure -> findFreeSlot
- explotar -> explode
- reiniciar -> reset
- es_valida -> isValid
- parsejar_fitxer -> parseFile
- carregar -> load
- crear_explosio -> createExplosion
- registrar_puntuacio -> registerScore
- construir_marcador -> buildScoreboard
- render_centered -> renderCentered
Camps struct publics (snake_case):
- actiu/actius -> active
- rotacio -> rotation, rotacio_visual -> visual_rotation
- acceleracio -> acceleration
- velocitat -> velocity
- escala/escala_inicial/objectiu/actual -> scale/initial_scale/...
- posicio/posicio_inicial/objectiu/actual -> position/initial_position/...
- fase_oscilacio -> oscillation_phase
- temps_estat -> state_time
- jugador_id -> player_id
- estat -> state
- brillantor -> brightness
- tipus -> type
Camps privats (sufix _):
- naus_ -> ships_, orni_ -> enemies_, bales_ -> bullets_
- gestor_puntuacio_ -> floating_score_manager_
- punt_mort_ -> death_position_, punt_spawn_ -> spawn_position_
- itocado_per_jugador_ -> hit_timer_per_player_
- vides_per_jugador_ -> lives_per_player_
- puntuacio_per_jugador_ -> score_per_player_
- estat_game_over_ -> game_over_state_
- continues_usados_ -> continues_used_
Constants:
- MARGE_ESQ/DRET/DALT/BAIX -> MARGIN_LEFT/RIGHT/TOP/BOTTOM
Variables locals i parametres comuns (snake_case):
- nau -> ship, enemic -> enemy, bala -> bullet
- forma -> shape, punt(s) -> point(s)
- jugador -> player, partida -> match
- temps -> time, missatge -> message
Diff: 59 fitxers, +1000/-1000 (simetric). Compila i enllaça.
Pendents per a futures fases (no bloquejants):
- Comentaris de capçalera en catala -> castella
- Variables locals/parametres minoritaris en catala
- Include guards (queden alguns #ifndef en lloc de #pragma once)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
92 lines
4.0 KiB
C++
92 lines
4.0 KiB
C++
// escena_logo.hpp - Pantalla d'inici del joc
|
|
// Mostra logo JAILGAMES animat amb zoom i salta al joc
|
|
// © 2025 Port a C++20
|
|
|
|
#pragma once
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include <array>
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
#include "core/defaults.hpp"
|
|
#include "core/graphics/shape.hpp"
|
|
#include "core/input/input_types.hpp"
|
|
#include "core/rendering/sdl_manager.hpp"
|
|
#include "core/system/scene_context.hpp"
|
|
#include "core/types.hpp"
|
|
#include "game/effects/debris_manager.hpp"
|
|
|
|
class LogoScene {
|
|
public:
|
|
explicit LogoScene(SDLManager& sdl, SceneManager::SceneContext& context);
|
|
~LogoScene(); // Destructor per aturar sons
|
|
void run(); // Bucle principal de l'escena
|
|
|
|
private:
|
|
// Màquina d'estats per l'animació
|
|
enum class AnimationState {
|
|
PRE_ANIMATION, // Pantalla negra inicial
|
|
ANIMATION, // Animació de zoom de lletres
|
|
POST_ANIMATION, // Logo complet visible
|
|
EXPLOSION, // Explosió seqüencial de lletres
|
|
POST_EXPLOSION // Espera després de l'última explosió
|
|
};
|
|
|
|
SDLManager& sdl_;
|
|
SceneManager::SceneContext& context_;
|
|
AnimationState estat_actual_; // Estat actual de la màquina
|
|
float
|
|
temps_estat_actual_; // Temps en l'state actual (reset en cada transició)
|
|
|
|
// Gestor de fragments d'explosions
|
|
std::unique_ptr<Effects::DebrisManager> debris_manager_;
|
|
|
|
// Seguiment d'explosions seqüencials
|
|
size_t lletra_explosio_index_; // Índex de la següent lletra a explode
|
|
float temps_des_ultima_explosio_; // Temps des de l'última explosió
|
|
std::vector<size_t> ordre_explosio_; // Ordre aleatori d'índexs de lletres
|
|
|
|
// Estructura per a cada lletra del logo
|
|
struct LetraLogo {
|
|
std::shared_ptr<Graphics::Shape> shape;
|
|
Vec2 position; // Posició final en pantalla
|
|
float ancho; // Ancho del bounding box
|
|
float offset_centre; // Distància de min_x a shape_centre.x
|
|
};
|
|
|
|
std::vector<LetraLogo> lletres_; // 9 lletres: J-A-I-L-G-A-M-E-S
|
|
|
|
// Seguiment de sons de lletres (evitar reproduccions repetides)
|
|
std::array<bool, 9> so_reproduit_; // Track si cada lletra ja ha reproduit el so
|
|
|
|
// Constants d'animació
|
|
static constexpr float DURACIO_PRE = 1.5F; // Duració PRE_ANIMATION (pantalla negra)
|
|
static constexpr float DURACIO_ZOOM = 4.0F; // Duració del zoom (segons)
|
|
static constexpr float DURACIO_POST_ANIMATION = 3.0F; // Duració POST_ANIMATION (logo complet)
|
|
static constexpr float DURACIO_POST_EXPLOSION = 3.0F; // Duració POST_EXPLOSION (espera final)
|
|
static constexpr float DELAY_ENTRE_EXPLOSIONS = 0.1F; // Temps entre explosions de lletres
|
|
static constexpr float VELOCITAT_EXPLOSIO = 240.0F; // Velocitat base fragments (px/s)
|
|
static constexpr float ESCALA_INICIAL = 0.1F; // Escala inicial (10%)
|
|
static constexpr float ESCALA_FINAL = 0.8F; // Escala final (80%)
|
|
static constexpr float ESPAI_ENTRE_LLETRES = 10.0F; // Espaiat entre lletres
|
|
|
|
// Constants d'animació seqüencial
|
|
static constexpr float THRESHOLD_LETRA = 0.6F; // Umbral per activar següent lletra (0.0-1.0)
|
|
static constexpr float ORIGEN_ZOOM_X = Defaults::Game::WIDTH * 0.5F; // Vec2 inicial X del zoom
|
|
static constexpr float ORIGEN_ZOOM_Y = Defaults::Game::HEIGHT * 0.4F; // Vec2 inicial Y del zoom
|
|
|
|
// Mètodes privats
|
|
void inicialitzar_lletres();
|
|
void update(float delta_time);
|
|
void actualitzar_explosions(float delta_time);
|
|
void draw();
|
|
void processar_events(const SDL_Event& event);
|
|
auto checkSkipButtonPressed() -> bool;
|
|
|
|
// Mètodes de gestió d'estats
|
|
void canviar_estat(AnimationState nou_estat);
|
|
[[nodiscard]] bool totes_lletres_completes() const;
|
|
};
|