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) {
|
if (event.type == SDL_EVENT_KEY_DOWN) {
|
||||||
switch (event.key.key) {
|
switch (event.key.key) {
|
||||||
case SDLK_SPACE: {
|
case SDLK_SPACE: {
|
||||||
// TEMPORAL: Explotar enemic aleatori (per testing)
|
// No disparar si la nau està morta
|
||||||
// TODO: Restaurar dispars quan el sistema d'explosions estiga validat
|
if (!nau_.esta_viva()) {
|
||||||
|
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()) {
|
// Disparar bala des del front de la nau
|
||||||
// Seleccionar enemic aleatori
|
// El ship.shp té el front a (0, -12) en coordenades locals
|
||||||
int idx = enemics_actius[std::rand() % enemics_actius.size()];
|
|
||||||
|
|
||||||
// Crear explosió
|
// 1. Calcular posició del front de la nau
|
||||||
debris_manager_.explotar(orni_[idx].get_forma(),
|
constexpr float LOCAL_TIP_X = 0.0f;
|
||||||
orni_[idx].get_centre(),
|
constexpr float LOCAL_TIP_Y = -12.0f;
|
||||||
0.0f, // angle (enemics no roten físicament)
|
|
||||||
1.0f, // escala
|
|
||||||
Defaults::Physics::Debris::VELOCITAT_BASE);
|
|
||||||
|
|
||||||
// Desactivar enemic
|
const Punt& ship_centre = nau_.get_centre();
|
||||||
orni_[idx].destruir();
|
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;
|
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