Trabajando en las colisiones
This commit is contained in:
@@ -1,11 +1,12 @@
|
||||
#include "player.h"
|
||||
|
||||
// Constructor
|
||||
Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input)
|
||||
Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map)
|
||||
{
|
||||
this->asset = asset;
|
||||
this->renderer = renderer;
|
||||
this->input = input;
|
||||
this->map = map;
|
||||
|
||||
sound_jump = JA_LoadSound(asset->get("sound_player_jump.wav").c_str());
|
||||
sound_death = JA_LoadSound(asset->get("sound_player_death.wav").c_str());
|
||||
@@ -15,10 +16,12 @@ Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input)
|
||||
loadTextureFromFile(texture, asset->get("player.png"), renderer);
|
||||
|
||||
sprite = new AnimatedSprite(texture, renderer, asset->get("player.ani"));
|
||||
|
||||
sprite->setPosX(16);
|
||||
sprite->setPosY(168);
|
||||
sprite->setPosY(0);
|
||||
sprite->setCurrentAnimation("stand");
|
||||
|
||||
gravity = 0.5f;
|
||||
can_jump = true;
|
||||
standing = true;
|
||||
invulnerable = true;
|
||||
@@ -28,6 +31,8 @@ Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input)
|
||||
lifes = 10;
|
||||
coins = 0;
|
||||
key.insert(key.end(), {0, 0, 0, 0, 0, 0});
|
||||
const SDL_Point p = {0, 0};
|
||||
collider.insert(collider.end(), {p, p, p, p, p, p});
|
||||
}
|
||||
|
||||
// Destructor
|
||||
@@ -47,7 +52,9 @@ Player::~Player()
|
||||
void Player::update()
|
||||
{
|
||||
checkInput();
|
||||
addGravity();
|
||||
sprite->update();
|
||||
updateColliders();
|
||||
}
|
||||
|
||||
// Dibuja el objeto
|
||||
@@ -78,4 +85,45 @@ void Player::checkInput()
|
||||
sprite->setVelX(0);
|
||||
sprite->setCurrentAnimation("stand");
|
||||
}
|
||||
}
|
||||
|
||||
// Aplica la gravedad
|
||||
void Player::addGravity()
|
||||
{
|
||||
sprite->setVelY(gravity);
|
||||
}
|
||||
|
||||
// Actualiza los puntos de colisión
|
||||
void Player::updateColliders()
|
||||
{
|
||||
const SDL_Point p = {(int)sprite->getPosX(), (int)sprite->getPosY()};
|
||||
|
||||
collider[0] = p;
|
||||
collider[1] = {p.x, p.y + 12};
|
||||
collider[2] = {p.x, p.y + 23};
|
||||
collider[3] = {p.x + 15, p.y};
|
||||
collider[4] = {p.x + 15, p.y + 12};
|
||||
collider[5] = {p.x + 15, p.y + 23};
|
||||
}
|
||||
|
||||
// Compruena las colisiones con el mapa
|
||||
void Player::checkMapCollisions()
|
||||
{
|
||||
bool collision = false;
|
||||
|
||||
for (auto c : collider)
|
||||
{
|
||||
collision |= (map->getTile(c) == wall);
|
||||
}
|
||||
|
||||
if (collision)
|
||||
{
|
||||
undoMove();
|
||||
}
|
||||
}
|
||||
|
||||
// Deshace el último movimiento
|
||||
void Player::undoMove()
|
||||
{
|
||||
sprite->undoMove();
|
||||
}
|
||||
Reference in New Issue
Block a user