forked from jaildesigner-jailgames/jaildoctors_dilemma
Ya sube las rampas. Aun queda por acabar
This commit is contained in:
@@ -49,6 +49,8 @@ Player::Player(player_t ini, std::string tileset, std::string animation, SDL_Ren
|
||||
colliderPoints.insert(colliderPoints.end(), {p, p, p, p, p, p, p, p});
|
||||
underFeet.insert(underFeet.end(), {p, p});
|
||||
feet.insert(feet.end(), {p, p});
|
||||
|
||||
line = {0, 0, 0, 0};
|
||||
}
|
||||
|
||||
// Destructor
|
||||
@@ -68,6 +70,8 @@ void Player::render()
|
||||
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
|
||||
SDL_RenderDrawPoint(renderer, underFeet[0].x, underFeet[0].y);
|
||||
SDL_RenderDrawPoint(renderer, underFeet[1].x, underFeet[1].y);
|
||||
|
||||
SDL_RenderDrawLine(renderer, line.x1, line.y1, line.x2, line.y2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -243,7 +247,7 @@ void Player::move()
|
||||
proj.h = h - 1;
|
||||
proj.w = ceil(abs(vx)); // Para evitar que tenga un ancho de 0 pixels
|
||||
|
||||
// Comprueba la colisión
|
||||
// Comprueba la colisión con las superficies
|
||||
const int pos = room->checkRightSurfaces(&proj);
|
||||
|
||||
// Calcula la nueva posición
|
||||
@@ -255,6 +259,15 @@ void Player::move()
|
||||
{ // Si hay colisión lo mueve hasta donde no colisiona
|
||||
x = pos + 1;
|
||||
}
|
||||
|
||||
// Si ha tocado alguna rampa, asciende
|
||||
v_line_t leftSide = {(int)x, (int)y, (int)y + h - 1};
|
||||
const int ly = room->checkLeftSlopes(&leftSide);
|
||||
if (ly > -1)
|
||||
{
|
||||
y = ly - h;
|
||||
setState(s_standing);
|
||||
}
|
||||
}
|
||||
|
||||
// Se mueve hacia la derecha
|
||||
@@ -279,6 +292,15 @@ void Player::move()
|
||||
{ // Si hay colisión lo mueve hasta donde no colisiona
|
||||
x = pos - w;
|
||||
}
|
||||
|
||||
// Si ha tocado alguna rampa, asciende
|
||||
v_line_t rightSide = {(int)x + w - 1, (int)y, (int)y + h - 1};
|
||||
const int ry = room->checkRightSlopes(&rightSide);
|
||||
if (ry > -1)
|
||||
{
|
||||
y = ry - h;
|
||||
setState(s_standing);
|
||||
}
|
||||
}
|
||||
|
||||
// Si ha salido del suelo, el jugador cae
|
||||
@@ -313,7 +335,7 @@ void Player::move()
|
||||
}
|
||||
|
||||
// Se mueve hacia abajo
|
||||
if (vy > 0.0f)
|
||||
else if (vy > 0.0f)
|
||||
{
|
||||
// Crea el rectangulo de proyección en el eje X para ver si colisiona
|
||||
SDL_Rect proj;
|
||||
@@ -322,7 +344,7 @@ void Player::move()
|
||||
proj.h = ceil(vy); // Para evitar que tenga una altura de 0 pixels
|
||||
proj.w = w - 1;
|
||||
|
||||
// Comprueba la colisión
|
||||
// Comprueba la colisión con los muros
|
||||
const int pos = room->checkTopSurfaces(&proj);
|
||||
|
||||
// Calcula la nueva posición
|
||||
@@ -511,11 +533,16 @@ bool Player::isOnFloor()
|
||||
|
||||
updateFeet();
|
||||
|
||||
// Comprueba las superficies
|
||||
for (auto f : underFeet)
|
||||
{
|
||||
onFloor |= room->checkTopSurfaces(&f);
|
||||
}
|
||||
|
||||
// Comprueba las rampas
|
||||
onFloor |= room->checkLeftSlopes(&underFeet[0]);
|
||||
onFloor |= room->checkRightSlopes(&underFeet[1]);
|
||||
|
||||
if (onFloor)
|
||||
{
|
||||
debug->add("ONFLOOR");
|
||||
|
||||
Reference in New Issue
Block a user