#pragma once #include #include "jail_audio.h" #include "utils.h" #include "input.h" #include "animatedsprite.h" #include "asset.h" #include "map.h" #include "actor.h" #ifndef PLAYER_H #define PLAYER_H enum e_state { standing, jumping, falling }; // The player class Player { public: Asset *asset; // Objeto con la ruta a todos los ficheros de recursos SDL_Renderer *renderer; // El renderizador de la ventana Input *input; // Objeto Input para gestionar las entradas AnimatedSprite *sprite; // Objeto con los graficos, animaciones y posición del jugador LTexture *texture; // Textura con los graficos del jugador Map *map; // Objeto con el mapa float x; // Posición del jugador en el eje X float y; // Posición del jugador en el eje Y float vx; // Velocidad/desplazamiento del jugador en el eje X float vy; // Velocidad/desplazamiento del jugador en el eje Y bool jumpPressed; // Indica si esta pulsada la tecla de salto bool enabled; // Si está habilitado bool invulnerable; // Indica si se encuentra en estado invulnerable int coins; // Cantidad de monedas int cooldown; // Tiempo de inhabilitación int lives; // Cantidad de vidas int w; // Ancho del jugador int h; // ALto del jugador e_state state; // Estado actual del jugador e_border border; // Indica en qué borde de la pantalla está el jugador SDL_Point lastPosition; // Posición anterior // Variables que afectan a la inercia del movimiento float jumpStrenght; // Cantidad de pixels a desplazarse y velocidad que pilla al saltar float gravity; // Gravedad float accelX; // Aceleración al desplazarse horizontalmente float maxVX; // Velocidad mazima de desplazamiento horizontal float maxVY; // Velocidad mazima de desplazamiento vertical std::vector key; // Indica las llaves que posee el jugador std::vector collider; // Contiene los puntos de colisión del jugador con el mapa std::vector underFeet; // Contiene los puntos que hay bajo cada pie del jugador JA_Sound sound_coin; // Sonido al coger monedas JA_Sound sound_death; // Sonido al morir JA_Sound sound_jump; // Sonido al saltar // Comprueba las entradas y modifica variables void checkInput(); // Aplica la gravedad void addGravity(); // Actualiza los puntos de colisión void updateColliders(); // Actualiza los puntos de los pies void updateFeet(); // Compruena las colisiones con el mapa bool checkMapCollisions(); // Mueve al jugador en función de la velocidad/desplazamiento void move(); // Anima al jugador void animate(); // Comprueba si el jugador tiene suelo debajo de los pies bool isOnFloor(); // Comprueba si el jugador tiene una plataforma movil bajo sus pies bool isOnMovingPlatform(); // Comprueba las interacciones con los actores int checkActors(); public: // Constructor Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map); // Destructor ~Player(); // Actualiza todas las variables void update(); // Dibuja el objeto void render(); // Comprueba si está situado en alguno de los cuatro bordes de la habitación bool isOnScreenBorder(); // Devuelve el valor de la variable e_border getBorder(); // Cambia al jugador de un borde al opuesto. Util para el cambio de pantalla void switchBorders(); // Pasa la referencia del mapa void setMap(Map *map); }; #endif