afegit debris_manager

This commit is contained in:
2025-12-02 08:30:32 +01:00
parent 67681e0f37
commit 73f222fcb7
8 changed files with 410 additions and 12 deletions

View File

@@ -10,10 +10,11 @@
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <vector>
EscenaJoc::EscenaJoc(SDLManager &sdl)
: sdl_(sdl), nau_(sdl.obte_renderer()), itocado_(0),
text_(sdl.obte_renderer()) {
: sdl_(sdl), debris_manager_(sdl.obte_renderer()),
nau_(sdl.obte_renderer()), itocado_(0), text_(sdl.obte_renderer()) {
// Inicialitzar bales amb renderer
for (auto &bala : bales_) {
bala = Bala(sdl.obte_renderer());
@@ -116,6 +117,9 @@ void EscenaJoc::actualitzar(float delta_time) {
for (auto &bala : bales_) {
bala.actualitzar(delta_time);
}
// Actualitzar fragments d'explosions
debris_manager_.actualitzar(delta_time);
}
void EscenaJoc::dibuixar() {
@@ -135,6 +139,9 @@ void EscenaJoc::dibuixar() {
bala.dibuixar();
}
// Dibuixar fragments d'explosions (després d'altres objectes)
debris_manager_.dibuixar();
// Dibuixar marcador
dibuixar_marcador();
}
@@ -146,19 +153,36 @@ void EscenaJoc::processar_input(const SDL_Event &event) {
if (event.type == SDL_EVENT_KEY_DOWN) {
switch (event.key.key) {
case SDLK_SPACE:
// Disparar (Fase 9)
// Basat en el codi Pascal original: crear bala en posició de la nau
// El joc original només permetia 1 bala activa alhora
case SDLK_SPACE: {
// TEMPORAL: Explotar enemic aleatori (per testing)
// TODO: Restaurar dispars quan el sistema d'explosions estiga validat
// Buscar primera bala inactiva
for (auto &bala : bales_) {
if (!bala.esta_activa()) {
bala.disparar(nau_.get_centre(), nau_.get_angle());
break;
// Buscar tots els enemics actius
std::vector<int> enemics_actius;
for (int i = 0; i < Constants::MAX_ORNIS; i++) {
if (orni_[i].esta_actiu()) {
enemics_actius.push_back(i);
}
}
if (!enemics_actius.empty()) {
// Seleccionar enemic aleatori
int idx = enemics_actius[std::rand() % enemics_actius.size()];
// Crear explosió
debris_manager_.explotar(orni_[idx].get_forma(),
orni_[idx].get_centre(),
0.0f, // angle (enemics no roten físicament)
1.0f, // escala
Defaults::Physics::Debris::VELOCITAT_BASE);
// Desactivar enemic
orni_[idx].destruir();
std::cout << "[TEST] Enemic " << idx << " explotat!\n";
}
break;
}
default:
break;

View File

@@ -7,6 +7,7 @@
#include "../../core/graphics/vector_text.hpp"
#include "../../core/rendering/sdl_manager.hpp"
#include "../effects/debris_manager.hpp"
#include "../../core/types.hpp"
#include "../constants.hpp"
#include "../entities/bala.hpp"
@@ -31,6 +32,9 @@ public:
private:
SDLManager &sdl_;
// Efectes visuals
Effects::DebrisManager debris_manager_;
// Estat del joc
Nau nau_;
std::array<Enemic, Constants::MAX_ORNIS> orni_;