Ya cambia de habitacion arriba-abajo a traves de rampas. Las rampas ya se detectan al caer (no al saltar)

This commit is contained in:
2022-09-18 13:09:08 +02:00
parent d76958d9bb
commit e1c302e0fc
2 changed files with 36 additions and 15 deletions

View File

@@ -17,7 +17,7 @@
21,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,21,0,0,0,0,0,21,21,
21,21,0,0,0,0,0,0,0,213,213,213,213,213,213,213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,21,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,21,
0,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,253,253,253,253,0,0,0,0,0,0,0,0,21,21,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,253,253,253,0,0,0,0,0,0,0,0,21,21,
21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21
</data>
</layer>

View File

@@ -259,20 +259,22 @@ void Player::switchBorders()
{
if (border == BORDER_TOP)
{
y = PLAY_AREA_BOTTOM - h - 1;
jumpIni += 128;
y = PLAY_AREA_BOTTOM - h - 0 - BLOCK;
setState(s_standing);
// jumpIni += 128;
}
else if (border == BORDER_BOTTOM)
{
y = PLAY_AREA_TOP + 1;
y = PLAY_AREA_TOP + 0;
setState(s_standing);
}
else if (border == BORDER_RIGHT)
{
x = PLAY_AREA_LEFT + 1;
x = PLAY_AREA_LEFT + 0;
}
if (border == BORDER_LEFT)
{
x = PLAY_AREA_RIGHT - w - 1;
x = PLAY_AREA_RIGHT - w - 0;
}
onBorder = false;
@@ -343,7 +345,7 @@ void Player::move()
// Si ha tocado alguna rampa mientras camina (sin saltar), asciende
if (state != s_jumping)
{
v_line_t leftSide = {(int)x, (int)y + h - 2, (int)y + h - 1};
v_line_t leftSide = {(int)x, (int)y + h - 2, (int)y + h - 1}; // Comprueba solo los dos pixels de abajo
const int ly = room->checkLeftSlopes(&leftSide);
if (ly > -1)
{
@@ -386,7 +388,7 @@ void Player::move()
// Si ha tocado alguna rampa mientras camina (sin saltar), asciende
if (state != s_jumping)
{
v_line_t rightSide = {(int)x + w - 1, (int)y + h - 2, (int)y + h - 1};
v_line_t rightSide = {(int)x + w - 1, (int)y + h - 2, (int)y + h - 1}; // Comprueba solo los dos pixels de abajo
const int ry = room->checkRightSlopes(&rightSide);
if (ry > -1)
{
@@ -448,17 +450,36 @@ void Player::move()
// Comprueba la colisión con los muros
const int pos = room->checkTopSurfaces(&proj);
// Calcula la nueva posición
if (pos == -1)
{ // Si no hay colisión
y += vy;
}
else
if (pos > -1)
{ // Si hay colisión lo mueve hasta donde no colisiona y pasa a estar sobre el suelo
y = pos - h;
setState(s_standing);
}
else
{ // Si no hay colisión con los muros, comprueba la colisión con las rampas
if (state != s_jumping)
{ // Las rampas no se miran si se está saltando
v_line_t leftSide = {proj.x, proj.y, proj.y + proj.h - 1};
v_line_t rightSide = {proj.x + proj.w - 1, proj.y, proj.y + proj.h - 1};
const int p = std::max(room->checkRightSlopes(&rightSide), room->checkLeftSlopes(&leftSide));
if (p > -1)
{ // No está saltando y hay colisión con una rampa
// Calcula la nueva posición
y = p - h;
setState(s_standing);
}
else
{ // No está saltando y no hay colisón con una rampa
// Calcula la nueva posición
y += vy;
}
}
else
{ // Esta saltando y no hay colisión con los muros
// Calcula la nueva posición
y += vy;
}
}
}
// Actualiza la posición del sprite