GlobalInputs: ja es pot eixir del joc mentre redefinixes botons

This commit is contained in:
2025-08-08 18:55:18 +02:00
parent 3b07b2e130
commit 6f120dd4d2
4 changed files with 95 additions and 184 deletions

View File

@@ -35,14 +35,13 @@ DefineButtons::DefineButtons()
config.text_safety_margin = 15.0F;
config.min_width = 100;
config.min_height = 32;
config.animation_duration = 0.5F;
config.animation_duration = 0.3F;
auto text_renderer = Resource::get()->getText("04b_25_flat");
window_message_ = std::make_unique<WindowMessage>(
text_renderer,
Lang::getText("[DEFINE_BUTTONS] TITLE"),
config
);
config);
window_message_->setPosition(param.game.game_area.center_x, param.game.game_area.center_y, WindowMessage::PositionMode::CENTERED);
}
@@ -56,20 +55,20 @@ void DefineButtons::update() {
if (!enabled_) {
return;
}
// Actualizar la ventana siempre
if (window_message_) {
window_message_->update();
}
// Manejar la secuencia de cierre si ya terminamos
if (finished_ && message_shown_) {
message_timer_++;
// Después del delay, iniciar animación de cierre (solo una vez)
if (message_timer_ > MESSAGE_DISPLAY_FRAMES && !closing_) {
if (window_message_) {
window_message_->hide(); // Iniciar animación de cierre
window_message_->hide(); // Iniciar animación de cierre
}
closing_ = true;
}
@@ -97,6 +96,8 @@ auto DefineButtons::enable(Options::Gamepad *options_gamepad) -> bool {
enabled_ = true;
finished_ = false;
index_button_ = 0;
message_shown_ = false;
closing_ = false;
clearButtons();
updateWindowMessage();
@@ -113,6 +114,8 @@ auto DefineButtons::enable(Options::Gamepad *options_gamepad) -> bool {
void DefineButtons::disable() {
enabled_ = false;
finished_ = false;
message_shown_ = false;
closing_ = false;
if (window_message_) {
window_message_->hide();
@@ -187,11 +190,11 @@ void DefineButtons::checkEnd() {
bool DefineButtons::isReadyToClose() const {
// Solo está listo para cerrar si:
// 1. Terminó
// 2. Ya mostró el mensaje
// 2. Ya mostró el mensaje
// 3. Está cerrando
// 4. La ventana ya no está visible (animación terminada)
return finished_ && message_shown_ && closing_ &&
(!window_message_ || !window_message_->isVisible());
return finished_ && message_shown_ && closing_ &&
(!window_message_ || !window_message_->isVisible());
}
void DefineButtons::updateWindowMessage() {