scoreboard.cpp: animació de SCORE a ENTER_NAME
This commit is contained in:
@@ -611,7 +611,7 @@ void Player::setPlayingState(State state) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case State::ENTERING_NAME: {
|
case State::ENTERING_NAME: {
|
||||||
setScoreboardMode(Scoreboard::Mode::ENTER_NAME);
|
setScoreboardMode(Scoreboard::Mode::SCORE_TO_ENTER_NAME); // Iniciar animación de transición
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case State::SHOWING_NAME: {
|
case State::SHOWING_NAME: {
|
||||||
@@ -666,7 +666,7 @@ void Player::setPlayingState(State state) {
|
|||||||
case State::ENTERING_NAME_GAME_COMPLETED: {
|
case State::ENTERING_NAME_GAME_COMPLETED: {
|
||||||
// setWalkingState(State::WALKING_STOP);
|
// setWalkingState(State::WALKING_STOP);
|
||||||
// setFiringState(State::FIRING_NONE);
|
// setFiringState(State::FIRING_NONE);
|
||||||
setScoreboardMode(Scoreboard::Mode::ENTER_NAME);
|
setScoreboardMode(Scoreboard::Mode::SCORE_TO_ENTER_NAME); // Iniciar animación de transición
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case State::LEAVING_SCREEN: {
|
case State::LEAVING_SCREEN: {
|
||||||
|
|||||||
@@ -151,6 +151,15 @@ void Scoreboard::setMode(Id id, Mode mode) {
|
|||||||
|
|
||||||
// Gestionar inicialización/transiciones según el nuevo modo
|
// Gestionar inicialización/transiciones según el nuevo modo
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
|
case Mode::SCORE_TO_ENTER_NAME:
|
||||||
|
// Iniciar animación de transición SCORE → ENTER_NAME
|
||||||
|
text_slide_offset_.at(idx) = 0.0f;
|
||||||
|
// Resetear carrusel para que se inicialice correctamente en ENTER_NAME
|
||||||
|
if (carousel_prev_index_.at(idx) != -1) {
|
||||||
|
carousel_prev_index_.at(idx) = -1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case Mode::ENTER_NAME:
|
case Mode::ENTER_NAME:
|
||||||
// Resetear carrusel al entrar en modo de entrada de nombre
|
// Resetear carrusel al entrar en modo de entrada de nombre
|
||||||
// Esto fuerza una reinicialización en la próxima llamada a setCarouselAnimation()
|
// Esto fuerza una reinicialización en la próxima llamada a setCarouselAnimation()
|
||||||
@@ -161,7 +170,7 @@ void Scoreboard::setMode(Id id, Mode mode) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case Mode::ENTER_TO_SHOW_NAME:
|
case Mode::ENTER_TO_SHOW_NAME:
|
||||||
// Iniciar animación de transición
|
// Iniciar animación de transición ENTER_NAME → SHOW_NAME
|
||||||
text_slide_offset_.at(idx) = 0.0f;
|
text_slide_offset_.at(idx) = 0.0f;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -235,13 +244,21 @@ void Scoreboard::updateCarouselAnimation(float deltaTime) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Actualiza la animación de deslizamiento de texto (transición ENTER_NAME -> SHOW_NAME)
|
// Actualiza las animaciones de deslizamiento de texto
|
||||||
void Scoreboard::updateTextSlideAnimation(float deltaTime) {
|
void Scoreboard::updateTextSlideAnimation(float deltaTime) {
|
||||||
for (size_t i = 0; i < static_cast<size_t>(Id::SIZE); ++i) {
|
for (size_t i = 0; i < static_cast<size_t>(Id::SIZE); ++i) {
|
||||||
Mode current_mode = panel_.at(i).mode;
|
Mode current_mode = panel_.at(i).mode;
|
||||||
|
|
||||||
if (current_mode == Mode::ENTER_TO_SHOW_NAME) {
|
if (current_mode == Mode::SCORE_TO_ENTER_NAME) {
|
||||||
// Incrementar progreso de animación (0.0 a 1.0)
|
// Incrementar progreso de animación SCORE → ENTER_NAME (0.0 a 1.0)
|
||||||
|
text_slide_offset_.at(i) += deltaTime / TEXT_SLIDE_DURATION;
|
||||||
|
|
||||||
|
// Terminar animación y cambiar a ENTER_NAME cuando se complete
|
||||||
|
if (text_slide_offset_.at(i) >= 1.0f) {
|
||||||
|
setMode(static_cast<Id>(i), Mode::ENTER_NAME);
|
||||||
|
}
|
||||||
|
} else if (current_mode == Mode::ENTER_TO_SHOW_NAME) {
|
||||||
|
// Incrementar progreso de animación ENTER_NAME → SHOW_NAME (0.0 a 1.0)
|
||||||
text_slide_offset_.at(i) += deltaTime / TEXT_SLIDE_DURATION;
|
text_slide_offset_.at(i) += deltaTime / TEXT_SLIDE_DURATION;
|
||||||
|
|
||||||
// Terminar animación y cambiar a SHOW_NAME cuando se complete
|
// Terminar animación y cambiar a SHOW_NAME cuando se complete
|
||||||
@@ -330,6 +347,9 @@ void Scoreboard::renderPanelContent(size_t panel_index) {
|
|||||||
case Mode::CONTINUE:
|
case Mode::CONTINUE:
|
||||||
renderContinueMode(panel_index);
|
renderContinueMode(panel_index);
|
||||||
break;
|
break;
|
||||||
|
case Mode::SCORE_TO_ENTER_NAME:
|
||||||
|
renderScoreToEnterNameMode(panel_index);
|
||||||
|
break;
|
||||||
case Mode::ENTER_NAME:
|
case Mode::ENTER_NAME:
|
||||||
renderEnterNameMode(panel_index);
|
renderEnterNameMode(panel_index);
|
||||||
break;
|
break;
|
||||||
@@ -416,6 +436,38 @@ void Scoreboard::renderContinueMode(size_t panel_index) {
|
|||||||
text_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y, std::to_string(continue_counter_.at(panel_index)), 1, text_color2_);
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y, std::to_string(continue_counter_.at(panel_index)), 1, text_color2_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Scoreboard::renderScoreToEnterNameMode(size_t panel_index) {
|
||||||
|
// Calcular progreso suavizado de la animación (0.0 a 1.0)
|
||||||
|
const float t = static_cast<float>(easeInOutSine(text_slide_offset_.at(panel_index)));
|
||||||
|
|
||||||
|
// Calcular desplazamientos reales entre slots (no son exactamente ROW_SIZE)
|
||||||
|
const float delta_1_to_2 = slot4_2_.y - slot4_1_.y; // Diferencia real entre ROW1 y ROW2
|
||||||
|
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 SALE hacia arriba ==========
|
||||||
|
// name_ (sale desde ROW1 hacia arriba)
|
||||||
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y - t * delta_1_to_2,
|
||||||
|
name_.at(panel_index), 1, text_color1_);
|
||||||
|
|
||||||
|
// ========== Textos que SE MUEVEN hacia arriba ==========
|
||||||
|
// score_ (se mueve de ROW2 a ROW1)
|
||||||
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_2_.x, slot4_2_.y - t * delta_1_to_2,
|
||||||
|
updateScoreText(score_.at(panel_index)), 1, text_color2_);
|
||||||
|
|
||||||
|
// "ENTER NAME" (se mueve de ROW3 a ROW2)
|
||||||
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y - t * delta_2_to_3,
|
||||||
|
Lang::getText("[SCOREBOARD] 11"), 1, text_color1_);
|
||||||
|
|
||||||
|
// enter_name_ (se mueve de ROW4 a ROW3)
|
||||||
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y - t * delta_3_to_4,
|
||||||
|
enter_name_.at(panel_index), 1, text_color2_);
|
||||||
|
|
||||||
|
// ========== Elemento que ENTRA desde abajo ==========
|
||||||
|
// CARRUSEL (entra desde debajo de ROW4 hacia ROW4)
|
||||||
|
renderCarousel(panel_index, slot4_4_.x, static_cast<int>(slot4_4_.y + delta_3_to_4 - t * delta_3_to_4));
|
||||||
|
}
|
||||||
|
|
||||||
void Scoreboard::renderEnterNameMode(size_t panel_index) {
|
void Scoreboard::renderEnterNameMode(size_t panel_index) {
|
||||||
/*
|
/*
|
||||||
// SCORE
|
// SCORE
|
||||||
|
|||||||
@@ -35,8 +35,9 @@ class Scoreboard {
|
|||||||
WAITING,
|
WAITING,
|
||||||
GAME_OVER,
|
GAME_OVER,
|
||||||
DEMO,
|
DEMO,
|
||||||
|
SCORE_TO_ENTER_NAME, // Transición animada: SCORE → ENTER_NAME
|
||||||
ENTER_NAME,
|
ENTER_NAME,
|
||||||
ENTER_TO_SHOW_NAME, // Estado de transición con animación
|
ENTER_TO_SHOW_NAME, // Transición animada: ENTER_NAME → SHOW_NAME
|
||||||
SHOW_NAME,
|
SHOW_NAME,
|
||||||
GAME_COMPLETED,
|
GAME_COMPLETED,
|
||||||
NUM_MODES,
|
NUM_MODES,
|
||||||
@@ -140,9 +141,10 @@ class Scoreboard {
|
|||||||
void renderGameOverMode();
|
void renderGameOverMode();
|
||||||
void renderStageInfoMode();
|
void renderStageInfoMode();
|
||||||
void renderContinueMode(size_t panel_index);
|
void renderContinueMode(size_t panel_index);
|
||||||
|
void renderScoreToEnterNameMode(size_t panel_index); // Renderiza la transición SCORE → ENTER_NAME
|
||||||
void renderEnterNameMode(size_t panel_index);
|
void renderEnterNameMode(size_t panel_index);
|
||||||
void renderNameInputField(size_t panel_index);
|
void renderNameInputField(size_t panel_index);
|
||||||
void renderEnterToShowNameMode(size_t panel_index); // Renderiza la transición animada
|
void renderEnterToShowNameMode(size_t panel_index); // Renderiza la transición ENTER_NAME → SHOW_NAME
|
||||||
void renderShowNameMode(size_t panel_index);
|
void renderShowNameMode(size_t panel_index);
|
||||||
void renderGameCompletedMode(size_t panel_index);
|
void renderGameCompletedMode(size_t panel_index);
|
||||||
void renderCarousel(size_t panel_index, int center_x, int y); // Pinta el carrusel de caracteres con colores LERP
|
void renderCarousel(size_t panel_index, int center_x, int y); // Pinta el carrusel de caracteres con colores LERP
|
||||||
|
|||||||
Reference in New Issue
Block a user