64 lines
2.7 KiB
C++
64 lines
2.7 KiB
C++
// escena_titol.hpp - Pantalla de títol del joc
|
|
// Mostra missatge "PRESS BUTTON TO PLAY" i copyright
|
|
// © 2025 Port a C++20
|
|
|
|
#pragma once
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
#include "core/defaults.hpp"
|
|
#include "core/graphics/shape.hpp"
|
|
#include "core/graphics/starfield.hpp"
|
|
#include "core/graphics/vector_text.hpp"
|
|
#include "core/rendering/sdl_manager.hpp"
|
|
#include "core/types.hpp"
|
|
|
|
class EscenaTitol {
|
|
public:
|
|
explicit EscenaTitol(SDLManager& sdl);
|
|
void executar(); // Bucle principal de l'escena
|
|
|
|
private:
|
|
// Màquina d'estats per la pantalla de títol
|
|
enum class EstatTitol {
|
|
INIT, // Pantalla negra inicial (2 segons)
|
|
MAIN // Pantalla de títol amb text
|
|
};
|
|
|
|
// Estructura per emmagatzemar informació de cada lletra del títol
|
|
struct LetraLogo {
|
|
std::shared_ptr<Graphics::Shape> forma; // Forma vectorial de la lletra
|
|
Punt posicio; // Posició en pantalla
|
|
float ancho; // Amplada escalada
|
|
float altura; // Altura escalada
|
|
float offset_centre; // Offset del centre per posicionament
|
|
};
|
|
|
|
SDLManager& sdl_;
|
|
Graphics::VectorText text_; // Sistema de text vectorial
|
|
std::unique_ptr<Graphics::Starfield> starfield_; // Camp d'estrelles de fons
|
|
EstatTitol estat_actual_; // Estat actual de la màquina
|
|
float temps_acumulat_; // Temps acumulat per l'estat INIT
|
|
|
|
// Lletres del títol "ORNI ATTACK!"
|
|
std::vector<LetraLogo> lletres_orni_; // Lletres de "ORNI" (línia 1)
|
|
std::vector<LetraLogo> lletres_attack_; // Lletres de "ATTACK!" (línia 2)
|
|
float y_attack_dinamica_; // Posició Y calculada dinàmicament per "ATTACK!"
|
|
|
|
// Constants
|
|
static constexpr float DURACIO_INIT = 2.0f; // Duració de l'estat INIT (2 segons)
|
|
static constexpr float ESCALA_TITULO = 0.6f; // Escala per les lletres del títol (50%)
|
|
static constexpr float ESPAI_ENTRE_LLETRES = 10.0f; // Espai entre lletres
|
|
static constexpr float Y_ORNI = 150.0f; // Posició Y de "ORNI"
|
|
static constexpr float SEPARACION_LINEAS = 10.0f; // Separació entre "ORNI" i "ATTACK!" (0.0f = pegades)
|
|
|
|
// Mètodes privats
|
|
void actualitzar(float delta_time);
|
|
void dibuixar();
|
|
void processar_events(const SDL_Event& event);
|
|
void inicialitzar_titol(); // Carrega i posiciona les lletres del títol
|
|
};
|