Refet el spritesheet del jugador i el fitxer d'animacions
Afegits nous estats per al jugador: RECOIL
This commit is contained in:
@@ -60,7 +60,7 @@ void Player::init()
|
||||
vel_y_ = 0;
|
||||
score_ = 0;
|
||||
score_multiplier_ = 1.0f;
|
||||
cool_down_ = 10;
|
||||
cant_fire_counter_ = 10;
|
||||
enter_name_->init(last_enter_name_);
|
||||
|
||||
// Establece la posición del sprite
|
||||
@@ -358,41 +358,49 @@ void Player::setAnimation()
|
||||
case PlayerState::CREDITS:
|
||||
{
|
||||
// Crea cadenas de texto para componer el nombre de la animación
|
||||
const std::string WALKING_ANIMATION = walking_state_ == PlayerState::WALKING_STOP ? "stand" : "walk";
|
||||
const std::string FIRING_ANIMATION = firing_state_ == PlayerState::FIRING_UP ? "centershoot" : "sideshoot";
|
||||
const std::string COOLING_ANIMATION = firing_state_ == PlayerState::COOLING_UP ? "centershoot" : "sideshoot";
|
||||
const std::string WALK_ANIMATION = walking_state_ == PlayerState::WALKING_STOP ? "stand" : "walk";
|
||||
const std::string FIRE_ANIMATION = firing_state_ == PlayerState::FIRING_UP ? "-fire-center" : "-fire-side";
|
||||
const std::string RECOIL_ANIMATION = firing_state_ == PlayerState::RECOILING_UP ? "-recoil-center" : "-recoil-side";
|
||||
const std::string COOL_ANIMATION = firing_state_ == PlayerState::COOLING_UP ? "-cool-center" : "-cool-side";
|
||||
|
||||
const SDL_FlipMode FLIP_WALK = walking_state_ == PlayerState::WALKING_RIGHT ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE;
|
||||
const SDL_FlipMode FLIP_FIRE = firing_state_ == PlayerState::FIRING_RIGHT ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE;
|
||||
const SDL_FlipMode FLIP_COOLING = firing_state_ == PlayerState::COOLING_RIGHT ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE;
|
||||
const SDL_FlipMode FLIP_RECOIL = firing_state_ == PlayerState::RECOILING_RIGHT ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE;
|
||||
const SDL_FlipMode FLIP_COOL = firing_state_ == PlayerState::COOLING_RIGHT ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE;
|
||||
|
||||
// Establece la animación a partir de las cadenas
|
||||
if (firing_state_ == PlayerState::FIRING_NONE)
|
||||
{
|
||||
// No esta disparando
|
||||
player_sprite_->setCurrentAnimation(WALKING_ANIMATION);
|
||||
player_sprite_->setCurrentAnimation(WALK_ANIMATION);
|
||||
player_sprite_->setFlip(FLIP_WALK);
|
||||
}
|
||||
else if (isRecoiling())
|
||||
{
|
||||
// Retroceso
|
||||
player_sprite_->setCurrentAnimation(WALK_ANIMATION + RECOIL_ANIMATION);
|
||||
player_sprite_->setFlip(FLIP_RECOIL);
|
||||
}
|
||||
else if (isCooling())
|
||||
{
|
||||
// Acaba de disparar
|
||||
player_sprite_->setCurrentAnimation(WALKING_ANIMATION + "-" + COOLING_ANIMATION + "-cooldown");
|
||||
player_sprite_->setFlip(FLIP_COOLING);
|
||||
player_sprite_->setCurrentAnimation(WALK_ANIMATION + COOL_ANIMATION);
|
||||
player_sprite_->setFlip(FLIP_COOL);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Está disparando
|
||||
player_sprite_->setCurrentAnimation(WALKING_ANIMATION + "-" + FIRING_ANIMATION);
|
||||
player_sprite_->setCurrentAnimation(WALK_ANIMATION + FIRE_ANIMATION);
|
||||
// Si dispara de lado, invierte el sprite segun hacia donde dispara
|
||||
// Si dispara recto, invierte el sprite segun hacia donde camina
|
||||
player_sprite_->setFlip(FIRING_ANIMATION == "centershoot" ? FLIP_WALK : FLIP_FIRE);
|
||||
player_sprite_->setFlip(FIRE_ANIMATION == "-fire-center" ? FLIP_WALK : FLIP_FIRE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case PlayerState::DYING:
|
||||
case PlayerState::CONTINUE_TIME_OUT:
|
||||
{
|
||||
player_sprite_->setCurrentAnimation("dying");
|
||||
player_sprite_->setCurrentAnimation("rolling");
|
||||
break;
|
||||
}
|
||||
case PlayerState::LYING_ON_THE_FLOOR_FOREVER:
|
||||
@@ -419,38 +427,64 @@ void Player::setAnimation()
|
||||
// Actualiza el valor de la variable
|
||||
void Player::updateCooldown()
|
||||
{
|
||||
if (cool_down_ > 0)
|
||||
if (playing_state_ == PlayerState::PLAYING)
|
||||
{
|
||||
--cool_down_;
|
||||
cooling_state_counter_ = 50;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (cooling_state_counter_ > 0)
|
||||
if (cant_fire_counter_ > 0)
|
||||
{
|
||||
if (cooling_state_counter_ == 40)
|
||||
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::COOLING_LEFT);
|
||||
setFiringState(PlayerState::RECOILING_LEFT);
|
||||
break;
|
||||
case PlayerState::FIRING_RIGHT:
|
||||
setFiringState(PlayerState::COOLING_RIGHT);
|
||||
setFiringState(PlayerState::RECOILING_RIGHT);
|
||||
break;
|
||||
case PlayerState::FIRING_UP:
|
||||
setFiringState(PlayerState::COOLING_UP);
|
||||
setFiringState(PlayerState::RECOILING_UP);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
--cooling_state_counter_;
|
||||
|
||||
--cant_fire_counter_;
|
||||
}
|
||||
else
|
||||
{
|
||||
setFiringState(PlayerState::FIRING_NONE);
|
||||
cooling_state_counter_ = 0;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -464,10 +498,10 @@ void Player::update()
|
||||
updateCooldown();
|
||||
updatePowerUp();
|
||||
updateInvulnerable();
|
||||
updateScoreboard();
|
||||
updateContinueCounter();
|
||||
updateEnterNameCounter();
|
||||
updateShowingName();
|
||||
updateScoreboard();
|
||||
}
|
||||
|
||||
// Incrementa la puntuación del jugador
|
||||
@@ -650,19 +684,20 @@ void Player::setInvulnerable(bool value)
|
||||
// Monitoriza el estado
|
||||
void Player::updateInvulnerable()
|
||||
{
|
||||
if (invulnerable_)
|
||||
{
|
||||
if (invulnerable_counter_ > 0)
|
||||
if (playing_state_ == PlayerState::PLAYING)
|
||||
if (invulnerable_)
|
||||
{
|
||||
--invulnerable_counter_;
|
||||
invulnerable_counter_ % 8 > 3 ? player_sprite_->getTexture()->setPalette(coffees_) : player_sprite_->getTexture()->setPalette(3);
|
||||
if (invulnerable_counter_ > 0)
|
||||
{
|
||||
--invulnerable_counter_;
|
||||
invulnerable_counter_ % 8 > 3 ? player_sprite_->getTexture()->setPalette(coffees_) : player_sprite_->getTexture()->setPalette(3);
|
||||
}
|
||||
else
|
||||
{
|
||||
setInvulnerable(false);
|
||||
player_sprite_->getTexture()->setPalette(coffees_);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
setInvulnerable(false);
|
||||
player_sprite_->getTexture()->setPalette(coffees_);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Establece el valor de la variable
|
||||
@@ -675,11 +710,12 @@ void Player::setPowerUp()
|
||||
// Actualiza el valor de la variable
|
||||
void Player::updatePowerUp()
|
||||
{
|
||||
if (power_up_)
|
||||
{
|
||||
--power_up_counter_;
|
||||
power_up_ = power_up_counter_ > 0;
|
||||
}
|
||||
if (playing_state_ == PlayerState::PLAYING)
|
||||
if (power_up_)
|
||||
{
|
||||
--power_up_counter_;
|
||||
power_up_ = power_up_counter_ > 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Concede un toque extra al jugador
|
||||
|
||||
Reference in New Issue
Block a user