forked from jaildesigner-jailgames/jaildoctors_dilemma
Ya realiza bien las colisiones en el salto
This commit is contained in:
@@ -115,7 +115,7 @@ void Game::update()
|
|||||||
|
|
||||||
mRoom->update();
|
mRoom->update();
|
||||||
mPlayer->update();
|
mPlayer->update();
|
||||||
checkPlayerAndWalls(); // Debe ir detras del player update, por si se ha metido en algun muro, sacarlo
|
checkPlayerAndWalls(); // Debe ir detras del player update, por si se ha metido en algun muro
|
||||||
checkPlayerOnBorder();
|
checkPlayerOnBorder();
|
||||||
checkPlayerOnFloor();
|
checkPlayerOnFloor();
|
||||||
}
|
}
|
||||||
@@ -211,7 +211,7 @@ void Game::checkPlayerOnFloor()
|
|||||||
{
|
{
|
||||||
mPlayer->setStatus(STATUS_STANDING);
|
mPlayer->setStatus(STATUS_STANDING);
|
||||||
}
|
}
|
||||||
else
|
else if (mPlayer->getStatus() != STATUS_JUMPING)
|
||||||
{
|
{
|
||||||
mPlayer->setStatus(STATUS_FALLING);
|
mPlayer->setStatus(STATUS_FALLING);
|
||||||
}
|
}
|
||||||
@@ -220,8 +220,7 @@ void Game::checkPlayerOnFloor()
|
|||||||
// Comprueba que el jugador no atraviese ninguna pared
|
// Comprueba que el jugador no atraviese ninguna pared
|
||||||
void Game::checkPlayerAndWalls()
|
void Game::checkPlayerAndWalls()
|
||||||
{
|
{
|
||||||
// Hayque comprobar las cuatro esquinas del tile superior
|
// Comprueba las cuatro esquinas de los dos tiles del jugador
|
||||||
// y las cuatro del tile inferior
|
|
||||||
SDL_Rect rect = mPlayer->getRect();
|
SDL_Rect rect = mPlayer->getRect();
|
||||||
SDL_Point p1 = {rect.x, rect.y};
|
SDL_Point p1 = {rect.x, rect.y};
|
||||||
SDL_Point p2 = {rect.x + 7, rect.y};
|
SDL_Point p2 = {rect.x + 7, rect.y};
|
||||||
@@ -244,7 +243,8 @@ void Game::checkPlayerAndWalls()
|
|||||||
|
|
||||||
if (test)
|
if (test)
|
||||||
{
|
{
|
||||||
|
// Si hay colisión, deshace el movimiento y lo pone en modo caída
|
||||||
mPlayer->undoLastMove();
|
mPlayer->undoLastMove();
|
||||||
// mPlayer->setStatus(STATUS_STANDING);
|
mPlayer->setStatus(STATUS_FALLING);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -70,30 +70,29 @@ void Player::draw()
|
|||||||
// Actualiza las variables del objeto
|
// Actualiza las variables del objeto
|
||||||
void Player::update()
|
void Player::update()
|
||||||
{
|
{
|
||||||
setLastPosition();
|
|
||||||
checkInput();
|
setLastPosition(); // Guarda la posición actual en la variable lastPosition
|
||||||
sprite->update();
|
checkInput(); // Comprueba las entradas y modifica variables
|
||||||
checkBorders();
|
move(); // Recalcula la posición del jugador y su animación
|
||||||
applyGravity();
|
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
|
// Comprueba las entradas y modifica variables
|
||||||
void Player::checkInput()
|
void Player::checkInput()
|
||||||
{
|
{
|
||||||
// Se mueve en horizontal solo cuando no esté cayendo
|
// Solo comprueba las entradas de dirección cuando está de pie
|
||||||
if ((input->checkInput(INPUT_LEFT, REPEAT_TRUE)) && (status != STATUS_FALLING))
|
if ((input->checkInput(INPUT_LEFT, REPEAT_TRUE)) && (status == STATUS_STANDING))
|
||||||
{
|
{
|
||||||
sprite->setVelX(-0.6f);
|
sprite->setVelX(-0.6f);
|
||||||
sprite->animate(0);
|
|
||||||
sprite->setFlip(SDL_FLIP_HORIZONTAL);
|
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->setVelX(0.6f);
|
||||||
sprite->animate(0);
|
|
||||||
sprite->setFlip(SDL_FLIP_NONE);
|
sprite->setFlip(SDL_FLIP_NONE);
|
||||||
}
|
}
|
||||||
else
|
else if (status == STATUS_STANDING)
|
||||||
{
|
{
|
||||||
sprite->setVelX(0);
|
sprite->setVelX(0);
|
||||||
}
|
}
|
||||||
@@ -116,7 +115,7 @@ int Player::getBorder()
|
|||||||
return border;
|
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()
|
void Player::checkBorders()
|
||||||
{
|
{
|
||||||
if (sprite->getPosX() < PLAY_AREA_LEFT)
|
if (sprite->getPosX() < PLAY_AREA_LEFT)
|
||||||
@@ -198,14 +197,15 @@ void Player::setStatus(int value)
|
|||||||
sprite->setVelY(-2.0f);
|
sprite->setVelY(-2.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Si se quiere cambiar a cayendo, ha de ser desde quieto
|
// Modifica el estado a 'cayendo'
|
||||||
if ((value == STATUS_FALLING) && (status == STATUS_STANDING))
|
if (value == STATUS_FALLING)
|
||||||
{
|
{
|
||||||
status = STATUS_FALLING;
|
status = STATUS_FALLING;
|
||||||
sprite->setVelY(0.5f);
|
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)
|
if (value == STATUS_STANDING)
|
||||||
{
|
{
|
||||||
status = 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
|
// Aplica gravedad al jugador
|
||||||
void Player::applyGravity()
|
void Player::applyGravity()
|
||||||
{
|
{
|
||||||
@@ -246,3 +252,13 @@ void Player::undoLastMove()
|
|||||||
sprite->setPosX(lastPosition.x);
|
sprite->setPosX(lastPosition.x);
|
||||||
sprite->setPosY(lastPosition.y);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -48,6 +48,9 @@ private:
|
|||||||
// Guarda la posición actual en la variable lastPosition
|
// Guarda la posición actual en la variable lastPosition
|
||||||
void setLastPosition();
|
void setLastPosition();
|
||||||
|
|
||||||
|
// Recalcula la posición del jugador y su animación
|
||||||
|
void move();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
int status; // Estado en el que se encuentra el jugador. Util apara saber si está saltando o cayendo
|
int status; // Estado en el que se encuentra el jugador. Util apara saber si está saltando o cayendo
|
||||||
|
|
||||||
@@ -84,6 +87,9 @@ public:
|
|||||||
// Cambia el estado del jugador
|
// Cambia el estado del jugador
|
||||||
void setStatus(int value);
|
void setStatus(int value);
|
||||||
|
|
||||||
|
// Obtiene el estado del jugador
|
||||||
|
int getStatus();
|
||||||
|
|
||||||
// Obtiene el rectangulo que delimita al jugador
|
// Obtiene el rectangulo que delimita al jugador
|
||||||
SDL_Rect getRect();
|
SDL_Rect getRect();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user