el joc es pot controlar amb el primer mando que hi haja conectat
This commit is contained in:
@@ -70,18 +70,24 @@ auto Input::checkAction(Action action, bool repeat, bool check_keyboard, const s
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gamepad != nullptr) {
|
// Si gamepad es nullptr pero hay mandos conectados, usar el primero
|
||||||
success_controller = checkAxisInput(action, gamepad, repeat);
|
std::shared_ptr<Gamepad> active_gamepad = gamepad;
|
||||||
|
if (active_gamepad == nullptr && !gamepads_.empty()) {
|
||||||
|
active_gamepad = gamepads_[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (active_gamepad != nullptr) {
|
||||||
|
success_controller = checkAxisInput(action, active_gamepad, repeat);
|
||||||
|
|
||||||
if (!success_controller) {
|
if (!success_controller) {
|
||||||
success_controller = checkTriggerInput(action, gamepad, repeat);
|
success_controller = checkTriggerInput(action, active_gamepad, repeat);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!success_controller) {
|
if (!success_controller) {
|
||||||
if (repeat) { // El usuario quiere saber si está pulsada (estado mantenido)
|
if (repeat) { // El usuario quiere saber si está pulsada (estado mantenido)
|
||||||
success_controller = gamepad->bindings[action].is_held;
|
success_controller = active_gamepad->bindings[action].is_held;
|
||||||
} else { // El usuario quiere saber si ACABA de ser pulsada (evento de un solo fotograma)
|
} else { // El usuario quiere saber si ACABA de ser pulsada (evento de un solo fotograma)
|
||||||
success_controller = gamepad->bindings[action].just_pressed;
|
success_controller = active_gamepad->bindings[action].just_pressed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -104,11 +110,17 @@ auto Input::checkAnyInput(bool check_keyboard, const std::shared_ptr<Gamepad>& g
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Si gamepad es nullptr pero hay mandos conectados, usar el primero
|
||||||
|
std::shared_ptr<Gamepad> active_gamepad = gamepad;
|
||||||
|
if (active_gamepad == nullptr && !gamepads_.empty()) {
|
||||||
|
active_gamepad = gamepads_[0];
|
||||||
|
}
|
||||||
|
|
||||||
// --- Comprobación del Mando ---
|
// --- Comprobación del Mando ---
|
||||||
// Comprobamos si hay mandos y si el índice solicitado es válido.
|
// Comprobamos si hay mandos y si el índice solicitado es válido.
|
||||||
if (gamepad != nullptr) {
|
if (active_gamepad != nullptr) {
|
||||||
// Iteramos sobre todas las acciones, no sobre el número de mandos.
|
// Iteramos sobre todas las acciones, no sobre el número de mandos.
|
||||||
for (const auto& pair : gamepad->bindings) {
|
for (const auto& pair : active_gamepad->bindings) {
|
||||||
// Leemos el estado pre-calculado para el mando y la acción específicos.
|
// Leemos el estado pre-calculado para el mando y la acción específicos.
|
||||||
if (pair.second.just_pressed) {
|
if (pair.second.just_pressed) {
|
||||||
return true; // Se encontró una acción recién pulsada en el mando.
|
return true; // Se encontró una acción recién pulsada en el mando.
|
||||||
|
|||||||
@@ -35,18 +35,18 @@ void Player::render() {
|
|||||||
// Actualiza las variables del objeto
|
// Actualiza las variables del objeto
|
||||||
void Player::update(float delta_time) {
|
void Player::update(float delta_time) {
|
||||||
if (!is_paused_) {
|
if (!is_paused_) {
|
||||||
checkInput(delta_time); // Comprueba las entradas y modifica variables
|
handleInput(delta_time); // Comprueba las entradas y modifica variables
|
||||||
move(delta_time); // Recalcula la posición del jugador
|
move(delta_time); // Recalcula la posición del jugador
|
||||||
animate(delta_time); // Establece la animación del jugador
|
animate(delta_time); // Establece la animación del jugador
|
||||||
checkBorders(); // Comprueba si está situado en alguno de los cuatro bordes de la habitación
|
handleBorders(); // Comprueba si está situado en alguno de los cuatro bordes de la habitación
|
||||||
checkJumpEnd(); // Comprueba si ha finalizado el salto al alcanzar la altura de inicio
|
handleJumpEnd(); // Comprueba si ha finalizado el salto al alcanzar la altura de inicio
|
||||||
checkKillingTiles(); // Comprueba que el jugador no toque ningun tile de los que matan
|
handleKillingTiles(); // Comprueba que el jugador no toque ningun tile de los que matan
|
||||||
setColor(); // Establece el color del jugador
|
setColor(); // Establece el color del jugador
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Comprueba las entradas y modifica variables
|
// Comprueba las entradas y modifica variables
|
||||||
void Player::checkInput(float delta_time) {
|
void Player::handleInput(float delta_time) {
|
||||||
(void)delta_time; // No usado en este método, pero mantenido para consistencia
|
(void)delta_time; // No usado en este método, pero mantenido para consistencia
|
||||||
|
|
||||||
// Solo comprueba las entradas de dirección cuando está sobre una superficie
|
// Solo comprueba las entradas de dirección cuando está sobre una superficie
|
||||||
@@ -99,7 +99,7 @@ void Player::checkInput(float delta_time) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Comprueba si está situado en alguno de los cuatro bordes de la habitación
|
// Comprueba si está situado en alguno de los cuatro bordes de la habitación
|
||||||
void Player::checkBorders() {
|
void Player::handleBorders() {
|
||||||
if (x_ < PLAY_AREA_LEFT) {
|
if (x_ < PLAY_AREA_LEFT) {
|
||||||
border_ = Room::Border::LEFT;
|
border_ = Room::Border::LEFT;
|
||||||
is_on_border_ = true;
|
is_on_border_ = true;
|
||||||
@@ -126,7 +126,7 @@ void Player::checkBorders() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Comprueba el estado del jugador
|
// Comprueba el estado del jugador
|
||||||
void Player::checkState(float delta_time) {
|
void Player::handleState(float delta_time) {
|
||||||
(void)delta_time; // No usado actualmente
|
(void)delta_time; // No usado actualmente
|
||||||
|
|
||||||
// Reproduce sonidos según el estado
|
// Reproduce sonidos según el estado
|
||||||
@@ -347,7 +347,7 @@ void Player::moveVerticalDown(float delta_time) {
|
|||||||
// Orquesta el movimiento del jugador
|
// Orquesta el movimiento del jugador
|
||||||
void Player::move(float delta_time) {
|
void Player::move(float delta_time) {
|
||||||
applyGravity(delta_time); // Aplica gravedad al jugador
|
applyGravity(delta_time); // Aplica gravedad al jugador
|
||||||
checkState(delta_time); // Comprueba el estado del jugador
|
handleState(delta_time); // Comprueba el estado del jugador
|
||||||
|
|
||||||
// Movimiento horizontal
|
// Movimiento horizontal
|
||||||
if (vx_ < 0.0F) {
|
if (vx_ < 0.0F) {
|
||||||
@@ -388,8 +388,7 @@ void Player::animate(float delta_time) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Comprueba si ha finalizado el salto al alcanzar la altura de inicio
|
// Comprueba si ha finalizado el salto al alcanzar la altura de inicio
|
||||||
void Player::checkJumpEnd() {
|
void Player::handleJumpEnd() {
|
||||||
// CORRECCIÓN: Usar > (mayor) en lugar de >= (mayor o igual)
|
|
||||||
// Si el jugador vuelve EXACTAMENTE a la altura inicial, debe CONTINUAR en JUMPING
|
// Si el jugador vuelve EXACTAMENTE a la altura inicial, debe CONTINUAR en JUMPING
|
||||||
// Solo cuando la SUPERA (desciende más allá) cambia a FALLING
|
// Solo cuando la SUPERA (desciende más allá) cambia a FALLING
|
||||||
if (state_ == State::JUMPING && vy_ > 0.0F && static_cast<int>(y_) > last_grounded_position_) {
|
if (state_ == State::JUMPING && vy_ > 0.0F && static_cast<int>(y_) > last_grounded_position_) {
|
||||||
@@ -485,7 +484,7 @@ auto Player::isOnDownSlope() -> bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Comprueba que el jugador no toque ningun tile de los que matan
|
// Comprueba que el jugador no toque ningun tile de los que matan
|
||||||
auto Player::checkKillingTiles() -> bool {
|
auto Player::handleKillingTiles() -> bool {
|
||||||
// Comprueba si hay contacto con algún tile que mata
|
// Comprueba si hay contacto con algún tile que mata
|
||||||
if (std::ranges::any_of(collider_points_, [this](const auto& c) {
|
if (std::ranges::any_of(collider_points_, [this](const auto& c) {
|
||||||
return room_->getTile(c) == Room::Tile::KILL;
|
return room_->getTile(c) == Room::Tile::KILL;
|
||||||
|
|||||||
@@ -134,10 +134,10 @@ class Player {
|
|||||||
void applySpawnValues(const SpawnData& spawn); // Aplica los valores de spawn al jugador
|
void applySpawnValues(const SpawnData& spawn); // Aplica los valores de spawn al jugador
|
||||||
|
|
||||||
// --- Funciones de procesamiento de entrada ---
|
// --- Funciones de procesamiento de entrada ---
|
||||||
void checkInput(float delta_time); // Comprueba las entradas y modifica variables
|
void handleInput(float delta_time); // Comprueba las entradas y modifica variables
|
||||||
|
|
||||||
// --- Funciones de gestión de estado ---
|
// --- Funciones de gestión de estado ---
|
||||||
void checkState(float delta_time); // Comprueba el estado del jugador y actualiza variables
|
void handleState(float delta_time); // Comprueba el estado del jugador y actualiza variables
|
||||||
void setState(State value); // Cambia el estado del jugador
|
void setState(State value); // Cambia el estado del jugador
|
||||||
|
|
||||||
// --- Funciones de física ---
|
// --- Funciones de física ---
|
||||||
@@ -163,9 +163,9 @@ class Player {
|
|||||||
|
|
||||||
// --- Funciones de finalización ---
|
// --- Funciones de finalización ---
|
||||||
void animate(float delta_time); // Establece la animación del jugador
|
void animate(float delta_time); // Establece la animación del jugador
|
||||||
void checkBorders(); // Comprueba si se halla en alguno de los cuatro bordes
|
void handleBorders(); // Comprueba si se halla en alguno de los cuatro bordes
|
||||||
void checkJumpEnd(); // Comprueba si ha finalizado el salto al alcanzar la altura de inicio
|
void handleJumpEnd(); // Comprueba si ha finalizado el salto al alcanzar la altura de inicio
|
||||||
auto checkKillingTiles() -> bool; // Comprueba que el jugador no toque ningun tile de los que matan
|
auto handleKillingTiles() -> bool; // Comprueba que el jugador no toque ningun tile de los que matan
|
||||||
void playJumpSound(); // Calcula y reproduce el sonido de salto
|
void playJumpSound(); // Calcula y reproduce el sonido de salto
|
||||||
void playFallSound(); // Calcula y reproduce el sonido de caer
|
void playFallSound(); // Calcula y reproduce el sonido de caer
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user