Ya funcionan los tiles atravesables

This commit is contained in:
2022-07-10 21:10:45 +02:00
parent bade27edc4
commit 8d49c78519
5 changed files with 58 additions and 26 deletions

View File

@@ -145,6 +145,9 @@ void Game::draw()
text = "status: " + std::to_string(mPlayer->status);
mText->write(0, 17 * 8, text);
text = "foot: " + std::to_string((int)mPlayer->getLeftFoot().y);
mText->write(0, 18 * 8, text);
// Actualiza la pantalla
mScreen->blit();
}
@@ -208,14 +211,24 @@ void Game::checkPlayerOnBorder()
// Comprueba si el jugador esta sobre el suelo
void Game::checkPlayerOnFloor()
{
// Comprueba ambos pies
if ((mRoom->isFloor(mPlayer->getLeftFoot())) || (mRoom->isFloor(mPlayer->getRightFoot())))
{
mPlayer->setStatus(STATUS_STANDING);
}
else if (mPlayer->getStatus() != STATUS_JUMPING)
{
mPlayer->setStatus(STATUS_FALLING);
// Comprueba si tiene suelo bajo los pies solo cuando no hay velocidad de subida
// y solo cuando el pie este encima de un bloque, es decir, en multiplos de 8
if ((mPlayer->getVelY() >= 0) && ((int)mPlayer->getLeftFoot().y % 8 == 0))
{ // Comprueba ambos pies
bool test = false;
test |= (mRoom->getTile(mPlayer->getLeftFoot()) == TILE_SOLID);
test |= (mRoom->getTile(mPlayer->getRightFoot()) == TILE_SOLID);
test |= (mRoom->getTile(mPlayer->getLeftFoot()) == TILE_TRAVESSABLE);
test |= (mRoom->getTile(mPlayer->getRightFoot()) == TILE_TRAVESSABLE);
if (test)
{
mPlayer->setStatus(STATUS_STANDING);
}
else if (mPlayer->getStatus() != STATUS_JUMPING)
{
mPlayer->setStatus(STATUS_FALLING);
}
}
}
@@ -234,14 +247,14 @@ void Game::checkPlayerAndWalls()
SDL_Point p7 = {rect.x + 7, rect.y + 15};
SDL_Point p8 = {rect.x, rect.y + 15};
bool test = mRoom->isFloor(p1);
test |= mRoom->isFloor(p2);
test |= mRoom->isFloor(p3);
test |= mRoom->isFloor(p4);
test |= mRoom->isFloor(p5);
test |= mRoom->isFloor(p6);
test |= mRoom->isFloor(p7);
test |= mRoom->isFloor(p8);
bool test = (mRoom->getTile(p1) == TILE_SOLID);
test |= (mRoom->getTile(p2) == TILE_SOLID);
test |= (mRoom->getTile(p3) == TILE_SOLID);
test |= (mRoom->getTile(p4) == TILE_SOLID);
test |= (mRoom->getTile(p5) == TILE_SOLID);
test |= (mRoom->getTile(p6) == TILE_SOLID);
test |= (mRoom->getTile(p7) == TILE_SOLID);
test |= (mRoom->getTile(p8) == TILE_SOLID);
if (test)
{