forked from jaildesigner-jailgames/jaildoctors_dilemma
Ya realiza bien las colisiones en el salto
This commit is contained in:
@@ -70,30 +70,29 @@ void Player::draw()
|
||||
// Actualiza las variables del objeto
|
||||
void Player::update()
|
||||
{
|
||||
setLastPosition();
|
||||
checkInput();
|
||||
sprite->update();
|
||||
checkBorders();
|
||||
applyGravity();
|
||||
|
||||
setLastPosition(); // Guarda la posición actual en la variable lastPosition
|
||||
checkInput(); // Comprueba las entradas y modifica variables
|
||||
move(); // Recalcula la posición del jugador y su animación
|
||||
checkBorders(); // Comprueba si está situado en alguno de los cuatro bordes de la habitación
|
||||
applyGravity(); // Aplica gravedad al jugador
|
||||
}
|
||||
|
||||
// Comprueba las entradas y modifica variables
|
||||
void Player::checkInput()
|
||||
{
|
||||
// Se mueve en horizontal solo cuando no esté cayendo
|
||||
if ((input->checkInput(INPUT_LEFT, REPEAT_TRUE)) && (status != STATUS_FALLING))
|
||||
// Solo comprueba las entradas de dirección cuando está de pie
|
||||
if ((input->checkInput(INPUT_LEFT, REPEAT_TRUE)) && (status == STATUS_STANDING))
|
||||
{
|
||||
sprite->setVelX(-0.6f);
|
||||
sprite->animate(0);
|
||||
sprite->setFlip(SDL_FLIP_HORIZONTAL);
|
||||
}
|
||||
else if ((input->checkInput(INPUT_RIGHT, REPEAT_TRUE)) && (status != STATUS_FALLING))
|
||||
else if ((input->checkInput(INPUT_RIGHT, REPEAT_TRUE)) && (status == STATUS_STANDING))
|
||||
{
|
||||
sprite->setVelX(0.6f);
|
||||
sprite->animate(0);
|
||||
sprite->setFlip(SDL_FLIP_NONE);
|
||||
}
|
||||
else
|
||||
else if (status == STATUS_STANDING)
|
||||
{
|
||||
sprite->setVelX(0);
|
||||
}
|
||||
@@ -116,7 +115,7 @@ int Player::getBorder()
|
||||
return border;
|
||||
}
|
||||
|
||||
// Comprueba si está situado en alguno de los cuatro bordes
|
||||
// Comprueba si está situado en alguno de los cuatro bordes de la habitación
|
||||
void Player::checkBorders()
|
||||
{
|
||||
if (sprite->getPosX() < PLAY_AREA_LEFT)
|
||||
@@ -198,14 +197,15 @@ void Player::setStatus(int value)
|
||||
sprite->setVelY(-2.0f);
|
||||
}
|
||||
|
||||
// Si se quiere cambiar a cayendo, ha de ser desde quieto
|
||||
if ((value == STATUS_FALLING) && (status == STATUS_STANDING))
|
||||
// Modifica el estado a 'cayendo'
|
||||
if (value == STATUS_FALLING)
|
||||
{
|
||||
status = STATUS_FALLING;
|
||||
sprite->setVelY(0.5f);
|
||||
sprite->setVelX(0);
|
||||
}
|
||||
|
||||
// Si se quiere cambiar a quieto, no hay resticciones
|
||||
// Modifica el estado a 'de pie'
|
||||
if (value == STATUS_STANDING)
|
||||
{
|
||||
status = STATUS_STANDING;
|
||||
@@ -213,6 +213,12 @@ void Player::setStatus(int value)
|
||||
}
|
||||
}
|
||||
|
||||
// Obtiene el estado del jugador
|
||||
int Player::getStatus()
|
||||
{
|
||||
return status;
|
||||
}
|
||||
|
||||
// Aplica gravedad al jugador
|
||||
void Player::applyGravity()
|
||||
{
|
||||
@@ -245,4 +251,14 @@ void Player::undoLastMove()
|
||||
{
|
||||
sprite->setPosX(lastPosition.x);
|
||||
sprite->setPosY(lastPosition.y);
|
||||
}
|
||||
}
|
||||
|
||||
// Recalcula la posición del jugador y su animación
|
||||
void Player::move()
|
||||
{
|
||||
sprite->update();
|
||||
if (sprite->getVelX() != 0)
|
||||
{
|
||||
sprite->animate(0);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user