scoreboard.cpp: afegit un setMode() com deu mana
This commit is contained in:
@@ -142,6 +142,40 @@ void Scoreboard::setCarouselAnimation(Id id, int selected_index, EnterName* ente
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Establece el modo del panel y gestiona transiciones
|
||||||
|
void Scoreboard::setMode(Id id, Mode mode) {
|
||||||
|
size_t idx = static_cast<size_t>(id);
|
||||||
|
|
||||||
|
// Cambiar el modo
|
||||||
|
panel_.at(idx).mode = mode;
|
||||||
|
|
||||||
|
// Gestionar inicialización/transiciones según el nuevo modo
|
||||||
|
switch (mode) {
|
||||||
|
case Mode::ENTER_NAME:
|
||||||
|
// Resetear carrusel al entrar en modo de entrada de nombre
|
||||||
|
// Esto fuerza una reinicialización en la próxima llamada a setCarouselAnimation()
|
||||||
|
if (carousel_prev_index_.at(idx) != -1) {
|
||||||
|
carousel_prev_index_.at(idx) = -1;
|
||||||
|
}
|
||||||
|
text_slide_offset_.at(idx) = 0.0f;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Mode::ENTER_TO_SHOW_NAME:
|
||||||
|
// Iniciar animación de transición
|
||||||
|
text_slide_offset_.at(idx) = 0.0f;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Mode::SHOW_NAME:
|
||||||
|
// Asegurar que la animación está completa
|
||||||
|
text_slide_offset_.at(idx) = 1.0f;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Otros modos no requieren inicialización especial
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Transforma un valor numérico en una cadena de 7 cifras
|
// Transforma un valor numérico en una cadena de 7 cifras
|
||||||
auto Scoreboard::updateScoreText(int num) -> std::string {
|
auto Scoreboard::updateScoreText(int num) -> std::string {
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
@@ -212,12 +246,8 @@ void Scoreboard::updateTextSlideAnimation(float deltaTime) {
|
|||||||
|
|
||||||
// Terminar animación y cambiar a SHOW_NAME cuando se complete
|
// Terminar animación y cambiar a SHOW_NAME cuando se complete
|
||||||
if (text_slide_offset_.at(i) >= 1.0f) {
|
if (text_slide_offset_.at(i) >= 1.0f) {
|
||||||
text_slide_offset_.at(i) = 1.0f;
|
setMode(static_cast<Id>(i), Mode::SHOW_NAME);
|
||||||
panel_.at(i).mode = Mode::SHOW_NAME;
|
|
||||||
}
|
}
|
||||||
} else if (current_mode != Mode::ENTER_NAME) {
|
|
||||||
// Resetear offset si no estamos en ENTER_NAME ni en transición
|
|
||||||
text_slide_offset_.at(i) = 0.0f;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -413,33 +443,35 @@ void Scoreboard::renderEnterNameMode(size_t panel_index) {
|
|||||||
|
|
||||||
void Scoreboard::renderEnterToShowNameMode(size_t panel_index) {
|
void Scoreboard::renderEnterToShowNameMode(size_t panel_index) {
|
||||||
// Calcular progreso suavizado de la animación (0.0 a 1.0)
|
// Calcular progreso suavizado de la animación (0.0 a 1.0)
|
||||||
float progress = text_slide_offset_.at(panel_index);
|
const float t = static_cast<float>(easeOutCubic(text_slide_offset_.at(panel_index)));
|
||||||
progress = std::min(progress, 1.0f); // Clampear a 1.0
|
|
||||||
const float t = static_cast<float>(easeOutCubic(progress));
|
// Calcular desplazamientos reales entre slots (no son exactamente ROW_SIZE)
|
||||||
const float ROW_SIZE = rect_.h / 4.0f;
|
const float delta_1_to_2 = slot4_2_.y - slot4_1_.y; // Diferencia real entre ROW1 y ROW2
|
||||||
const float y_offset = t * ROW_SIZE; // Desplazamiento en píxeles
|
const float delta_2_to_3 = slot4_3_.y - slot4_2_.y; // Diferencia real entre ROW2 y ROW3
|
||||||
|
const float delta_3_to_4 = slot4_4_.y - slot4_3_.y; // Diferencia real entre ROW3 y ROW4
|
||||||
|
|
||||||
// ========== Texto que ENTRA desde arriba ==========
|
// ========== Texto que ENTRA desde arriba ==========
|
||||||
// name_ (entra desde arriba hacia ROW1)
|
// name_ (entra desde arriba hacia ROW1)
|
||||||
text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + y_offset - ROW_SIZE,
|
// Debe venir desde donde estaría ROW0, que está a delta_1_to_2 píxeles arriba de ROW1
|
||||||
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + t * delta_1_to_2 - delta_1_to_2,
|
||||||
name_.at(panel_index), 1, text_color1_);
|
name_.at(panel_index), 1, text_color1_);
|
||||||
|
|
||||||
// ========== Textos que SE MUEVEN (renderizar UNA sola vez) ==========
|
// ========== Textos que SE MUEVEN (renderizar UNA sola vez) ==========
|
||||||
// SCORE (se mueve de ROW1 a ROW2)
|
// SCORE (se mueve de ROW1 a ROW2)
|
||||||
text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + y_offset,
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + t * delta_1_to_2,
|
||||||
updateScoreText(score_.at(panel_index)), 1, text_color2_);
|
updateScoreText(score_.at(panel_index)), 1, text_color2_);
|
||||||
|
|
||||||
// "ENTER NAME" (se mueve de ROW2 a ROW3)
|
// "ENTER NAME" (se mueve de ROW2 a ROW3)
|
||||||
text_->writeDX(Text::CENTER | Text::COLOR, slot4_2_.x, slot4_2_.y + y_offset,
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_2_.x, slot4_2_.y + t * delta_2_to_3,
|
||||||
Lang::getText("[SCOREBOARD] 11"), 1, text_color1_);
|
Lang::getText("[SCOREBOARD] 11"), 1, text_color1_);
|
||||||
|
|
||||||
// enter_name_ (se mueve de ROW3 a ROW4)
|
// enter_name_ (se mueve de ROW3 a ROW4)
|
||||||
text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y + y_offset,
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y + t * delta_3_to_4,
|
||||||
enter_name_.at(panel_index), 1, text_color2_);
|
enter_name_.at(panel_index), 1, text_color2_);
|
||||||
|
|
||||||
// ========== Elemento que SALE hacia abajo ==========
|
// ========== Elemento que SALE hacia abajo ==========
|
||||||
// CARRUSEL (sale desde ROW4 hacia abajo, fuera de pantalla)
|
// CARRUSEL (sale desde ROW4 hacia abajo, fuera de pantalla)
|
||||||
renderCarousel(panel_index, slot4_4_.x, static_cast<int>(slot4_4_.y + y_offset));
|
renderCarousel(panel_index, slot4_4_.x, static_cast<int>(slot4_4_.y + t * delta_3_to_4));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Scoreboard::renderShowNameMode(size_t panel_index) {
|
void Scoreboard::renderShowNameMode(size_t panel_index) {
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ class Scoreboard {
|
|||||||
void setContinue(Id id, int continue_counter) { continue_counter_.at(static_cast<size_t>(id)) = continue_counter; }
|
void setContinue(Id id, int continue_counter) { continue_counter_.at(static_cast<size_t>(id)) = continue_counter; }
|
||||||
void setHiScore(int hi_score) { hi_score_ = hi_score; }
|
void setHiScore(int hi_score) { hi_score_ = hi_score; }
|
||||||
void setHiScoreName(const std::string& name) { hi_score_name_ = name; }
|
void setHiScoreName(const std::string& name) { hi_score_name_ = name; }
|
||||||
void setMode(Id id, Mode mode) { panel_.at(static_cast<size_t>(id)).mode = mode; }
|
void setMode(Id id, Mode mode); // Establece el modo del panel y gestiona transiciones
|
||||||
void setMult(Id id, float mult) { mult_.at(static_cast<size_t>(id)) = mult; }
|
void setMult(Id id, float mult) { mult_.at(static_cast<size_t>(id)) = mult; }
|
||||||
void setName(Id id, const std::string& name) { name_.at(static_cast<size_t>(id)) = name; }
|
void setName(Id id, const std::string& name) { name_.at(static_cast<size_t>(id)) = name; }
|
||||||
void setPower(float power) { power_ = power; }
|
void setPower(float power) { power_ = power; }
|
||||||
|
|||||||
Reference in New Issue
Block a user