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,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, 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,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 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> </data>
</layer> </layer>

View File

@@ -259,20 +259,22 @@ void Player::switchBorders()
{ {
if (border == BORDER_TOP) if (border == BORDER_TOP)
{ {
y = PLAY_AREA_BOTTOM - h - 1; y = PLAY_AREA_BOTTOM - h - 0 - BLOCK;
jumpIni += 128; setState(s_standing);
// jumpIni += 128;
} }
else if (border == BORDER_BOTTOM) else if (border == BORDER_BOTTOM)
{ {
y = PLAY_AREA_TOP + 1; y = PLAY_AREA_TOP + 0;
setState(s_standing);
} }
else if (border == BORDER_RIGHT) else if (border == BORDER_RIGHT)
{ {
x = PLAY_AREA_LEFT + 1; x = PLAY_AREA_LEFT + 0;
} }
if (border == BORDER_LEFT) if (border == BORDER_LEFT)
{ {
x = PLAY_AREA_RIGHT - w - 1; x = PLAY_AREA_RIGHT - w - 0;
} }
onBorder = false; onBorder = false;
@@ -343,7 +345,7 @@ void Player::move()
// Si ha tocado alguna rampa mientras camina (sin saltar), asciende // Si ha tocado alguna rampa mientras camina (sin saltar), asciende
if (state != s_jumping) 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); const int ly = room->checkLeftSlopes(&leftSide);
if (ly > -1) if (ly > -1)
{ {
@@ -386,7 +388,7 @@ void Player::move()
// Si ha tocado alguna rampa mientras camina (sin saltar), asciende // Si ha tocado alguna rampa mientras camina (sin saltar), asciende
if (state != s_jumping) 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); const int ry = room->checkRightSlopes(&rightSide);
if (ry > -1) if (ry > -1)
{ {
@@ -448,17 +450,36 @@ void Player::move()
// Comprueba la colisión con los muros // Comprueba la colisión con los muros
const int pos = room->checkTopSurfaces(&proj); const int pos = room->checkTopSurfaces(&proj);
if (pos > -1)
// Calcula la nueva posición
if (pos == -1)
{ // Si no hay colisión
y += vy;
}
else
{ // Si hay colisión lo mueve hasta donde no colisiona y pasa a estar sobre el suelo { // Si hay colisión lo mueve hasta donde no colisiona y pasa a estar sobre el suelo
y = pos - h; y = pos - h;
setState(s_standing); 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 // Actualiza la posición del sprite