102 lines
2.2 KiB
C++
102 lines
2.2 KiB
C++
#include "player.h"
|
|
|
|
#define LEFT 0
|
|
#define RIGHT 1
|
|
|
|
#define BASE_SPEED 0.5;
|
|
|
|
// Constructor
|
|
Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input)
|
|
{
|
|
this->asset = asset;
|
|
this->renderer = renderer;
|
|
this->input = input;
|
|
|
|
sound_jump = JA_LoadSound(asset->get("sound_player_jump.wav").c_str());
|
|
sound_death = JA_LoadSound(asset->get("sound_player_death.wav").c_str());
|
|
sound_coin = JA_LoadSound(asset->get("sound_player_coin.wav").c_str());
|
|
|
|
texture = new LTexture();
|
|
loadTextureFromFile(texture, asset->get("player.png"), renderer);
|
|
|
|
sprite = new AnimatedSprite(texture, renderer);
|
|
sprite->setPosX(16);
|
|
sprite->setPosY(160 + 16 - 8);
|
|
sprite->setSpriteClip(0, 0, 16, 24);
|
|
sprite->load(asset->get("player.ani"));
|
|
sprite->animate("stand");
|
|
|
|
direction = RIGHT;
|
|
respawn_x = sprite->getPosX();
|
|
respawn_y = sprite->getPosY();
|
|
respawn_direction = direction;
|
|
speed_x = BASE_SPEED;
|
|
speed_y = 0;
|
|
can_jump = true;
|
|
jump_pressed_now = false;
|
|
jump_pressed_before = false;
|
|
standing = true;
|
|
invulnerable = true;
|
|
jumpforce = 10;
|
|
active_animation = 0;
|
|
enabled = true;
|
|
cooldown = 0;
|
|
lifes = 10;
|
|
coins = 0;
|
|
for (Uint8 i = 0; i < 6; i++)
|
|
key[i] = false;
|
|
}
|
|
|
|
// Destructor
|
|
Player::~Player()
|
|
{
|
|
JA_DeleteSound(sound_jump);
|
|
JA_DeleteSound(sound_death);
|
|
JA_DeleteSound(sound_coin);
|
|
|
|
texture->unload();
|
|
delete texture;
|
|
|
|
delete sprite;
|
|
}
|
|
|
|
// Actualiza todas las variables
|
|
void Player::update()
|
|
{
|
|
checkInput();
|
|
sprite->update();
|
|
if (sprite->getVelX() == 0)
|
|
{
|
|
sprite->animate("stand");
|
|
}
|
|
else
|
|
{
|
|
sprite->animate("walk");
|
|
}
|
|
}
|
|
|
|
// Dibuja el objeto
|
|
void Player::render()
|
|
{
|
|
sprite->render();
|
|
}
|
|
|
|
// Comprueba las entradas y modifica variables
|
|
void Player::checkInput()
|
|
{
|
|
// Solo comprueba las entradas de dirección cuando está de pie
|
|
if (input->checkInput(INPUT_LEFT, REPEAT_TRUE))
|
|
{
|
|
sprite->setVelX(-0.6f);
|
|
sprite->setFlip(SDL_FLIP_NONE);
|
|
}
|
|
else if (input->checkInput(INPUT_RIGHT, REPEAT_TRUE))
|
|
{
|
|
sprite->setVelX(0.6f);
|
|
sprite->setFlip(SDL_FLIP_HORIZONTAL);
|
|
}
|
|
else
|
|
{
|
|
sprite->setVelX(0);
|
|
}
|
|
} |