Files
volcano_2022/source/player.cpp

92 lines
2.0 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(0);
sprite->setPosY(0);
sprite->setSpriteClip(0, 0, 16, 24);
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();
}
// 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_HORIZONTAL);
}
else if (input->checkInput(INPUT_RIGHT, REPEAT_TRUE))
{
sprite->setVelX(0.6f);
sprite->setFlip(SDL_FLIP_NONE);
}
else
{
sprite->setVelX(0);
}
}