#pragma once #include // for SDL_Rect #include // for Uint32 #include // for string, basic_string #include // for vector #include "utils.h" // for circle_t class AnimatedSprite; class EnterName; class Texture; // Estados del jugador #define PLAYER_STATUS_WALKING_LEFT 0 #define PLAYER_STATUS_WALKING_RIGHT 1 #define PLAYER_STATUS_WALKING_STOP 2 #define PLAYER_STATUS_FIRING_UP 0 #define PLAYER_STATUS_FIRING_LEFT 1 #define PLAYER_STATUS_FIRING_RIGHT 2 #define PLAYER_STATUS_FIRING_NO 3 #define PLAYER_STATUS_PLAYING 0 #define PLAYER_STATUS_CONTINUE 1 #define PLAYER_STATUS_WAITING 2 #define PLAYER_STATUS_ENTERING_NAME 3 #define PLAYER_STATUS_DYING 4 #define PLAYER_STATUS_DIED 5 // Variables del jugador #define PLAYER_INVULNERABLE_COUNTER 200 #define PLAYER_POWERUP_COUNTER 1500 // Clase Player class Player { private: // Objetos y punteros AnimatedSprite *playerSprite; // Sprite para dibujar el jugador AnimatedSprite *powerSprite; // Sprite para dibujar el aura del jugador con el poder a tope SDL_Rect *playArea; // Rectangulo con la zona de juego EnterName *enterName; // Variables int id; // Numero de identificación para el jugador float posX; // Posicion en el eje X int posY; // Posicion en el eje Y float defaultPosX; // Posición inicial para el jugador int defaultPosY; // Posición inicial para el jugador int width; // Anchura int height; // Altura float velX; // Cantidad de pixeles a desplazarse en el eje X int velY; // Cantidad de pixeles a desplazarse en el eje Y float baseSpeed; // Velocidad base del jugador int cooldown; // Contador durante el cual no puede disparar int score; // Puntos del jugador float scoreMultiplier; // Multiplicador de puntos int statusWalking; // Estado del jugador al moverse int statusFiring; // Estado del jugador al disparar int statusPlaying; // Estado del jugador en el juego bool invulnerable; // Indica si el jugador es invulnerable int invulnerableCounter; // Contador para la invulnerabilidad bool extraHit; // Indica si el jugador tiene un toque extra int coffees; // Indica cuantos cafes lleva acumulados bool powerUp; // Indica si el jugador tiene activo el modo PowerUp int powerUpCounter; // Temporizador para el modo PowerUp int powerUpDespX; // Desplazamiento del sprite de PowerUp respecto al sprite del jugador bool input; // Indica si puede recibir ordenes de entrada circle_t collider; // Circulo de colisión del jugador int continueCounter; // Contador para poder continuar Uint32 continueTicks; // Variable para poder cambiar el contador de continue en función del tiempo int scoreBoardPanel; // Panel del marcador asociado al jugador std::string name; // Nombre del jugador std::string recordName; // Nombre del jugador para l atabla de mejores puntuaciones int controllerIndex; // Indice del array de mandos que utilizará para moverse // Actualiza el circulo de colisión a la posición del jugador void shiftColliders(); // Monitoriza el estado void updateInvulnerable(); // Actualiza el contador de continue void updateContinueCounter(); public: // Constructor Player(int id, float x, int y, SDL_Rect *playArea, std::vector texture, std::vector *> animations); // Destructor ~Player(); // Iniciador void init(); // Actualiza al jugador a su posicion, animación y controla los contadores void update(); // Pinta el jugador en pantalla void render(); // Pone las texturas del jugador void setPlayerTextures(std::vector texture); // Actua en consecuencia de la entrada recibida void setInput(int input); // Procesa inputs para cuando está jugando void setInputPlaying(int input); // Procesa inputs para cuando está introduciendo el nombre void setInputEnteringName(int input); // Mueve el jugador a la posición y animación que le corresponde void move(); // Establece el estado del jugador void setWalkingStatus(int status); // Establece el estado del jugador void setFiringStatus(int status); // Establece la animación correspondiente al estado void setAnimation(); // Obtiene el valor de la variable int getPosX(); // Obtiene el valor de la variable int getPosY(); // Obtiene el valor de la variable int getWidth(); // Obtiene el valor de la variable int getHeight(); // Indica si el jugador puede disparar bool canFire(); // Establece el valor de la variable void setFireCooldown(int time); // Actualiza el valor de la variable void updateCooldown(); // Obtiene la puntuación del jugador int getScore(); // Asigna un valor a la puntuación del jugador void setScore(int score); // Incrementa la puntuación del jugador void addScore(int score); // Indica si el jugador está jugando bool isPlaying(); // Indica si el jugador está continuando bool isContinue(); // Indica si el jugador está esperando bool isWaiting(); // Indica si el jugador está introduciendo su nombre bool isEnteringName(); // Indica si el jugador está muriendose bool isDying(); // Indica si el jugador ha terminado de morir bool hasDied(); // Establece el estado del jugador en el juego void setStatusPlaying(int value); // Obtiene el estado del jugador en el juego int getStatusPlaying(); // Obtiene el valor de la variable float getScoreMultiplier(); // Establece el valor de la variable void setScoreMultiplier(float value); // Aumenta el valor de la variable hasta un máximo void incScoreMultiplier(); // Decrementa el valor de la variable hasta un mínimo void decScoreMultiplier(); // Obtiene el valor de la variable bool isInvulnerable(); // Establece el valor del estado void setInvulnerable(bool value); // Obtiene el valor de la variable int getInvulnerableCounter(); // Establece el valor de la variable void setInvulnerableCounter(int value); // Obtiene el valor de la variable bool isPowerUp(); // Establece el valor de la variable a verdadero void setPowerUp(); // Obtiene el valor de la variable int getPowerUpCounter(); // Establece el valor de la variable void setPowerUpCounter(int value); // Actualiza el valor de la variable void updatePowerUpCounter(); // Obtiene el valor de la variable bool hasExtraHit(); // Concede un toque extra al jugador void giveExtraHit(); // Quita el toque extra al jugador void removeExtraHit(); // Habilita la entrada de ordenes void enableInput(); // Deshabilita la entrada de ordenes void disableInput(); // Devuelve el número de cafes actuales int getCoffees(); // Obtiene el circulo de colisión circle_t &getCollider(); // Obtiene el valor de la variable int getContinueCounter(); // Le asigna un panel en el marcador al jugador void setScoreBoardPanel(int panel); // Obtiene el valor de la variable int getScoreBoardPanel(); // Decrementa el contador de continuar void decContinueCounter(); // Establece el nombre del jugador void setName(std::string name); // Establece el nombre del jugador para la tabla de mejores puntuaciones void setRecordName(std::string recordName); // Obtiene el nombre del jugador std::string getName(); // Obtiene el nombre del jugador para la tabla de mejores puntuaciones std::string getRecordName(); // Obtiene la posici´´on que se está editando del nombre del jugador para la tabla de mejores puntuaciones int getRecordNamePos(); // Establece el mando que usará para ser controlado void setController(int index); // Obtiene el mando que usa para ser controlado int getController(); // Obtiene el "id" del jugador int getId(); };