Primera implementacion de tiles atravesables. No funcionará si estan apilados
This commit is contained in:
@@ -17,6 +17,8 @@ Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map)
|
||||
|
||||
sprite = new AnimatedSprite(texture, renderer, asset->get("player.ani"));
|
||||
|
||||
w = 16;
|
||||
h = 24;
|
||||
x = 3 * 16;
|
||||
y = 168;
|
||||
vx = 0;
|
||||
@@ -164,9 +166,9 @@ void Player::updateFeet()
|
||||
{
|
||||
const SDL_Point p = {(int)x, (int)y};
|
||||
|
||||
underFeet[0] = {p.x, p.y + 24};
|
||||
underFeet[1] = {p.x + 7, p.y + 24};
|
||||
underFeet[2] = {p.x + 15, p.y + 24};
|
||||
underFeet[0] = {p.x, p.y + h};
|
||||
underFeet[1] = {p.x + 7, p.y + h};
|
||||
underFeet[2] = {p.x + 15, p.y + h};
|
||||
}
|
||||
|
||||
// Compruena las colisiones con el mapa
|
||||
@@ -187,9 +189,12 @@ bool Player::checkMapCollisions()
|
||||
// Mueve al jugador en función de la velocidad/desplazamiento
|
||||
void Player::move()
|
||||
{
|
||||
const int tile = map->getTileWidth();
|
||||
|
||||
x += vx;
|
||||
if (checkMapCollisions())
|
||||
{
|
||||
// Recoloca
|
||||
if (vx > 0)
|
||||
{
|
||||
do
|
||||
@@ -208,27 +213,28 @@ void Player::move()
|
||||
vx = 0.0f;
|
||||
}
|
||||
|
||||
const bool wasOnFloor = isOnFloor();
|
||||
y += vy;
|
||||
if (checkMapCollisions())
|
||||
{
|
||||
if (vy > 0)
|
||||
// Recoloca
|
||||
if (vy > 0.0f)
|
||||
{
|
||||
do
|
||||
{
|
||||
y--;
|
||||
} while (checkMapCollisions());
|
||||
jumping = false;
|
||||
vy = 0.0f;
|
||||
y -= ((int)y + h) % tile;
|
||||
}
|
||||
else
|
||||
{
|
||||
do
|
||||
{
|
||||
y++;
|
||||
} while (checkMapCollisions());
|
||||
jumping = false;
|
||||
vy = 0.0f;
|
||||
y += tile - ((int)y % tile);
|
||||
}
|
||||
|
||||
jumping = false;
|
||||
vy = 0.0f;
|
||||
}
|
||||
else if ((!wasOnFloor) && (isOnFloor()) && (vy > 0.0f))
|
||||
{
|
||||
jumping = false;
|
||||
vy = 0.0f;
|
||||
y -= ((int)y + h) % tile;
|
||||
}
|
||||
|
||||
sprite->setPosX(x);
|
||||
@@ -266,7 +272,7 @@ bool Player::isOnFloor()
|
||||
|
||||
for (auto f : underFeet)
|
||||
{
|
||||
onFloor |= (map->getTile(f) == wall);
|
||||
onFloor |= ((map->getTile(f) == wall) || (map->getTile(f) == passable));
|
||||
}
|
||||
return onFloor;
|
||||
}
|
||||
Reference in New Issue
Block a user