LoadingScreen: afegits picos de soroll als silencis
This commit is contained in:
@@ -331,12 +331,13 @@ void LoadingScreen::update() {
|
||||
|
||||
// Actualizar la carga según el estado actual
|
||||
switch (state_) {
|
||||
case State::SILENT1:
|
||||
case State::DATA1:
|
||||
case State::SILENT2:
|
||||
case State::DATA2:
|
||||
// Por ahora no hacen nada específico
|
||||
// Tú definirás la lógica de cada estado aquí
|
||||
break;
|
||||
case State::SILENT1:
|
||||
case State::SILENT2:
|
||||
updateSilent(DELTA_TIME);
|
||||
break;
|
||||
case State::HEADER1:
|
||||
case State::HEADER2:
|
||||
@@ -429,6 +430,7 @@ void LoadingScreen::printProgramName() {
|
||||
Screen::get()->setRendererSurface(previous_renderer);
|
||||
}
|
||||
|
||||
// Actualiza la portadora
|
||||
void LoadingScreen::updateCarrier(float delta_time) {
|
||||
constexpr float CARRIER_BASE_SPEED = -250.0F;
|
||||
constexpr float CARRIER_HEIGHT = HEADER_DATAROW_HEIGHT;
|
||||
@@ -445,4 +447,26 @@ void LoadingScreen::updateCarrier(float delta_time) {
|
||||
}
|
||||
|
||||
carrier_.total_time += delta_time;
|
||||
}
|
||||
|
||||
// Actualiza el ruido durante el tiempo de silencio
|
||||
void LoadingScreen::updateSilent(float delta_time) {
|
||||
constexpr float NOISE_THRESHOLD = 0.35F;
|
||||
|
||||
// Oscilación compuesta para simular picos de ruido
|
||||
const float modulation = std::sin(noise_.total_time * 4.2F) * std::sin(noise_.total_time * 1.7F + 0.5F);
|
||||
noise_.value = std::fabs(modulation); // rango [0.0, 1.0]
|
||||
|
||||
// Detecta cruce de umbral solo si venía de abajo
|
||||
if (noise_.value > NOISE_THRESHOLD && !noise_.crossed) {
|
||||
noise_.crossed = true;
|
||||
current_border_type_ = (current_border_type_ == Border::RED) ? Border::CYAN : Border::RED;
|
||||
}
|
||||
|
||||
// Restablece el flag cuando baja del umbral
|
||||
if (noise_.value < NOISE_THRESHOLD) {
|
||||
noise_.crossed = false;
|
||||
}
|
||||
|
||||
noise_.total_time += delta_time;
|
||||
}
|
||||
@@ -43,17 +43,24 @@ class LoadingScreen {
|
||||
void run();
|
||||
|
||||
private:
|
||||
// --- Estructuras ---
|
||||
struct Carrier {
|
||||
float offset{0.0F}; // Offset para la carga de cabeceras
|
||||
bool toggle{false}; // Para cambiar el color inicial
|
||||
float total_time{0.0F}; // Tiempo acumulado para modulación de velocidad
|
||||
};
|
||||
|
||||
struct Noise {
|
||||
float value{0.0F}; // Nivel actual de ruido (0.0 a 1.0)
|
||||
float total_time{0.0F}; // Tiempo acumulado para modulación
|
||||
bool crossed{false}; // Flag para detectar cruce de umbral
|
||||
};
|
||||
|
||||
// --- Constantes de tiempo (en segundos) ---
|
||||
static constexpr float SILENT1_DURATION = 1.0F; // Pausa inicial
|
||||
static constexpr float SILENT1_DURATION = 2.0F; // Pausa inicial
|
||||
static constexpr float HEADER1_DURATION = 4.0F; // Cabecera
|
||||
static constexpr float DATA1_DURATION = 0.3F; // Datos
|
||||
static constexpr float SILENT2_DURATION = 2.0F; // Segunda pausa
|
||||
static constexpr float SILENT2_DURATION = 3.0F; // Segunda pausa
|
||||
static constexpr float HEADER2_DURATION = 2.0F; // Cabecera pantalla
|
||||
static constexpr float LOADING_MONO_DURATION = 16.0F; // Duración total de la carga monocromática
|
||||
static constexpr float LOADING_COLOR_DURATION = 4.0F; // Duración total de la carga en color
|
||||
@@ -85,6 +92,7 @@ class LoadingScreen {
|
||||
std::array<int, MONO_TOTAL_LINES> line_index_; // El orden en el que se procesan las 192 líneas de la pantalla de carga
|
||||
SDL_FRect load_rect_{0.0F, 0.0F, 0.0F, 1.0F}; // Rectángulo para dibujar la pantalla de carga
|
||||
Carrier carrier_; // Estructura para los efectos de la carga de cabeceras
|
||||
Noise noise_; // Variaciones de ruido durante los silencios
|
||||
|
||||
// --- Funciones ---
|
||||
void update(); // Actualiza las variables
|
||||
@@ -102,4 +110,5 @@ class LoadingScreen {
|
||||
void initLineIndexArray(); // Inicializa el array de índices de líneas
|
||||
void printProgramName(); // Escribe el nombre del programa
|
||||
void updateCarrier(float delta_time); // Actualiza la portadora
|
||||
void updateSilent(float delta_time); // Actualiza el ruido durante el tiempo de silencio
|
||||
};
|
||||
Reference in New Issue
Block a user