clang-tidy readability-function-cognitive-complexity
clang-format
This commit is contained in:
@@ -147,182 +147,217 @@ void Player::setInputEnteringName(InputAction input) {
|
||||
// Mueve el jugador a la posición y animación que le corresponde
|
||||
void Player::move() {
|
||||
switch (playing_state_) {
|
||||
case PlayerState::PLAYING: {
|
||||
// Mueve el jugador a derecha o izquierda
|
||||
pos_x_ += vel_x_;
|
||||
|
||||
// Si el jugador abandona el area de juego por los laterales, restaura su posición
|
||||
const float MIN_X = play_area_.x - 5;
|
||||
const float MAX_X = play_area_.w + 5 - WIDTH;
|
||||
pos_x_ = std::clamp(pos_x_, MIN_X, MAX_X);
|
||||
|
||||
shiftSprite();
|
||||
case PlayerState::PLAYING:
|
||||
handlePlayingMovement();
|
||||
break;
|
||||
}
|
||||
case PlayerState::ROLLING: {
|
||||
// Si el jugador abandona el area de juego por los laterales lo hace rebotar
|
||||
const int X = player_sprite_->getPosX();
|
||||
const int MIN_X = play_area_.x;
|
||||
const int MAX_X = play_area_.x + play_area_.w - WIDTH;
|
||||
if ((X < MIN_X) || (X > MAX_X)) {
|
||||
player_sprite_->setPosX(std::clamp(X, MIN_X, MAX_X));
|
||||
player_sprite_->setVelX(-player_sprite_->getVelX());
|
||||
playSound("jump.wav");
|
||||
}
|
||||
|
||||
// Si el jugador toca el suelo rebota y si tiene poca velocidad, se detiene y cambia de estado
|
||||
if (player_sprite_->getPosY() > play_area_.h - HEIGHT) {
|
||||
if (player_sprite_->getVelY() < 2.0F) {
|
||||
// Si la velocidad de rebote es baja, lo detiene y cambia de estado
|
||||
const auto NEXT_PLAYER_STATUS = isEligibleForHighScore() ? PlayerState::ENTERING_NAME : PlayerState::CONTINUE;
|
||||
demo_ ? setPlayingState(PlayerState::LYING_ON_THE_FLOOR_FOREVER) : setPlayingState(NEXT_PLAYER_STATUS);
|
||||
pos_x_ = player_sprite_->getPosX();
|
||||
pos_y_ = default_pos_y_;
|
||||
player_sprite_->clear();
|
||||
shiftSprite();
|
||||
playSound("jump.wav");
|
||||
} else {
|
||||
// Decrementa las velocidades de rebote
|
||||
player_sprite_->setPosY(play_area_.h - HEIGHT);
|
||||
player_sprite_->setVelY(player_sprite_->getVelY() * -0.5F);
|
||||
player_sprite_->setVelX(player_sprite_->getVelX() * 0.75F);
|
||||
player_sprite_->setAnimationSpeed(player_sprite_->getAnimationSpeed() * 2);
|
||||
playSound("jump.wav");
|
||||
}
|
||||
}
|
||||
case PlayerState::ROLLING:
|
||||
handleRollingMovement();
|
||||
break;
|
||||
}
|
||||
case PlayerState::TITLE_ANIMATION: {
|
||||
// Si el jugador abandona el area de juego por los laterales lo detiene
|
||||
/*const int X = player_sprite_->getPosX();
|
||||
const int MIN_X = play_area_.x - WIDTH;
|
||||
const int MAX_X = play_area_.x + play_area_.w;
|
||||
if ((X < MIN_X) || (X > MAX_X))
|
||||
{
|
||||
setPlayingState(PlayerState::TITLE_HIDDEN);
|
||||
}
|
||||
|
||||
// Si el jugador toca el suelo rebota lo detiene
|
||||
if (player_sprite_->getPosY() > play_area_.h)
|
||||
{
|
||||
setPlayingState(PlayerState::TITLE_HIDDEN);
|
||||
}*/
|
||||
|
||||
switch (id_) {
|
||||
case 1:
|
||||
setInputPlaying(InputAction::LEFT);
|
||||
break;
|
||||
case 2:
|
||||
setInputPlaying(InputAction::RIGHT);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
pos_x_ += vel_x_ * 2.0F;
|
||||
const float MIN_X = -WIDTH;
|
||||
const float MAX_X = play_area_.w;
|
||||
pos_x_ = std::clamp(pos_x_, MIN_X, MAX_X);
|
||||
shiftSprite();
|
||||
|
||||
if (pos_x_ == MIN_X || pos_x_ == MAX_X) {
|
||||
setPlayingState(PlayerState::TITLE_HIDDEN);
|
||||
}
|
||||
case PlayerState::TITLE_ANIMATION:
|
||||
handleTitleAnimation();
|
||||
break;
|
||||
}
|
||||
case PlayerState::CONTINUE_TIME_OUT: {
|
||||
// Si el cadaver desaparece por el suelo, cambia de estado
|
||||
if (player_sprite_->getPosY() > play_area_.h) {
|
||||
setPlayingState(PlayerState::WAITING);
|
||||
}
|
||||
case PlayerState::CONTINUE_TIME_OUT:
|
||||
handleContinueTimeOut();
|
||||
break;
|
||||
}
|
||||
case PlayerState::LEAVING_SCREEN: {
|
||||
++step_counter_;
|
||||
if (step_counter_ % 10 == 0) {
|
||||
playSound("walk.wav");
|
||||
}
|
||||
|
||||
switch (id_) {
|
||||
case 1:
|
||||
setInputPlaying(InputAction::LEFT);
|
||||
break;
|
||||
case 2:
|
||||
setInputPlaying(InputAction::RIGHT);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
pos_x_ += vel_x_;
|
||||
const float MIN_X = -WIDTH;
|
||||
const float MAX_X = play_area_.w;
|
||||
pos_x_ = std::clamp(pos_x_, MIN_X, MAX_X);
|
||||
shiftSprite();
|
||||
|
||||
if (pos_x_ == MIN_X || pos_x_ == MAX_X) {
|
||||
setPlayingState(PlayerState::GAME_OVER);
|
||||
}
|
||||
case PlayerState::LEAVING_SCREEN:
|
||||
handleLeavingScreen();
|
||||
break;
|
||||
}
|
||||
case PlayerState::ENTERING_SCREEN: {
|
||||
++step_counter_;
|
||||
if (step_counter_ % 10 == 0) {
|
||||
playSound("walk.wav");
|
||||
}
|
||||
|
||||
switch (id_) {
|
||||
case 1:
|
||||
setInputPlaying(InputAction::RIGHT);
|
||||
pos_x_ += vel_x_;
|
||||
if (pos_x_ > default_pos_x_) {
|
||||
pos_x_ = default_pos_x_;
|
||||
setPlayingState(PlayerState::PLAYING);
|
||||
setInvulnerable(false);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
setInputPlaying(InputAction::LEFT);
|
||||
pos_x_ += vel_x_;
|
||||
if (pos_x_ < default_pos_x_) {
|
||||
pos_x_ = default_pos_x_;
|
||||
setPlayingState(PlayerState::PLAYING);
|
||||
setInvulnerable(false);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
shiftSprite();
|
||||
case PlayerState::ENTERING_SCREEN:
|
||||
handleEnteringScreen();
|
||||
break;
|
||||
}
|
||||
case PlayerState::CREDITS: {
|
||||
pos_x_ += vel_x_ / 2.0F;
|
||||
if (vel_x_ > 0) {
|
||||
// setInputPlaying(InputAction::RIGHT);
|
||||
if (pos_x_ > param.game.game_area.rect.w - WIDTH) {
|
||||
pos_x_ = param.game.game_area.rect.w - WIDTH;
|
||||
vel_x_ *= -1;
|
||||
}
|
||||
} else {
|
||||
// setInputPlaying(InputAction::LEFT);
|
||||
if (pos_x_ < param.game.game_area.rect.x) {
|
||||
pos_x_ = param.game.game_area.rect.x;
|
||||
vel_x_ *= -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (pos_x_ > param.game.game_area.center_x - WIDTH / 2) {
|
||||
setWalkingState(PlayerState::WALKING_LEFT);
|
||||
} else {
|
||||
setWalkingState(PlayerState::WALKING_RIGHT);
|
||||
}
|
||||
shiftSprite();
|
||||
case PlayerState::CREDITS:
|
||||
handleCreditsMovement();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Player::handlePlayingMovement() {
|
||||
// Mueve el jugador a derecha o izquierda
|
||||
pos_x_ += vel_x_;
|
||||
|
||||
// Si el jugador abandona el area de juego por los laterales, restaura su posición
|
||||
const float MIN_X = play_area_.x - 5;
|
||||
const float MAX_X = play_area_.w + 5 - WIDTH;
|
||||
pos_x_ = std::clamp(pos_x_, MIN_X, MAX_X);
|
||||
|
||||
shiftSprite();
|
||||
}
|
||||
|
||||
void Player::handleRollingMovement() {
|
||||
handleRollingBoundaryCollision();
|
||||
handleRollingGroundCollision();
|
||||
}
|
||||
|
||||
void Player::handleRollingBoundaryCollision() {
|
||||
const int X = player_sprite_->getPosX();
|
||||
const int MIN_X = play_area_.x;
|
||||
const int MAX_X = play_area_.x + play_area_.w - WIDTH;
|
||||
|
||||
if ((X < MIN_X) || (X > MAX_X)) {
|
||||
player_sprite_->setPosX(std::clamp(X, MIN_X, MAX_X));
|
||||
player_sprite_->setVelX(-player_sprite_->getVelX());
|
||||
playSound("jump.wav");
|
||||
}
|
||||
}
|
||||
|
||||
void Player::handleRollingGroundCollision() {
|
||||
if (player_sprite_->getPosY() <= play_area_.h - HEIGHT) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (player_sprite_->getVelY() < 2.0F) {
|
||||
handleRollingStop();
|
||||
} else {
|
||||
handleRollingBounce();
|
||||
}
|
||||
}
|
||||
|
||||
void Player::handleRollingStop() {
|
||||
const auto NEXT_PLAYER_STATUS = isEligibleForHighScore() ? PlayerState::ENTERING_NAME : PlayerState::CONTINUE;
|
||||
|
||||
const auto NEXT_STATE = demo_ ? PlayerState::LYING_ON_THE_FLOOR_FOREVER : NEXT_PLAYER_STATUS;
|
||||
|
||||
setPlayingState(NEXT_STATE);
|
||||
pos_x_ = player_sprite_->getPosX();
|
||||
pos_y_ = default_pos_y_;
|
||||
player_sprite_->clear();
|
||||
shiftSprite();
|
||||
playSound("jump.wav");
|
||||
}
|
||||
|
||||
void Player::handleRollingBounce() {
|
||||
player_sprite_->setPosY(play_area_.h - HEIGHT);
|
||||
player_sprite_->setVelY(player_sprite_->getVelY() * -0.5F);
|
||||
player_sprite_->setVelX(player_sprite_->getVelX() * 0.75F);
|
||||
player_sprite_->setAnimationSpeed(player_sprite_->getAnimationSpeed() * 2);
|
||||
playSound("jump.wav");
|
||||
}
|
||||
|
||||
void Player::handleTitleAnimation() {
|
||||
setInputBasedOnPlayerId();
|
||||
|
||||
pos_x_ += vel_x_ * 2.0F;
|
||||
const float MIN_X = -WIDTH;
|
||||
const float MAX_X = play_area_.w;
|
||||
pos_x_ = std::clamp(pos_x_, MIN_X, MAX_X);
|
||||
shiftSprite();
|
||||
|
||||
if (pos_x_ == MIN_X || pos_x_ == MAX_X) {
|
||||
setPlayingState(PlayerState::TITLE_HIDDEN);
|
||||
}
|
||||
}
|
||||
|
||||
void Player::handleContinueTimeOut() {
|
||||
// Si el cadaver desaparece por el suelo, cambia de estado
|
||||
if (player_sprite_->getPosY() > play_area_.h) {
|
||||
setPlayingState(PlayerState::WAITING);
|
||||
}
|
||||
}
|
||||
|
||||
void Player::handleLeavingScreen() {
|
||||
updateStepCounter();
|
||||
setInputBasedOnPlayerId();
|
||||
|
||||
pos_x_ += vel_x_;
|
||||
const float MIN_X = -WIDTH;
|
||||
const float MAX_X = play_area_.w;
|
||||
pos_x_ = std::clamp(pos_x_, MIN_X, MAX_X);
|
||||
shiftSprite();
|
||||
|
||||
if (pos_x_ == MIN_X || pos_x_ == MAX_X) {
|
||||
setPlayingState(PlayerState::GAME_OVER);
|
||||
}
|
||||
}
|
||||
|
||||
void Player::handleEnteringScreen() {
|
||||
updateStepCounter();
|
||||
|
||||
if (id_ == 1) {
|
||||
handlePlayer1Entering();
|
||||
} else if (id_ == 2) {
|
||||
handlePlayer2Entering();
|
||||
}
|
||||
|
||||
shiftSprite();
|
||||
}
|
||||
|
||||
void Player::handlePlayer1Entering() {
|
||||
setInputPlaying(InputAction::RIGHT);
|
||||
pos_x_ += vel_x_;
|
||||
if (pos_x_ > default_pos_x_) {
|
||||
pos_x_ = default_pos_x_;
|
||||
setPlayingState(PlayerState::PLAYING);
|
||||
setInvulnerable(false);
|
||||
}
|
||||
}
|
||||
|
||||
void Player::handlePlayer2Entering() {
|
||||
setInputPlaying(InputAction::LEFT);
|
||||
pos_x_ += vel_x_;
|
||||
if (pos_x_ < default_pos_x_) {
|
||||
pos_x_ = default_pos_x_;
|
||||
setPlayingState(PlayerState::PLAYING);
|
||||
setInvulnerable(false);
|
||||
}
|
||||
}
|
||||
|
||||
void Player::handleCreditsMovement() {
|
||||
pos_x_ += vel_x_ / 2.0F;
|
||||
|
||||
if (vel_x_ > 0) {
|
||||
handleCreditsRightMovement();
|
||||
} else {
|
||||
handleCreditsLeftMovement();
|
||||
}
|
||||
|
||||
updateWalkingStateForCredits();
|
||||
shiftSprite();
|
||||
}
|
||||
|
||||
void Player::handleCreditsRightMovement() {
|
||||
if (pos_x_ > param.game.game_area.rect.w - WIDTH) {
|
||||
pos_x_ = param.game.game_area.rect.w - WIDTH;
|
||||
vel_x_ *= -1;
|
||||
}
|
||||
}
|
||||
|
||||
void Player::handleCreditsLeftMovement() {
|
||||
if (pos_x_ < param.game.game_area.rect.x) {
|
||||
pos_x_ = param.game.game_area.rect.x;
|
||||
vel_x_ *= -1;
|
||||
}
|
||||
}
|
||||
|
||||
void Player::updateWalkingStateForCredits() {
|
||||
if (pos_x_ > param.game.game_area.center_x - WIDTH / 2) {
|
||||
setWalkingState(PlayerState::WALKING_LEFT);
|
||||
} else {
|
||||
setWalkingState(PlayerState::WALKING_RIGHT);
|
||||
}
|
||||
}
|
||||
|
||||
void Player::setInputBasedOnPlayerId() {
|
||||
switch (id_) {
|
||||
case 1:
|
||||
setInputPlaying(InputAction::LEFT);
|
||||
break;
|
||||
case 2:
|
||||
setInputPlaying(InputAction::RIGHT);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Player::updateStepCounter() {
|
||||
++step_counter_;
|
||||
if (step_counter_ % 10 == 0) {
|
||||
playSound("walk.wav");
|
||||
}
|
||||
}
|
||||
|
||||
// Pinta el jugador en pantalla
|
||||
void Player::render() {
|
||||
if (power_up_ && isPlaying()) {
|
||||
@@ -404,63 +439,88 @@ void Player::setAnimation() {
|
||||
|
||||
// Actualiza el valor de la variable
|
||||
void Player::updateCooldown() {
|
||||
if (playing_state_ == PlayerState::PLAYING) {
|
||||
if (cant_fire_counter_ > 0) {
|
||||
cooling_state_counter_ = COOLING_DURATION;
|
||||
|
||||
// La mitad del tiempo que no puede disparar tiene el brazo arriba (PlayerState::FIRING)
|
||||
// y la otra mitad en retroceso (PlayerState::RECOILING)
|
||||
if (cant_fire_counter_ == recoiling_state_duration_ / 2) {
|
||||
switch (firing_state_) {
|
||||
case PlayerState::FIRING_LEFT:
|
||||
setFiringState(PlayerState::RECOILING_LEFT);
|
||||
break;
|
||||
case PlayerState::FIRING_RIGHT:
|
||||
setFiringState(PlayerState::RECOILING_RIGHT);
|
||||
break;
|
||||
case PlayerState::FIRING_UP:
|
||||
setFiringState(PlayerState::RECOILING_UP);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
--cant_fire_counter_;
|
||||
if (cant_fire_counter_ == 0) {
|
||||
recoiling_state_counter_ = recoiling_state_duration_;
|
||||
}
|
||||
} else {
|
||||
if (recoiling_state_counter_ > 0) {
|
||||
--recoiling_state_counter_;
|
||||
} else {
|
||||
if (cooling_state_counter_ > COOLING_COMPLETE) {
|
||||
if (cooling_state_counter_ == COOLING_DURATION) {
|
||||
switch (firing_state_) {
|
||||
case PlayerState::RECOILING_LEFT:
|
||||
setFiringState(PlayerState::COOLING_LEFT);
|
||||
break;
|
||||
case PlayerState::RECOILING_RIGHT:
|
||||
setFiringState(PlayerState::COOLING_RIGHT);
|
||||
break;
|
||||
case PlayerState::RECOILING_UP:
|
||||
setFiringState(PlayerState::COOLING_UP);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
--cooling_state_counter_;
|
||||
}
|
||||
|
||||
if (cooling_state_counter_ == COOLING_COMPLETE) {
|
||||
setFiringState(PlayerState::FIRING_NONE);
|
||||
cooling_state_counter_ = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (playing_state_ != PlayerState::PLAYING) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (cant_fire_counter_ > 0) {
|
||||
handleFiringCooldown();
|
||||
} else {
|
||||
handleRecoilAndCooling();
|
||||
}
|
||||
}
|
||||
|
||||
void Player::handleFiringCooldown() {
|
||||
cooling_state_counter_ = COOLING_DURATION;
|
||||
|
||||
// Transition to recoiling state at halfway point
|
||||
if (cant_fire_counter_ == recoiling_state_duration_ / 2) {
|
||||
transitionToRecoiling();
|
||||
}
|
||||
|
||||
--cant_fire_counter_;
|
||||
if (cant_fire_counter_ == 0) {
|
||||
recoiling_state_counter_ = recoiling_state_duration_;
|
||||
}
|
||||
}
|
||||
|
||||
void Player::handleRecoilAndCooling() {
|
||||
if (recoiling_state_counter_ > 0) {
|
||||
--recoiling_state_counter_;
|
||||
return;
|
||||
}
|
||||
|
||||
handleCoolingState();
|
||||
}
|
||||
|
||||
void Player::handleCoolingState() {
|
||||
if (cooling_state_counter_ > COOLING_COMPLETE) {
|
||||
if (cooling_state_counter_ == COOLING_DURATION) {
|
||||
transitionToCooling();
|
||||
}
|
||||
--cooling_state_counter_;
|
||||
}
|
||||
|
||||
if (cooling_state_counter_ == COOLING_COMPLETE) {
|
||||
completeCooling();
|
||||
}
|
||||
}
|
||||
|
||||
void Player::transitionToRecoiling() {
|
||||
switch (firing_state_) {
|
||||
case PlayerState::FIRING_LEFT:
|
||||
setFiringState(PlayerState::RECOILING_LEFT);
|
||||
break;
|
||||
case PlayerState::FIRING_RIGHT:
|
||||
setFiringState(PlayerState::RECOILING_RIGHT);
|
||||
break;
|
||||
case PlayerState::FIRING_UP:
|
||||
setFiringState(PlayerState::RECOILING_UP);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Player::transitionToCooling() {
|
||||
switch (firing_state_) {
|
||||
case PlayerState::RECOILING_LEFT:
|
||||
setFiringState(PlayerState::COOLING_LEFT);
|
||||
break;
|
||||
case PlayerState::RECOILING_RIGHT:
|
||||
setFiringState(PlayerState::COOLING_RIGHT);
|
||||
break;
|
||||
case PlayerState::RECOILING_UP:
|
||||
setFiringState(PlayerState::COOLING_UP);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Player::completeCooling() {
|
||||
setFiringState(PlayerState::FIRING_NONE);
|
||||
cooling_state_counter_ = -1;
|
||||
}
|
||||
|
||||
// Actualiza al jugador a su posicion, animación y controla los contadores
|
||||
|
||||
Reference in New Issue
Block a user