restaurada funcionalitat de disparar
This commit is contained in:
@@ -162,32 +162,36 @@ void EscenaJoc::processar_input(const SDL_Event& event) {
|
||||
if (event.type == SDL_EVENT_KEY_DOWN) {
|
||||
switch (event.key.key) {
|
||||
case SDLK_SPACE: {
|
||||
// TEMPORAL: Explotar enemic aleatori (per testing)
|
||||
// TODO: Restaurar dispars quan el sistema d'explosions estiga validat
|
||||
|
||||
// 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);
|
||||
}
|
||||
// No disparar si la nau està morta
|
||||
if (!nau_.esta_viva()) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (!enemics_actius.empty()) {
|
||||
// Seleccionar enemic aleatori
|
||||
int idx = enemics_actius[std::rand() % enemics_actius.size()];
|
||||
// Disparar bala des del front de la nau
|
||||
// El ship.shp té el front a (0, -12) en coordenades locals
|
||||
|
||||
// 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);
|
||||
// 1. Calcular posició del front de la nau
|
||||
constexpr float LOCAL_TIP_X = 0.0f;
|
||||
constexpr float LOCAL_TIP_Y = -12.0f;
|
||||
|
||||
// Desactivar enemic
|
||||
orni_[idx].destruir();
|
||||
const Punt& ship_centre = nau_.get_centre();
|
||||
float ship_angle = nau_.get_angle();
|
||||
|
||||
std::cout << "[TEST] Enemic " << idx << " explotat!\n";
|
||||
// Aplicar transformació: rotació + trasllació
|
||||
float cos_a = std::cos(ship_angle);
|
||||
float sin_a = std::sin(ship_angle);
|
||||
|
||||
float tip_x = LOCAL_TIP_X * cos_a - LOCAL_TIP_Y * sin_a + ship_centre.x;
|
||||
float tip_y = LOCAL_TIP_X * sin_a + LOCAL_TIP_Y * cos_a + ship_centre.y;
|
||||
|
||||
Punt posicio_dispar = {tip_x, tip_y};
|
||||
|
||||
// 2. Buscar primera bala inactiva i disparar
|
||||
for (auto& bala : bales_) {
|
||||
if (!bala.esta_activa()) {
|
||||
bala.disparar(posicio_dispar, ship_angle);
|
||||
break; // Només una bala per polsació
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
14
todo.txt
Normal file
14
todo.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
ORNI TODO:
|
||||
- Crear escena titulo: muestra el logo, el copyright, el texto de insert coin o press start y quizas un starfield de fondo
|
||||
- Revisar contador de frames: hace cosas raras, hacer que se actualice cada segundo
|
||||
- Añadir clase audio -> añadir ruidos a logo, title y game
|
||||
- Añadir resource.pack
|
||||
- Crear estados en GAME: GET_READY -> GAME -> GAME_OVER -> CONTINUE
|
||||
-> STAGE_COMPLETED -> GET_READY (next stage)
|
||||
- Añadir nuevos enemigos: cuadrado, ... otras formas (revisar Geometry Wars). Darles fiferente personalidad
|
||||
- La bala ha de salir de la punta de la nave, con forma cuadrada, va rotando
|
||||
- Pensar si todas las entidades deberian tener dos radios de colision: uno pequeño para colision con bordes o jugador, uno mas grande para colision con balas
|
||||
- Revisar que los debris salgan realmente en direccion contraria al centro de la figura
|
||||
- Crear progresion: fichero con enemigos para ese nivel. cuando se acaba la lista de niveles -> loop con dificultad aumentada. Pensar si jefe final. Juego no tiene fin
|
||||
- Menu de servicio? numero de vidas, numero de continues o free play, controles de audio, controles de video, colores, activar parpadeo o cambiar frecuencia
|
||||
- Cuando se destruye un enemigo, salen dos mas pequeños
|
||||
Reference in New Issue
Block a user