Aladidos estados al jugador para mejorar el control sobre el salto y las caídas
This commit is contained in:
@@ -138,4 +138,7 @@ void Game::renderDebugInfo()
|
|||||||
|
|
||||||
text = "getTile " + std::to_string(player->map->getTile(player->collider[0]));
|
text = "getTile " + std::to_string(player->map->getTile(player->collider[0]));
|
||||||
debugText->write(0, line += 6, text, -1);
|
debugText->write(0, line += 6, text, -1);
|
||||||
|
|
||||||
|
text = "state " + std::to_string(player->state);
|
||||||
|
debugText->write(0, line += 6, text, -1);
|
||||||
}
|
}
|
||||||
@@ -28,16 +28,14 @@ Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map)
|
|||||||
sprite->setCurrentAnimation("stand");
|
sprite->setCurrentAnimation("stand");
|
||||||
sprite->setFlip(SDL_FLIP_HORIZONTAL);
|
sprite->setFlip(SDL_FLIP_HORIZONTAL);
|
||||||
|
|
||||||
// jumpStrenght = -5.6f;
|
|
||||||
jumpStrenght = 2.0f;
|
jumpStrenght = 2.0f;
|
||||||
gravity = 0.3f;
|
gravity = 0.3f;
|
||||||
accelX = 0.12f;
|
accelX = 0.12f;
|
||||||
maxVX = 1.5f;
|
maxVX = 1.5f;
|
||||||
maxVY = 4.0f;
|
maxVY = 4.0f;
|
||||||
|
|
||||||
jumping = false;
|
state = standing;
|
||||||
jumpPressed = false;
|
jumpPressed = false;
|
||||||
standing = true;
|
|
||||||
invulnerable = false;
|
invulnerable = false;
|
||||||
enabled = true;
|
enabled = true;
|
||||||
cooldown = 0;
|
cooldown = 0;
|
||||||
@@ -104,26 +102,34 @@ void Player::checkInput()
|
|||||||
|
|
||||||
if (input->checkInput(INPUT_UP, REPEAT_TRUE))
|
if (input->checkInput(INPUT_UP, REPEAT_TRUE))
|
||||||
{
|
{
|
||||||
if (!jumping)
|
if (state == standing)
|
||||||
{
|
{
|
||||||
if (!jumpPressed)
|
if (!jumpPressed)
|
||||||
{
|
{
|
||||||
jumpStrenght = 2.0f;
|
jumpStrenght = 2.0f;
|
||||||
vy -= jumpStrenght;
|
vy -= jumpStrenght;
|
||||||
jumping = true;
|
state = jumping;
|
||||||
jumpPressed = true;
|
jumpPressed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if (state == jumping)
|
||||||
|
{
|
||||||
|
if (jumpPressed)
|
||||||
{
|
{
|
||||||
jumpStrenght = std::max(jumpStrenght -= 0.4f, 0.0f);
|
jumpStrenght = std::max(jumpStrenght -= 0.4f, 0.0f);
|
||||||
vy -= jumpStrenght;
|
vy -= jumpStrenght;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
jumpPressed = true;
|
jumpPressed = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
jumpPressed = false;
|
jumpPressed = false;
|
||||||
|
if (state == jumping)
|
||||||
|
{
|
||||||
|
state = falling;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,7 +139,10 @@ void Player::addGravity()
|
|||||||
if (!isOnFloor())
|
if (!isOnFloor())
|
||||||
{
|
{
|
||||||
vy = std::min(vy += gravity, maxVY);
|
vy = std::min(vy += gravity, maxVY);
|
||||||
jumping = true;
|
if (state == standing)
|
||||||
|
{
|
||||||
|
state = falling;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -215,18 +224,18 @@ void Player::move()
|
|||||||
if (vy > 0.0f)
|
if (vy > 0.0f)
|
||||||
{
|
{
|
||||||
y -= ((int)y + h) % tile;
|
y -= ((int)y + h) % tile;
|
||||||
|
state = standing;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
y += tile - ((int)y % tile);
|
y += tile - ((int)y % tile);
|
||||||
|
state = falling;
|
||||||
}
|
}
|
||||||
|
|
||||||
jumping = false;
|
|
||||||
vy = 0.0f;
|
vy = 0.0f;
|
||||||
}
|
}
|
||||||
else if ((!wasOnFloor) && (isOnFloor()) && (vy > 0.0f))
|
else if ((!wasOnFloor) && (isOnFloor()) && (vy > 0.0f))
|
||||||
{
|
{
|
||||||
jumping = false;
|
state = standing;
|
||||||
vy = 0.0f;
|
vy = 0.0f;
|
||||||
y -= ((int)y + h) % tile;
|
y -= ((int)y + h) % tile;
|
||||||
}
|
}
|
||||||
@@ -238,7 +247,7 @@ void Player::move()
|
|||||||
// Anima al jugador
|
// Anima al jugador
|
||||||
void Player::animate()
|
void Player::animate()
|
||||||
{
|
{
|
||||||
if (jumping)
|
if (state != standing)
|
||||||
{
|
{
|
||||||
sprite->setCurrentAnimation("jump");
|
sprite->setCurrentAnimation("jump");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,13 @@
|
|||||||
#ifndef PLAYER_H
|
#ifndef PLAYER_H
|
||||||
#define PLAYER_H
|
#define PLAYER_H
|
||||||
|
|
||||||
|
enum t_player_state
|
||||||
|
{
|
||||||
|
standing,
|
||||||
|
jumping,
|
||||||
|
falling
|
||||||
|
};
|
||||||
|
|
||||||
// The player
|
// The player
|
||||||
class Player
|
class Player
|
||||||
{
|
{
|
||||||
@@ -25,16 +32,15 @@ public:
|
|||||||
float y; // Posición del jugador en el eje Y
|
float y; // Posición del jugador en el eje Y
|
||||||
float vx; // Velocidad/desplazamiento del jugador en el eje X
|
float vx; // Velocidad/desplazamiento del jugador en el eje X
|
||||||
float vy; // Velocidad/desplazamiento del jugador en el eje Y
|
float vy; // Velocidad/desplazamiento del jugador en el eje Y
|
||||||
bool jumping; // Indica si se encuentra saltando
|
|
||||||
bool jumpPressed; // Indica si esta pulsada la tecla de salto
|
bool jumpPressed; // Indica si esta pulsada la tecla de salto
|
||||||
bool enabled; // Si está habilitado
|
bool enabled; // Si está habilitado
|
||||||
bool standing; // Si esta de pie (o quieto?)
|
|
||||||
bool invulnerable; // Indica si se encuentra en estado invulnerable
|
bool invulnerable; // Indica si se encuentra en estado invulnerable
|
||||||
int coins; // Cantidad de monedas
|
int coins; // Cantidad de monedas
|
||||||
int cooldown; // Tiempo de inhabilitación
|
int cooldown; // Tiempo de inhabilitación
|
||||||
int lives; // Cantidad de vidas
|
int lives; // Cantidad de vidas
|
||||||
int w; // Ancho del jugador
|
int w; // Ancho del jugador
|
||||||
int h; // ALto del jugador
|
int h; // ALto del jugador
|
||||||
|
t_player_state state; // Estado actual del jugador
|
||||||
|
|
||||||
// Variables que afectan a la inercia del movimiento
|
// Variables que afectan a la inercia del movimiento
|
||||||
float jumpStrenght; // Cantidad de pixels a desplazarse y velocidad que pilla al saltar
|
float jumpStrenght; // Cantidad de pixels a desplazarse y velocidad que pilla al saltar
|
||||||
|
|||||||
Reference in New Issue
Block a user