forked from jaildesigner-jailgames/jaildoctors_dilemma
129 lines
3.0 KiB
C++
129 lines
3.0 KiB
C++
#pragma once
|
|
#include <SDL2/SDL.h>
|
|
|
|
#include "utils.h"
|
|
#include "asset.h"
|
|
#include "room.h"
|
|
#include "animatedsprite.h"
|
|
#include "input.h"
|
|
#include "const.h"
|
|
#include <string>
|
|
|
|
#ifndef PLAYER_H
|
|
#define PLAYER_H
|
|
|
|
//#define VX 0.6
|
|
#define STATUS_STANDING 0
|
|
#define STATUS_JUMPING 1
|
|
#define STATUS_FALLING 2
|
|
|
|
#define GRAVITY 0.035f
|
|
#define MAX_VY 1.2f
|
|
|
|
struct player_t
|
|
{
|
|
float x;
|
|
float y;
|
|
float vx;
|
|
float vy;
|
|
int jump_ini;
|
|
int status;
|
|
SDL_RendererFlip flip;
|
|
};
|
|
|
|
// Clase Player
|
|
class Player
|
|
{
|
|
private:
|
|
LTexture *texture; // Textura con los graficos del enemigo
|
|
Input *input; // Objeto para gestionar la entrada
|
|
|
|
SDL_Renderer *renderer; // El renderizador de la ventana
|
|
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
|
|
color_t color; // Color del jugador
|
|
SDL_Rect collider; // Caja de colisión
|
|
|
|
bool onBorder; // Indica si el jugador esta en uno de los cuatro bordes de la pantalla
|
|
int border; // Indica en cual de los cuatro bordes se encuentra
|
|
|
|
// Comprueba las entradas y modifica variables
|
|
void checkInput();
|
|
|
|
// Comprueba si se halla en alguno de los cuatro bordes
|
|
void checkBorders();
|
|
|
|
// Asigna velocidad negativa en el eje Y al jugador
|
|
void jump();
|
|
|
|
// Aplica gravedad al jugador
|
|
void applyGravity();
|
|
|
|
// Guarda la posición actual en la variable lastPosition
|
|
void setLastPosition();
|
|
|
|
// Recalcula la posición del jugador y su animación
|
|
void move();
|
|
|
|
// Comprueba si ha finalizado el salto
|
|
void checkJump();
|
|
|
|
public:
|
|
AnimatedSprite *sprite; // Sprite del enemigo
|
|
SDL_Rect lastPosition; // Contiene la ultima posición del jugador, por si hay que deshacer algun movimiento
|
|
int jump_ini; // Valor del eje Y en el que se inicia el salto
|
|
int status; // Estado en el que se encuentra el jugador. Util apara saber si está saltando o cayendo
|
|
|
|
// Constructor
|
|
Player(player_t ini, std::string tileset, std::string animation, SDL_Renderer *renderer, Asset *asset, Input *input, Room *room);
|
|
|
|
// Destructor
|
|
~Player();
|
|
|
|
// Pinta el enemigo en pantalla
|
|
void render();
|
|
|
|
// Actualiza las variables del objeto
|
|
void update();
|
|
|
|
// Indica si el jugador esta en uno de los cuatro bordes de la pantalla
|
|
bool getOnBorder();
|
|
|
|
// Indica en cual de los cuatro bordes se encuentra
|
|
int getBorder();
|
|
|
|
// Cambia al jugador de un borde al opuesto. Util para el cambio de pantalla
|
|
void switchBorders();
|
|
|
|
// Obtiene el valor del pixel inferior izquierdo del jugador
|
|
SDL_Point getLeftFoot();
|
|
|
|
// Obtiene el valor del pixel inferior derecho del jugador
|
|
SDL_Point getRightFoot();
|
|
|
|
// Cambia el estado del jugador
|
|
void setStatus(int value);
|
|
|
|
// Obtiene el estado del jugador
|
|
int getStatus();
|
|
|
|
// Obtiene la velocidad en el eje Y del jugador
|
|
float getVelY();
|
|
|
|
// Obtiene el rectangulo que delimita al jugador
|
|
SDL_Rect getRect();
|
|
|
|
// Obtiene el rectangulo de colision del jugador
|
|
SDL_Rect &getCollider();
|
|
|
|
// Deshace el ultimo movimiento
|
|
void undoLastMove();
|
|
|
|
// Obtiene algunos parametros del jugador
|
|
player_t getSpawnParams();
|
|
|
|
// Recarga la textura
|
|
void reLoadTexture();
|
|
};
|
|
|
|
#endif
|