forked from jaildesigner-jailgames/jaildoctors_dilemma
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:
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user