feat: estat DISABLED i spawn aeri al començar la sala — v0.25.0

This commit is contained in:
JailDesigner committed 2026-04-26 14:17:17 +02:00
1 parent 645db217fa
commit 580c13e854
8 files changed
+280 -104

No files matched your search

+27
View File
@@ -1,5 +1,6 @@
#pragma once
#include <array>
#include <cstdint>
#include <memory>
#include <string>
@@ -84,8 +85,34 @@ class GameScene : public Scene {
// Vector des del principi: AEE suportarà multijugador local; cada Player
// té els seus propis Controls i entra al vector amb una crida extra.
// Sempre conté **dos** entrades (P1 a [0], P2 a [1]) tant en mode BOTH
// com en single-player: l'slot inactiu es queda en estat DISABLED de
// manera permanent, deixant el camí preparat per al "join in progress"
// futur (el segon jugador podrà entrar a meitat de partida sense
// recrear estructures). Veure `players_starts_active_`.
std::vector<std::unique_ptr<Player>> players_;
// Quins slots juguen aquesta partida segons `config_.starting_players`.
// Index = id del jugador (0 = P1, 1 = P2). Determina a qui aplica el
// spawn aeri al final de la fase 0 d'INTRO; un slot amb `false` es
// queda DISABLED tot el cicle de sala.
std::array<bool, 2> players_starts_active_{false, false};
// Mil·lisegons des de l'entrada en ROOM_INTRO, per disparar la
// cinemàtica de spawn aeri quan s'arriba a
// `transition_config_.player_spawn_delay_ms`. Es reseteja a
// `setState(ROOM_INTRO)`. `players_spawned_in_intro_` garanteix
// que el trigger només es dispara una vegada per cicle.
int room_intro_elapsed_ms_{0};
bool players_spawned_in_intro_{false};
// Cinemàtica de spawn: posa els slots actius en AIRBORNE des d'una
// altura fora de pantalla. Cridat per `updateRoomTransition` quan
// `room_intro_elapsed_ms_` supera el delay configurat. Idempotent
// (consulta `players_spawned_in_intro_`). També és el punt al qual
// es connectarà el respawn post-mort en el futur.
void triggerActivePlayerSpawn();
// Vista plana de punters crus — la fa servir Player com a llista
// d'obstacles mòbils a la callback de col·lisió. Es construeix un sol
// cop al ctor (els punters són estables perquè `players_` no es