LoadingScreen: afegits picos de soroll als silencis

This commit is contained in:
2025-11-02 10:08:39 +01:00
parent 9cd1755266
commit 46f7968faf
2 changed files with 38 additions and 5 deletions

View File

@@ -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;
}