Nova animació per a la mort del personatge
Nova lògica al morir
This commit is contained in:
@@ -29,6 +29,7 @@ Player::Player(int id, float x, int y, bool demo, SDL_Rect &play_area, std::vect
|
||||
power_sprite_->setPosY(y - (power_sprite_->getHeight() - player_sprite_->getHeight()));
|
||||
|
||||
// Inicializa variables
|
||||
pos_x_ = default_pos_x_;
|
||||
init();
|
||||
}
|
||||
|
||||
@@ -36,7 +37,6 @@ Player::Player(int id, float x, int y, bool demo, SDL_Rect &play_area, std::vect
|
||||
void Player::init()
|
||||
{
|
||||
// Inicializa variables de estado
|
||||
pos_x_ = default_pos_x_;
|
||||
pos_y_ = default_pos_y_;
|
||||
walking_state_ = PlayerState::WALKING_STOP;
|
||||
firing_state_ = PlayerState::FIRING_NONE;
|
||||
@@ -175,14 +175,22 @@ void Player::move()
|
||||
{
|
||||
// Si el cadaver abandona el area de juego por los laterales lo hace rebotar
|
||||
if ((player_sprite_->getPosX() < param.game.play_area.rect.x) || (player_sprite_->getPosX() + WIDTH_ > play_area_.w))
|
||||
{
|
||||
player_sprite_->setVelX(-player_sprite_->getVelX());
|
||||
}
|
||||
|
||||
// Si el cadaver abandona el area de juego por abajo
|
||||
if (player_sprite_->getPosY() > param.game.play_area.rect.h)
|
||||
// Si el cadaver toca el suelo cambia el estado
|
||||
if (player_sprite_->getPosY() > param.game.play_area.rect.h - HEIGHT_)
|
||||
{
|
||||
setPlayingState(PlayerState::DIED);
|
||||
pos_x_ = player_sprite_->getPosX();
|
||||
pos_y_ = default_pos_y_;
|
||||
player_sprite_->clear();
|
||||
shiftSprite();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case PlayerState::GAME_COMPLETED:
|
||||
case PlayerState::LEAVING_SCREEN:
|
||||
{
|
||||
switch (id_)
|
||||
{
|
||||
@@ -214,28 +222,38 @@ void Player::move()
|
||||
void Player::render()
|
||||
{
|
||||
if (power_up_ && isPlaying())
|
||||
{
|
||||
if (power_up_counter_ > (POWERUP_COUNTER_ / 4) || power_up_counter_ % 20 > 4)
|
||||
{
|
||||
power_sprite_->render();
|
||||
}
|
||||
}
|
||||
|
||||
if (isRenderable())
|
||||
{
|
||||
player_sprite_->render();
|
||||
}
|
||||
}
|
||||
|
||||
// Establece la animación correspondiente al estado
|
||||
void Player::setAnimation()
|
||||
{
|
||||
// Crea cadenas de texto para componer el nombre de la animación
|
||||
const std::string a_walking = walking_state_ == PlayerState::WALKING_STOP ? "stand" : "walk";
|
||||
const std::string a_firing = firing_state_ == PlayerState::FIRING_UP ? "centershoot" : "sideshoot";
|
||||
const std::string a_cooling = firing_state_ == PlayerState::COOLING_UP ? "centershoot" : "sideshoot";
|
||||
|
||||
const SDL_RendererFlip flip_walk = walking_state_ == PlayerState::WALKING_RIGHT ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE;
|
||||
const SDL_RendererFlip flip_fire = firing_state_ == PlayerState::FIRING_RIGHT ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE;
|
||||
const SDL_RendererFlip flip_cooling = firing_state_ == PlayerState::COOLING_RIGHT ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE;
|
||||
|
||||
// Establece la animación a partir de las cadenas
|
||||
if (isPlaying() || isEnteringNameGameCompleted() || isGameCompleted())
|
||||
switch (playing_state_)
|
||||
{
|
||||
case PlayerState::PLAYING:
|
||||
case PlayerState::ENTERING_NAME_GAME_COMPLETED:
|
||||
case PlayerState::LEAVING_SCREEN:
|
||||
{
|
||||
// Crea cadenas de texto para componer el nombre de la animación
|
||||
const std::string a_walking = walking_state_ == PlayerState::WALKING_STOP ? "stand" : "walk";
|
||||
const std::string a_firing = firing_state_ == PlayerState::FIRING_UP ? "centershoot" : "sideshoot";
|
||||
const std::string a_cooling = firing_state_ == PlayerState::COOLING_UP ? "centershoot" : "sideshoot";
|
||||
|
||||
const SDL_RendererFlip flip_walk = walking_state_ == PlayerState::WALKING_RIGHT ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE;
|
||||
const SDL_RendererFlip flip_fire = firing_state_ == PlayerState::FIRING_RIGHT ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE;
|
||||
const SDL_RendererFlip flip_cooling = 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(a_walking);
|
||||
@@ -253,14 +271,27 @@ void Player::setAnimation()
|
||||
// Si dispara recto, invierte el sprite segun hacia donde camina
|
||||
player_sprite_->setFlip(a_firing == "centershoot" ? flip_walk : flip_fire);
|
||||
}
|
||||
break;
|
||||
}
|
||||
else if (isDying() || hasDied())
|
||||
case PlayerState::DYING:
|
||||
{
|
||||
player_sprite_->setCurrentAnimation("death");
|
||||
player_sprite_->setCurrentAnimation("dying");
|
||||
break;
|
||||
}
|
||||
else if (isCelebrating())
|
||||
case PlayerState::DIED:
|
||||
case PlayerState::ENTERING_NAME:
|
||||
case PlayerState::CONTINUE:
|
||||
{
|
||||
player_sprite_->setCurrentAnimation("dead");
|
||||
break;
|
||||
}
|
||||
case PlayerState::CELEBRATING:
|
||||
{
|
||||
player_sprite_->setCurrentAnimation("celebration");
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Actualiza las animaciones de los sprites
|
||||
@@ -423,7 +454,7 @@ void Player::setPlayingState(PlayerState state)
|
||||
setScoreboardMode(ScoreboardMode::ENTER_NAME);
|
||||
break;
|
||||
}
|
||||
case PlayerState::GAME_COMPLETED:
|
||||
case PlayerState::LEAVING_SCREEN:
|
||||
{
|
||||
setScoreboardMode(ScoreboardMode::GAME_COMPLETED);
|
||||
break;
|
||||
@@ -575,7 +606,7 @@ void Player::decEnterNameCounter()
|
||||
if (playing_state_ == PlayerState::ENTERING_NAME)
|
||||
setPlayingState(PlayerState::CONTINUE);
|
||||
else
|
||||
setPlayingState(PlayerState::GAME_COMPLETED);
|
||||
setPlayingState(PlayerState::LEAVING_SCREEN);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user