77 lines
2.4 KiB
C++
77 lines
2.4 KiB
C++
// escena_joc.hpp - Lògica principal del joc
|
|
// © 1999 Visente i Sergi (versió Pascal)
|
|
// © 2025 Port a C++20 amb SDL3
|
|
|
|
#ifndef ESCENA_JOC_HPP
|
|
#define ESCENA_JOC_HPP
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include <array>
|
|
#include <cstdint>
|
|
|
|
#include "../constants.hpp"
|
|
#include "../effects/debris_manager.hpp"
|
|
#include "../entities/bala.hpp"
|
|
#include "../entities/enemic.hpp"
|
|
#include "../entities/nau.hpp"
|
|
#include "../stage_system/stage_manager.hpp"
|
|
#include "core/graphics/vector_text.hpp"
|
|
#include "core/rendering/sdl_manager.hpp"
|
|
#include "core/system/context_escenes.hpp"
|
|
#include "core/types.hpp"
|
|
|
|
#include <memory>
|
|
|
|
// Classe principal del joc (escena)
|
|
class EscenaJoc {
|
|
public:
|
|
explicit EscenaJoc(SDLManager& sdl, GestorEscenes::ContextEscenes& context);
|
|
~EscenaJoc() = default;
|
|
|
|
void executar(); // Bucle principal de l'escena
|
|
void inicialitzar();
|
|
void actualitzar(float delta_time);
|
|
void dibuixar();
|
|
void processar_input(const SDL_Event& event);
|
|
|
|
private:
|
|
SDLManager& sdl_;
|
|
GestorEscenes::ContextEscenes& context_;
|
|
|
|
// Efectes visuals
|
|
Effects::DebrisManager debris_manager_;
|
|
|
|
// Estat del joc
|
|
Nau nau_;
|
|
std::array<Enemic, Constants::MAX_ORNIS> orni_;
|
|
std::array<Bala, Constants::MAX_BALES> bales_;
|
|
Poligon chatarra_cosmica_;
|
|
float itocado_; // Death timer (seconds)
|
|
|
|
// Lives and game over system
|
|
int num_vides_; // Current lives count
|
|
bool game_over_; // Game over state flag
|
|
float game_over_timer_; // Countdown timer for auto-return (seconds)
|
|
Punt punt_spawn_; // Configurable spawn point
|
|
|
|
// Text vectorial
|
|
Graphics::VectorText text_;
|
|
|
|
// [NEW] Stage system
|
|
std::unique_ptr<StageSystem::ConfigSistemaStages> stage_config_;
|
|
std::unique_ptr<StageSystem::StageManager> stage_manager_;
|
|
|
|
// Funcions privades
|
|
void tocado();
|
|
void detectar_col·lisions_bales_enemics(); // Col·lisions bala-enemic
|
|
void detectar_col·lisio_nau_enemics(); // Ship-enemy collision detection
|
|
void dibuixar_marges() const; // Dibuixar vores de la zona de joc
|
|
void dibuixar_marcador(); // Dibuixar marcador de puntuació
|
|
|
|
// [NEW] Stage system helpers
|
|
void dibuixar_missatge_stage(const std::string& missatge);
|
|
};
|
|
|
|
#endif // ESCENA_JOC_HPP
|