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,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>
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user