la consola ja no pausa al jugador

This commit is contained in:
2026-03-29 18:24:47 +02:00
parent 3b233f0e12
commit 301e0145fb
5 changed files with 21 additions and 12 deletions

View File

@@ -55,6 +55,7 @@ void Player::update(float delta_time) {
// Comprueba las entradas y modifica variables
void Player::handleInput() {
if (ignore_input_) { return; }
if (Input::get()->checkAction(InputAction::LEFT)) {
wanna_go_ = Direction::LEFT;
} else if (Input::get()->checkAction(InputAction::RIGHT)) {

View File

@@ -105,6 +105,7 @@ class Player {
//[[nodiscard]] auto isAlive() const -> bool { return is_alive_ || (Options::cheats.invincible == Options::Cheat::State::ENABLED); } // Comprueba si el jugador esta vivo
[[nodiscard]] auto isAlive() const -> bool { return is_alive_; } // Comprueba si el jugador esta vivo
void setPaused(bool value) { is_paused_ = value; } // Pone el jugador en modo pausa
void setIgnoreInput(bool value) { ignore_input_ = value; } // Ignora inputs del jugador (física sigue activa)
#ifdef _DEBUG
// --- Funciones de debug ---
@@ -146,6 +147,7 @@ class Player {
// --- Variables de juego ---
bool is_alive_ = true; // Indica si el jugador esta vivo o no
bool is_paused_ = false; // Indica si el jugador esta en modo pausa
bool ignore_input_ = false; // Ignora inputs pero mantiene la física activa
bool auto_movement_ = false; // Indica si esta siendo arrastrado por una superficie automatica
Room::Border border_ = Room::Border::TOP; // Indica en cual de los cuatro bordes se encuentra
int last_grounded_position_ = 0; // Ultima posición en Y en la que se estaba en contacto con el suelo (hace doble función: tracking de caída + altura inicial del salto)

View File

@@ -65,6 +65,7 @@ Game::Game(Mode mode)
Cheevos::get()->clearUnobtainableState();
GameControl::refresh_player_color = [this]() -> void { player_->setColor(); };
Console::get()->on_toggle = [this](bool open) { player_->setIgnoreInput(open); };
GameControl::change_player_skin = [this](int skin_num) -> void {
Options::game.player_skin = skin_num;
player_->setSkin(skin_num);
@@ -116,6 +117,7 @@ Game::~Game() {
GameControl::refresh_player_color = nullptr;
GameControl::change_player_skin = nullptr;
Console::get()->on_toggle = nullptr;
#ifdef _DEBUG
GameControl::change_room = nullptr;
@@ -229,19 +231,17 @@ void Game::updatePlaying(float delta_time) {
room_->update(delta_time);
switch (mode_) {
case Mode::GAME:
if (!Console::get()->isActive()) {
#ifdef _DEBUG
// Maneja el arrastre del jugador con el ratón (debug)
handleDebugMouseDrag(delta_time);
// Maneja el arrastre del jugador con el ratón (debug)
handleDebugMouseDrag(delta_time);
// Si estamos arrastrando, no ejecutar la física normal del jugador
if (!debug_dragging_player_) {
player_->update(delta_time);
}
#else
// Si estamos arrastrando, no ejecutar la física normal del jugador
if (!debug_dragging_player_) {
player_->update(delta_time);
#endif
}
#else
player_->update(delta_time);
#endif
checkPlayerIsOnBorder();
checkPlayerAndItems();
checkPlayerAndEnemies();

View File

@@ -907,6 +907,7 @@ void Console::toggle() {
cursor_visible_ = true;
SDL_StartTextInput(SDL_GetKeyboardFocus());
if (Notifier::get() != nullptr) { Notifier::get()->addYOffset(static_cast<int>(height_)); }
if (on_toggle) { on_toggle(true); }
break;
case Status::ACTIVE:
status_ = Status::VANISHING;
@@ -915,6 +916,7 @@ void Console::toggle() {
saved_input_.clear();
SDL_StopTextInput(SDL_GetKeyboardFocus());
if (Notifier::get() != nullptr) { Notifier::get()->removeYOffset(static_cast<int>(height_)); }
if (on_toggle) { on_toggle(false); }
break;
default:
// Durante RISING o VANISHING no se hace nada

View File

@@ -2,9 +2,10 @@
#include <SDL3/SDL.h>
#include <deque> // Para deque (historial)
#include <memory> // Para shared_ptr
#include <string> // Para string
#include <deque> // Para deque (historial)
#include <functional> // Para function
#include <memory> // Para shared_ptr
#include <string> // Para string
class Surface;
class Sprite;
@@ -28,6 +29,9 @@ class Console {
auto getVisibleHeight() -> int; // Píxeles visibles actuales (0 = oculta, height_ = totalmente visible)
[[nodiscard]] auto getText() const -> std::shared_ptr<Text> { return text_; }
// Callback llamado al abrir (true) o cerrar (false) la consola
std::function<void(bool)> on_toggle;
private:
enum class Status {
HIDDEN,