#pragma once #include "utils.h" #include "animatedsprite.h" #ifndef PLAYER_H #define PLAYER_H // The player class Player { private: float mPosX; // Posicion en el eje X int mPosY; // Posicion en el eje Y Uint8 mWidth; // Anchura Uint8 mHeight; // Altura float mVelX; // Cantidad de pixeles a desplazarse en el eje X int mVelY; // Cantidad de pixeles a desplazarse en el eje Y float mBaseSpeed; // Velocidad base del jugador int mCooldown; // Contador durante el cual no puede disparar Uint32 mScore; // Puntos del jugador float mScoreMultiplier; // Multiplicador de puntos Uint8 mStatusWalking; // Estado del jugador Uint8 mStatusFiring; // Estado del jugador bool mAlive; // Indica si el jugador está vivo bool mInvulnerable; // Indica si el jugador es invulnerable Uint16 mInvulnerableCounter; // Temporizador para la invulnerabilidad bool mExtraHit; // Indica si el jugador tiene un toque extra Uint8 mCoffees; // Indica cuantos cafes lleva acumulados bool mInput; // Indica si puede recibir ordenes de entrada AnimatedSprite *mSpriteLegs; // Sprite para dibujar las piernas AnimatedSprite *mSpriteBody; // Sprite para dibujar el cuerpo AnimatedSprite *mSpriteHead; // Sprite para dibujar la cabeza circle_t mCollider; // Circulo de colisión del jugador void shiftColliders(); // Actualiza el circulo de colisión a la posición del jugador public: // Constructor Player(); // Destructor ~Player(); // Iniciador void init(float x, int y, LTexture *textureLegs, LTexture *textureBody, SDL_Renderer *renderer); // Actua en consecuencia de la entrada recibida void setInput(Uint8 input); // Mueve el jugador a la posición y animación que le corresponde void move(); // Pinta el jugador en pantalla void render(); // Establece el estado del jugador void setWalkingStatus(Uint8 status); void setFiringStatus(Uint8 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(); // Actualiza al jugador a su posicion, animación y controla los contadores void update(); // 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); // Obtiene el valor de la variable bool isAlive(); // Establece el valor de la variable void setAlive(bool value); // 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 de la variable void setInvulnerable(bool value); // Obtiene el valor de la variable Uint16 getInvulnerableCounter(); // Establece el valor de la variable void setInvulnerableCounter(Uint16 value); // Actualiza el valor de la variable void updateInvulnerableCounter(); // 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 numero de cafes actuales Uint8 getCoffees(); // Obtiene el circulo de colisión circle_t &getCollider(); }; #endif