#pragma once #include #include "utils.h" #include "asset.h" #include "room.h" #include "animatedsprite.h" #include "input.h" #include "const.h" #include #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